【问题标题】:How to crop to equally sized tiles using GraphicsMagick?如何使用 GraphicsMagick 裁剪到相同大小的图块?
【发布时间】:2022-01-10 15:10:36
【问题描述】:

是否可以使用 GraphicsMagick 裁剪相同大小的图块,类似于 ImageMagick 的裁剪“@”修饰符?

convert montage.gif -crop 5x1@ +repage +adjoin montage_%d.gif

如果图像尺寸的高度不变,是否可以使用 GraphicsMagick 的裁剪“%”修饰符?

直接来自 ImageMagick 手册的示例图像:

https://legacy.imagemagick.org/Usage/crop/montage.gif

我想将示例图像分成 5 个相等的图块,如 ImageMagick 手册中所示。

【问题讨论】:

  • 请给出一个具体的例子,说明你从什么开始以及你希望得到什么。另外,我知道英语可能不是您的母语,但是“维度的高度”是什么?
  • 更新了原始帖子,带有示例图片的链接。
  • 有什么理由不只使用 ImageMagick 吗? stackoverflow.com/a/55889365/2836621
  • 它正在嵌入式设备上实现。如果可能的话,我更喜欢使用占用空间较小的 GraphicsMagick。然而,GraphicsMagick 因其尺寸减小(功能与尺寸)而缺乏什么,这一点变得越来越明显。
  • 设备上有哪些操作系统/环境可用? bash? C++ 编译器/交叉编译器?你需要多少功能——只是裁剪还是其他很多东西?

标签: imagemagick crop tiles graphicsmagick


【解决方案1】:

您也许可以让 bash 代替您完成工作:

# Get height and width of image
read h w < <(gm identify -format "%h %w" montage.gif)  

# Crop into 5 full-height, equal width parts
gm convert montage.gif -crop $((w/5))x$h +adjoin result%d.jpg

您也许可以让 shell 为您完成工作:

gm convert montage.gif -trim -gravity center trimmed.gif;

d=$(gm identify -format "%h %w" trimmed.gif); h=$(echo $d | grep -ioE "([0-9]+\s)"); w=$(echo $d | grep -ioE "(\s[0-9]+)"); echo $h; echo $w;

gm convert trimmed.gif -gravity center -crop $((w/5))x$h +adjoin result%d.jpg

【讨论】:

  • 出色的开箱即用思维让 shell 帮助计算!我相信您的原始示例可能正在使用 bash,因为我无法让它在 shell 下执行。我提供了一个适用于我的后续 shell 示例。谢谢你的时间和帮助,马克!
  • 是的,进程替换是一个bash-ism。很高兴你找到了一个可行的替代方案。祝你的项目好运。
猜你喜欢
  • 2019-04-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多