如何从图像中裁剪边框/白色空白区域?

我有很多图片周围都有白边。我想一次性裁剪掉这些边框,最好是通过命令行操作。我知道可以使用ImageMagick来实现,但是我找不到合适的命令。
我知道可以使用Windows程序Irfanview,其中有一个“自动裁剪边框”的选项,但我正在寻找基于Ubuntu且最好是基于命令行的解决方案。

你试过Gimp吗? - Mitch
2@Mitch 不,我不知道Gimp有批处理模式。无论如何,使用ImageMagick的Trim功能更简单,所以我会继续使用那个解决方案。 - Rafal
大多数人都会建议使用图形用户界面(GUI)的解决方案... - Wilf
1个回答

ImageMagick Trim

使用命令行选项trimconvertmogrify一起使用,可以修剪与图像角落相同颜色的边框。

用法:

convert input.png -trim output.png

额外选项-fuzz(接受一个百分比作为参数,例如-fuzz 10%)还会移除靠近边角颜色的颜色。 注意:-fuzz选项必须在-trim之前,因为选项的顺序对于convert命令按预期工作很重要。
使用选项+repage可以去除画布(如果适用)。

ImageMagick批量修剪(查找)

上述ImageMagick修剪命令也可与find命令结合使用以批处理处理图像:
find ./ -name "pattern" -exec convert {} -trim outputfolder/{} \;

上述命令将修剪符合命令中pattern部分的所有图像,并将它们保存在名为outputfolder的新文件夹中。
假设图像是PNG格式,那么命令将如下所示:
find ./ -name "*.png" -exec convert {} -trim outputfolder/{} \;

ImageMagick批量裁剪(mogrify)

虽然find可以更好地控制输出文件的位置,但使用ImageMagick的mogrify也可以实现相同的功能:

mogrify -trim *.png

如果你想裁剪靠近角落颜色的色彩(根据观察结果调整百分比):
mogrify -trim -fuzz 10% *.png

请注意,与convert和使用findconvert进行批量操作不同,mogrify会覆盖所有文件。为了保留原始文件,请使用-path选项或在执行mogrify命令之前对目录中的所有图像进行备份复制
附注:mogrify可以用于批量执行大多数(如果不是全部)convert操作,并覆盖原始文件。
正如Trevor在评论中指出,您可以使用-path选项将转换后的文件输出到新目录,而不会覆盖原始文件。
mogrify -trim -path trimmed_folder/ *.png

IrfanView

IrfanView在Wine上运行得相当不错。但请务必仔细检查IrfanView的输出,因为有时候在与Wine一起使用时会损坏图像。


太好了。非常感谢你。我已经添加了关于使用ImageMagick批处理图像的信息,当结合“find”命令时,因为这是你的回答中缺少的内容。 - Rafal
10我使用了mogrify -trim *.jpg命令来裁剪当前文件夹中的所有图片。 - Buttle Butkus
1太棒了!这真是节省了我很多时间。谢谢!:) - antmw1361
@ButtleButkus 我编辑了答案,包括了这个信息。不知为何之前我忘记了这个选项。 - Rafal
3有没有办法按照图片的高度修剪PNG图像,同时保持宽度不变? - ddas
我认为值得注意的是,mogrify会修改现有文件(而不是像pdfcrop那样创建新副本)。毕竟,你可能会丢失“数据”... - Prof.Chaos
嗯,我并没有阅读整篇文章,只是看了评论部分。所以我是在提到Buttle Butkus的评论。而且因为我确定其他人可能也会这样做,所以我想在附近加上这个注释。 - Prof.Chaos
trim find命令给我返回了以下输出: convert: 写入Blob失败 `outputfolder/.//outputfolder/filename.png' @ error/png.c/MagickPNGErrorHandler/1715。 - 00-BBB
无论上述错误输出如何,修剪后的图像实际上是存在的。尝试只修剪顶部和底部,最终放弃并使用Photoshop...(几乎成功了,但每次批处理命令时都会在中间添加白线) - 00-BBB
@00-BBB:如果您需要一个可脚本化的方法来仅修剪一侧,请参考http://www.imagemagick.org/Usage/crop/#trim_oneside。 - Takkat
1请注意,如果您不想覆盖原始文件,可以使用mogrify命令并加上-path选项:mogrify -trim -path trimmed_folder/ *.png - Trevor
@wxyz:谢谢 - 我在我的回答中已经包含了一条说明。 - Takkat