【问题标题】:Is it possible to trim an image and force its dimensions to be even with ImageMagick?是否可以修剪图像并强制其尺寸与 ImageMagick 相同?
【发布时间】:2020-09-22 23:06:30
【问题描述】:

是否可以使用命令行版本的 ImageMagick 修剪图像(比如带有 alpha 的 PNG),以使输出图像的宽度和高度都是偶数(不是奇数)?

确切地说,输出图像应先修剪,然后用透明像素填充。我需要这个来打包精灵表,所以在所有必要的操作之后我想访问存储的“页面几何”或“原始几何”(也可以作为%[fx:page.x]%[fx:page.y]格式变量使用)。

我知道这可以通过大量的 shell/批处理脚本来实现,但坦率地说,我正在寻找智能单线。

【问题讨论】:

  • 我将出价 4 行外壳... 1 获得宽度和高度,1 获得宽度和高度,1 获得圆形高度,1 获得调整大小。
  • 我将把我的出价提高到 2 行 bash... 1 得到宽度和高度加上 1 来调整大小。

标签: imagemagick


【解决方案1】:

更新答案

您似乎想要填充图像,而不是修剪或调整大小,因此您可以使用 -extent 来做到这一点,就像您在 cmets 中所说的那样:

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 是西北,这将填充到右侧和底部。例如,如果您想填充到左侧和顶部,请在 -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
  • 请再看看 - 我添加了一些更有用的东西。
  • 谢谢,应该这样做!我已经将 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 完成它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-11
  • 2020-08-15
  • 1970-01-01
  • 2013-07-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多