使用ImageMagick可以裁剪图像并强制其尺寸为偶数吗?

4
在ImageMagick的命令行版本中,是否可以修剪图像(例如带有alpha通道的PNG),使输出图像的宽度和高度都是偶数(而不是奇数)?具体来说,输出图像应首先被修剪,然后用透明像素填充。我需要这个功能来进行精灵图集打包,因此在完成所有必要的操作后,我想访问存储的“页面几何”或“原点几何”(也可用作%[fx:page.x] %[fx:page.y]格式变量)。我知道这可以通过大量的shell /批处理脚本实现,但老实说,我正在寻找聪明的一行代码。

我会出价编写4行的shell脚本... 1用于获取宽度和高度,1用于将宽度四舍五入,1用于将高度四舍五入,1用于重设大小。 - Mark Setchell
我将把我的竞标改进为2行 bash 代码...1行用于获取宽度和高度,另外1行用于调整大小。 - Mark Setchell
1个回答

2

更新的答案

看起来你想要填充图像,而不是裁剪或调整大小,所以你可以像你在评论中说的那样使用-extent来实现:

convert image.png -background orange -extent  $(convert image.png -format '%[fx:2*int((w+1)/2)]x%[fx:2*int((h+1)/2)]!' info:) result.png

如果你想用透明像素代替我相当时髦的橙色像素,只需将orange改为none
由于默认的-gravity是NorthWest,这将在右侧和底部填充。例如,如果您想填充到左上角,请在-extent之前使用-gravity SouthEast

原始回答

未经测试,但应该可以...

这将为您获取新的尺寸:

convert image.png -format '%[fx:2*int((w+1)/2)]x%[fx:2*int((h+1)/2)]!' info:

所以你需要做的是:

convert image.png -resize $(COMMAND ABOVE) result.png

这段代码调整了图像大小,但我希望它保持原始大小,只是画布更大。我会承担责任,因为我的问题不够精确。尽管如此,这对我很有帮助,因为我们可以将“-resize”更改为“-extent”。 - rostok
1
请再看一下 - 我添加了一些更有用的东西。 - Mark Setchell
谢谢,应该可以了!我已经将IM升级到v7,并且非常确定现在它可以解析其他参数中的FX表达式。因此,magick image.png -background orange -extent "%[fx:2*int((w+1)/2)]x%[fx:2*int((h+1)/2)]!" result.png也可以工作。不幸的是,我无法使用mogrify完成它。 - rostok

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接