自动裁剪整个图像系列(同时考虑所有图像)

Auto-cropping an image series as a whole (taking into account all images at once)

我有一系列 PNG 格式的图像组成动画。

我想自动裁剪整个动画中多余的透明度,所以我需要找到唯一的最小矩形区域,这样,如果每个图像都裁剪到它,则不会裁剪不透明像素来自任何图像;然后将每个图像裁剪到该区域。

IOW,相当于在 GIMP 中使每个 PNG 成为一个图层,在每个图层上执行 "autocrop layer",然后 "canvas size to layers",然后再次将每个图层重新导出为 PNG。

有没有办法进行 mogrify 或转换(或 GIMP,就此而言,但我想在我的情况下,涉及的图像数量会占用太多内存,无法将它们全部作为 GIMP 层)来执行此操作自动?

如果没有,是否有一个脚本函数可以 return 给定图像的自动裁剪矩形,这样我就可以检查重叠并找到覆盖所有重叠的最小矩形,我自己?

您可以获得像这样的图像裁剪框:

convert input.png -format "%@" info:
245x114+4+2

因此,在本例中,它的宽度为 245 像素,高度为 114 像素,并且距左上角的偏移量为 [4,2]。

因此,为了检验理论,让我们制作 3 张具有透明背景和小红框的图像来表示您的内容。我添加了一个黑色边框,这样您就可以在 Stack Overflow 的白色背景上看到范围:

convert -size 200x100 xc:none -fill red -draw "rectangle 10,10 20,20" 1.png

convert -size 200x100 xc:none -fill red -draw "rectangle 180,20 190,30" 2.png

convert -size 200x100 xc:none -fill red -draw "rectangle 150,80 160,90" 3.png

所以,我可以像这样组合所有 3 张图像的裁剪框:

convert [123].png -evaluate-sequence mean -format %@ info:
181x81+10+10

如果我把它画成蓝色:

convert result.png -stroke blue -fill none -draw "rectangle 10,10 191,91" -bordercolor black -border 1 result.png