【发布时间】:2010-11-05 13:25:04
【问题描述】:
我知道 ImageMagick 的 annotate 命令可以在图像上叠加一些文本,但它可以使用图像的文件名作为文本吗?我会这样认为,但似乎无法找到证实这一点的直接文档。
毫无疑问,一些参数组合可以解决这个问题,或者有没有更好的方法在脚本中做到这一点?
【问题讨论】:
标签: image-processing imagemagick filenames
我知道 ImageMagick 的 annotate 命令可以在图像上叠加一些文本,但它可以使用图像的文件名作为文本吗?我会这样认为,但似乎无法找到证实这一点的直接文档。
毫无疑问,一些参数组合可以解决这个问题,或者有没有更好的方法在脚本中做到这一点?
【问题讨论】:
标签: image-processing imagemagick filenames
Eric L. 的回答是正确的——我为此 +1! -- 但是-annotate 并不能让您对文本的外观进行太多控制。
如果您寻找漂亮,那就选择使用-composite 的东西。您可以使用 IM 命令先构建叠加图像(使用半透明背景),然后将其叠加在原始图像上。
这里是一个示例,如何使用-composite 而不是-annotate,使用脚本方法处理当前目录中的每个PNG 文件。这个甚至会自动调整字体大小并使其适合可用的“宽度 * 90%”——它是一个 Bash 脚本(参见 cmets 以获取 Win 等效项):
for img in *.png; do
width=$(identify -format %W ${img})
width=$(( ${width} * 9 / 10 ))
convert \
-background '#0008' \
-gravity center \
-fill white \
-size ${width}x100 \
caption:"${img}" \
"${img}" \
+swap \
-gravity south \
-composite \
"with-caption-${img}"
done
一个原件的示例插图和相应的输出如下:
!
这是一个使用-annotate的命令,试图设置一些超出默认参数的东西:
for img in so#12231624-right.png; do
convert \
"${img}" \
-fill red \
-undercolor '#0008' \
-pointsize 24 \
-gravity south \
-annotate +0+5 "${img}" \
"with-annotate-${img}"
done
【讨论】:
for %i in (*.png) do convert ....。这里没有最后的“done”,for 部分后面也没有分号。
cd 进入图像文件夹(所有 PNG 都将被注释,因此请进行备份),然后:mogrify -gravity southwest -annotate +20+16 '%t' -font ArialUnicode -pointsize 24 -fill '#ff0000' *.png SouthWest 为您提供左下角位置。 +20+16 将文本从 X 轴边缘填充 20 像素,从 Y 轴边缘填充 16 像素。至于字体,here's how to check which ones you can use, and add more,最后是the different ways you can specify color
'%t' 和 '%f' 指定图像的文件名应用于注释文本。 '%t' 将省略文件扩展名,而 '%f' 将包含它。 (在 Windows 上,这些需要用额外的 % 转义,例如:'%%t')
您还可以使用mogrify 一次向一堆图像添加文本。
mogrify -gravity South -annotate 0 '%f' -pointsize 24 -fill white *.png
这将覆盖现有图像,因此请确保在执行此操作之前进行备份。
【讨论】:
这是一个非常古老的条目,但我每次搜索此主题时都会找到它,但它不起作用(至少对我而言)。这里有一些对我有用的东西:
convert input.jpg -gravity South -annotate 0 '%f' output.jpg
希望这对某人有所帮助...
【讨论】:
'%f' 适用于 Mac,'%%f' 适用于 Windows,所以也许这就是它一开始不适合您的原因?
基于 Steve Czetty 的解决方案,您可以分别使用 -pointsize 和 -fill 设置注释的文本大小和颜色。
这是一个例子:
convert input.jpg -gravity south -pointsize 24 -fill yellow -annotate 0 '%f' output.jpg
显然,您可以根据自己的喜好将文本大小从 24 磅更改为其他颜色,以及将颜色从“黄色”更改为其他颜色。
【讨论】: