【问题标题】:Overlaying an image's filename using ImageMagick (or similar)使用 ImageMagick(或类似方法)覆盖图像的文件名
【发布时间】:2010-11-05 13:25:04
【问题描述】:

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

毫无疑问,一些参数组合可以解决这个问题,或者有没有更好的方法在脚本中做到这一点?

【问题讨论】:

    标签: image-processing imagemagick filenames


    【解决方案1】:

    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
    

    【讨论】:

    • 这是给 Bash 的,是的。在 Windows/DOS 上,语法类似于 for %i in (*.png) do convert ....。这里没有最后的“done”,for 部分后面也没有分号。
    • 谢谢,我实际上解决了由于 Git 存在于我的 windows 中的 bash 命令行。
    • 这对我来说效果很好。 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'
    【解决方案2】:

    您还可以使用mogrify 一次向一堆图像添加文本。

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

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

    【讨论】:

      【解决方案3】:

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

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

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

      【讨论】:

      • 如何在此处指定文件名的特定字符?假设我想要添加文件名的前 3 个字符。我该怎么做 os '%f'{0:2}?
      • 我读到'%f' 适用于 Mac,'%%f' 适用于 Windows,所以也许这就是它一开始不适合您的原因?
      【解决方案4】:

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

      这是一个例子:

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

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

      【讨论】:

      • 您还可以使用 -annotate 旋转文本。只需将 0 更改为 15x15 即可旋转 15 度。
      猜你喜欢
      • 2019-01-20
      • 1970-01-01
      • 1970-01-01
      • 2023-04-02
      • 2023-03-17
      • 1970-01-01
      • 2022-01-23
      • 2015-11-19
      • 2021-03-21
      相关资源
      最近更新 更多