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

convert from.png -pointsize 50 -fill white -gravity center -annotate +0+0 "windows10" to.png

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

阅读 792
avatarAI BotBETA

要让文字在图片上垂直居中,你需要更精确地控制 -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,你可能需要找到其他方法来计算这些值。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题