Image processing 覆盖图像';使用ImageMagick(或类似工具)的文件名

Image processing 覆盖图像';使用ImageMagick(或类似工具)的文件名,image-processing,imagemagick,filenames,Image Processing,Imagemagick,Filenames,我知道ImageMagick的annotate命令可以在图像上叠加一些文本,但是它可以使用图像的文件名作为文本吗?我会这么想,但似乎找不到直接的文档来证实这一点 毫无疑问,一些参数的组合可以管理这一点,或者在脚本中有更好的方法来实现这一点吗?这是一个非常古老的条目,但我每次搜索此主题时都会发现它,但它不起作用(至少对我来说)。这里有一些对我有用的东西: convert input.jpg -gravity South -annotate 0 '%f' output.jpg 希望这有助于某人…埃

我知道ImageMagick的
annotate
命令可以在图像上叠加一些文本,但是它可以使用图像的文件名作为文本吗?我会这么想,但似乎找不到直接的文档来证实这一点


毫无疑问,一些参数的组合可以管理这一点,或者在脚本中有更好的方法来实现这一点吗?

这是一个非常古老的条目,但我每次搜索此主题时都会发现它,但它不起作用(至少对我来说)。这里有一些对我有用的东西:

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

希望这有助于某人…

埃里克·L.的回答是正确的--+1来自我但是,
-annotate
并不能让您对文本的外观有太多的控制

如果你想要漂亮,那就选择使用
-composite
的东西。可以使用IM命令首先构造覆盖图像(使用半透明背景),然后将其覆盖到原始图像上

下面是一个示例,如何使用
-composite
而不是
-annotate
,使用脚本化方法处理当前目录中的每个PNG文件。这个脚本甚至会自动调整字体大小,并将其调整到可用的“宽度*90%”中——这是一个Bash脚本(请参阅Win等效脚本的注释):

一份原件和相应输出的示例说明如下:

!

下面是一个使用
-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

您还可以使用
mogrify
一次将文本添加到一组图像中

mogrify -gravity South -annotate 0 '%f' -pointsize 24 -fill white  *.png

这将覆盖现有图像,因此请确保在执行此操作之前有备份。

基于Steve Czetty的解决方案,您可以分别使用-pointsize和-fill设置批注的文本大小和颜色

下面是一个例子:

convert input.jpg -gravity south -pointsize 24 -fill yellow -annotate 0 '%f' output.jpg

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

这是针对Bash的,是的。在Windows/DOS上,语法类似于(*.png)do convert中%i的
。这里没有最后的“完成”,在
部分之后也没有分号。谢谢,我实际上解决了它,因为Git,我的windows中存在bash命令行。这对我来说很有效
cd
放入图像文件夹(所有png都将被注释,因此进行备份),然后:
mogrify-重力西南-注释+20+16'%t'-font-ArialUnicode-点大小24-填充'#ff0000'*。png
soutwest提供左下角位置
+20+16
在距离X轴边缘20个像素、距离Y轴边缘16个像素的位置填充文本。至于字体,最后还有一个细节:
'%t'
'%f'
指定图像的文件名应用于注释文本<代码>'%t'
将省略文件扩展名,而
'%f'
将包含它。(在Windows上,这些文件需要使用额外的%s进行转义,如:
“%%t”
)如何在此处指定文件名的特定字符?假设我想添加文件名的前3个字符。操作系统“%f”{0:2}应该怎么做?我听说
“%f”
是Mac版的,
'%%f'
是Windows版的,所以可能这就是为什么它一开始对你不起作用的原因吧?你也可以使用-annotate来旋转文本。只需将0更改为15x15即可旋转15度。
convert input.jpg -gravity south -pointsize 24 -fill yellow -annotate 0 '%f' output.jpg