Imagemagick 转换和合成一批文件

Imagemagick convert and compose batch of files

我正在尝试像这样快速转换一批文件:

convert ./src/*.png -set filename: '%t' -gravity West -draw 'image over 0,0 424,600 "./panel.png"' ./dest/%[filename:].png

这与 COMPOSITE 非常相似:

convert ./src/*.png ./panel.png -set filename: '%t' -gravity +0+0 -composite ./dest/%[filename:].png

除了最后一个不起作用,只是制作了第一个看起来很糟糕的文件。 好像是bug?

有人知道如何使用 -composite 使其更正确吗? for|awk|ls|find for each file in shell 是不可接受的——因为它比第一个例子慢。

Looks like it's bug?

不是错误。您的第二个命令是告诉 ImageMagick 将匹配到图像堆栈的所有文件都消耗掉,并将其合成为一个。

您可以使用 mogrify 实用程序尝试相同的解决方案,但我相信如果您将 bash 脚本扩展为单个 for 循环。

for f in $(ls src/*.png)
do
   dest=$(basename $f);
   convert "$f" ./panel.png -gravity West -composite "./dest/$dest"
done
  • 读入文件列表,
  • 设置它们的输出文件名,
  • 包括 IM 特殊图像占位符“null:”,
  • 读入叠加图片,
  • 可选地,设置几何,
  • 并使用“-layers composite”合成叠加到所有其他图像上。

null: 将原始输入文件列表与叠加图像分开,因此 ImageMagick 知道您要在堆栈中的哪个位置开始进行合成。

尝试这样的事情(为了便于阅读,每行一步):

convert ./src/*.png \
    -set filename: '%t' \
    null: \
    ./panel.png \
    -layers composite ./dest/%[filename:].png

您可以使用 Imagemagick mogrify 命令。参见 http://www.imagemagick.org/Usage/basics/#mogrify and http://www.imagemagick.org/Usage/basics/#mogrify_compose

cd to input directory
mogrify -format png -path ./dest -gravity West -draw 'image over 0,0 424,600 "./panel.png"' *.png