ImageMagick:如何重复使用单个图像进行多次叠加

ImageMagick: How do I reuse one single image to overlay it multiple times

提问人:tobidude 提问时间:8/23/2023 更新时间:8/27/2023 访问量:39

问:

我想使用命令行在 ImageMagick 中多次(最多数千次)将同一图像叠加在不同的随机位置。

convert -size 800x800 xc:transparent ^
-draw "image over 5,10 0,0 'overlay.png'" ^
-draw "image over 58,23 0,0 'overlay.png'" ^
-draw "image over 701,500 0,0 'overlay.png'" ^
....
PNG64:output.png

convert -size 800x800 xc:transparent ^
overlay.png -geometry +0+200 -composite ^
overlay.png -geometry +15+512 -composite ^
overlay.png -geometry +699+20 -composite ^
....
PNG64:output.png

工作就好了!

但我有一种感觉,ImageMagick每次都从磁盘重新加载覆盖.png,这似乎对性能非常不利。

有没有更好的方法?例如,带有“-clone”的东西?

任何帮助都非常感谢!

命令行 imagemagick 覆盖 imagick

评论

0赞 Mark Setchell 8/27/2023
请注意,如果要在图像上绘制数千个圆圈,则可能会遇到命令长度问题。如果是这样,请查看改用,请参阅此处 stackoverflow.com/a/75711947/2836621magick-script

答:

2赞 GeeMack 8/23/2023 #1

ImageMagick可以将图像读入命令,并将其存储在内存寄存器中,以便在命令运行期间从内存访问。这里有一个简单的例子......

convert overlay.png -write mpr:img0 +delete ^
    -size 800x800 xc:transparent ^
    -draw "image over 5,10 0,0 mpr:img0" ^
    -draw "image over 58,23 0,0 mpr:img0" ^
    -draw "image over 701,500 0,0 mpr:img0" ^
....
PNG64:output.png

这会将叠加图像读取到命令中,并将其写入名为“img0”的内存寄存器(您可以将其命名为任何您想要的名称),然后将其从活动命令中删除。然后,每当需要它时,只需引用其名称“mpr:img0”即可将其带回命令中。