使用ImageMagick(或类似工具)叠加图像文件名

19
我知道ImageMagick的annotate命令可以在图像上叠加一些文本,但它能使用图像文件名作为此文本吗?我本以为可以,但似乎找不到直接证实这一点的文档。
毫无疑问,某些参数的组合可以实现这一点,或者在脚本中有更好的方法吗?
4个回答

19

Eric L.的回答是正确的-我给他+1!但是-annotate无法对文本外观进行太多控制。

如果你想要更好的效果,可以尝试使用-composite。你可以使用IM命令先构建一个叠加图像(使用半透明背景),然后将其覆盖在原始图像上。

以下是一个使用脚本方式来处理当前目录中的每个PNG文件,使用-composite而不是-annotate,它甚至会自动调整字体大小并将其适应到可用的“宽度* 90%”-这是一个Bash脚本(有关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

原始图片 处理后的图片


这是针对Bash的,是的。在Windows/DOS上,语法会类似于 for %i in (*.png) do convert ....。这里没有最终的 'done',也没有在 for 部分之后加分号。 - Kurt Pfeifle
谢谢,我实际上是在我的Windows上使用Git中存在的Bash命令行解决了它。 - Serguzest
这对我很有效。cd 进入图像文件夹(所有 PNG 将被注释,因此备份),然后:mogrify -gravity southwest -annotate +20+16 '%t' -font ArialUnicode -pointsize 24 -fill '#ff0000' *.png Southwest 可以让您放置在左下角。 +20+16 在 X 轴上将文本从边缘填充 20 像素,在 Y 轴上将文本从边缘填充 16 像素。至于字体,这里是如何检查您可以使用哪些字体,并添加更多,最后不同的指定颜色方法 - Mentalist
1
还有一个细节:'%t''%f'指定注释文本应使用图像的文件名。'%t'将省略文件扩展名,而'%f'将包括它。 (在Windows上,这些需要用额外的%进行转义,如:'%%t' - Mentalist

18

这是一个非常古老的条目,但每次我搜索此主题时都会找到它,但对我来说它无效。以下是适用于我的一些内容:

convert input.jpg -gravity South -annotate 0 '%f' output.jpg

希望这能对某人有所帮助...


你如何指定文件名的特定字符?比如说,如果我想要在文件名中添加前三个字符,我应该怎么做os '%f'{0:2}? - Charles Clayton
我看到'%f'是为Mac准备的,而'%%f'是为Windows准备的,所以也许这就是为什么一开始它对你不起作用的原因? - Mentalist
这里有一个不错的替代方案。 - undefined

2
您可以使用 mogrify 批量将文本添加到多张图片中。
mogrify -gravity South -annotate 0 '%f' -pointsize 24 -fill white  *.png

这将覆盖现有的图片,所以在执行此操作之前,请确保您已备份。


0
借鉴Steve Czetty的解决方案,似乎可以通过-pointsize和-fill分别设置注释的文本大小和颜色。
以下是一个例子:
convert input.jpg -gravity south -pointsize 24 -fill yellow -annotate 0 '%f' output.jpg

显然,您可以将文本大小从24点更改为其他大小,以及将颜色从“黄色”更改为其他颜色,根据您的喜好。


1
您也可以使用-annotate旋转文本。只需将0更改为15x15即可旋转15度。 - fmw42

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接