当前位置: 首页 > 知识库问答 >
问题:

linux - imagemagick如何让图片写字且垂直居中?

那铭
2024-08-29
convert from.png -pointsize 50 -fill white -gravity center -annotate +0+0 "windows10" to.png

我量过,垂直方向上并没有居中。

共有1个答案

陆俊智
2024-08-29

要让文字在图片上垂直居中,你需要更精确地控制 -annotate 命令中的偏移量。由于 -gravity center 只会将文字的水平中心点与图片的中心点对齐,但不会自动调整垂直位置,你需要手动计算或调整垂直方向的偏移量。

一个简单的方法是先获取图片的高度,然后根据字体大小和期望的垂直位置(如中心)来计算偏移量。不过,在命令行中直接这样做可能有些复杂,因为 ImageMagick 不直接提供查询图片尺寸的命令输出。但你可以通过一些间接的方法来实现,或者预先知道图片的尺寸。

假设你已经知道图片的高度(或可以通过其他方式获取),你可以使用 -draw 参数和 text 命令来更精确地放置文字,或者使用 -annotate 并计算垂直偏移。

这里是一个使用 -annotate 并手动设置垂直偏移的示例,假设图片高度为 H,字体大小为 50,你可以这样计算垂直偏移(注意,这里只是一个粗略的估计,实际可能需要根据字体和图片的具体情况进行调整):

convert from.png \
    -pointsize 50 \
    -fill white \
    -annotate "$(echo "$(identify -format '%h' from.png) / 2 - 25" | bc)x$(echo "$(identify -format '%w' from.png) / 2" | bc)" "windows10" \
    to.png

注意:上面的命令试图通过 identify 命令获取图片的高度(%h)和宽度(%w),然后计算文字的 x 和 y 坐标。但是,这个命令实际上并不会工作,因为 -annotate 需要的是相对于图片左上角的偏移量,而不是绝对坐标。因此,你需要手动计算这个偏移量,或者使用 -draw 命令结合 text 来更灵活地定位。

一个使用 -draw 命令的示例:

convert from.png \
    -fill white \
    -font Arial \
    -pointsize 50 \
    -draw "text $(echo "$(identify -format '%[fx:w/2]' from.png)" | bc),$(echo "$(identify -format '%[fx:h/2-25]' from.png)" | bc) 'windows10'" \
    to.png

在这个命令中,%[fx:w/2]%[fx:h/2-25] 分别用于计算文字的水平中心位置和垂直中心位置(向下偏移 25 像素以考虑字体大小的一半,这个值可能需要根据你的具体字体和期望的视觉效果进行调整)。注意,这里假设你已经安装了 ImageMagick,并且 identify 命令可用(它通常与 ImageMagick 一起安装)。

注意:这些命令中的 bc 工具用于处理数学运算,确保在 Shell 脚本中正确执行。如果你的环境中没有 bc,你可能需要找到其他方法来计算这些值。

 类似资料:
  • 本文向大家介绍如何垂直居中` `?相关面试题,主要包含被问及如何垂直居中` `?时的应答技巧和注意事项,需要的朋友参考一下 使用协助元素(这里是i),作为img的相邻元素,同为inline-block的两元素相邻时增加vertical-align: middle

  • 问题内容: 我正在尝试制作一个小的用户名和密码输入框。 我想问一下,如何垂直对齐div? 我所拥有的是: 如何使ID为Username和Form的div垂直对齐中心?我试着把: 在CSS中用于ID为Login的div,但似乎不起作用。任何帮助,将不胜感激。 问题答案: 现代浏览器中最好的方法是使用flexbox: 某些浏览器将需要供应商前缀。对于不支持Flexbox的较旧的浏览器(例如IE9及更低

  • 本文向大家介绍如何实现垂直居中?相关面试题,主要包含被问及如何实现垂直居中?时的应答技巧和注意事项,需要的朋友参考一下 参考回答: 父元素固定宽高,利用定位及设置子元素margin值为自身的一半。 父元素固定宽高,子元素设置position: absolute,margin:auto平均分配margin css3属性transform。子元素设置position: absolute; left:

  • 本文向大家介绍CSS图片响应式 垂直水平居中,包括了CSS图片响应式 垂直水平居中的使用技巧和注意事项,需要的朋友参考一下 我看最近微博流行CSS居中技术,我看了几编资料写的都不多好,于是抽时间把相关资料整合了,具体内容如下。 点击此处下载源码 效果展示: 要求: 1.尽可能兼容更多浏览器,这里兼容到ie7,ie6不支持max-*就不考虑了。 2.浏览器尺寸变化时,图片总是等比例拉伸或缩放。 3.

  • 问题内容: 垂直居中html图像旁边的文本的最佳和最简单的方法是什么?需要与浏览器版本/类型无关。纯HTML / CSS解决方案。 问题答案: 我总是退回到这个解决方案上。不太hack-ish并完成工作。 编辑:我应该指出,您可以使用以下代码来实现想要的效果(原谅内联样式;它们应该在单独的工作表中)。图像(基线)上的默认对齐方式似乎会导致文本对齐基线。至少在FireFox3中,将其设置为中值可以使

  • 假设我有一个bootstrap按钮,它有一个字体很棒的图标和一些文本: 如何使文本显示为垂直居中?文本现在与图标的底部边缘对齐:http://jsfidle.net/v7dlm/1/ 编辑:我有一个可能的解决方案:http://jsfidle.net/cldeg/1/但感觉有点怪--引入额外的p标记,使用拉左和display:table。也许有人可以建议一个更简单的方法。

  • 问题内容: 我有一个自举轮播,并且我正在尝试为该轮播创建标题,该标题始终垂直居中并稍微向左定位。我有用于水平定位的css。但是当我尝试垂直定位时,字幕不会停留在原处。如何使.carousel字幕始终保持垂直居中,并稍微向左对齐? HTML: CSS: 为了使字幕垂直对齐,我所做的任何事情都随着屏幕尺寸减小,字幕被从轮播的顶部推出。.谢谢您的帮助。 问题答案: 您可以使用CSS属性的功能垂直对齐元素

  • 我想在表格上垂直对齐。 从'React'导入React,{Component};从“原生基”导入{Container,Header,Content,Form,Item,Input,Button,Text};从“react native”导入{StyleSheet}; }); 我的应用程序看起来像这样。