1

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

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

IOW,相当于在 GIMP 中使每个 PNG 成为一个图层,在每个图层上执行“自动裁剪图层”,然后“将画布大小转换为图层”,然后再次将每个图层重新导出为 PNG。

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

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

4

1 回答 1

2

您可以获得如下图像的裁剪框:

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

所以,在这个例子中,它是 245px 宽 x 114px 高并且从左上角偏移 [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

在此处输入图像描述

于 2016-04-04T10:24:20.593 回答