如何使用imagemagick裁剪至少16:9

时间:2016-02-10 13:05:34

标签: imagemagick imagemagick-convert

我有未知大小和比例的图像。我希望采取集中的16:9作物。

如果所有图像都是4:3知道,那么很容易:9/16÷3/4 = 0.75所以我只需将高度设置为原始的75%:

convert photo.jpg -gravity center -crop '100%x75%' +repage photo16x9.jpg

然而,如果照片已经是16:9(甚至更宽),我不想裁剪它,如果它比16:9“更高”我想要仅以必要的数量裁剪它达到16:9的收成。

如果我想缩放到已知的宽度或高度(example question for that),这也会更容易。但我希望尽可能多地保留原始图像数据。

因此,我正在寻找一种方法,将高度裁剪为图像宽度的一个因子,并采用截止方式。

我希望这可能有效

convert photo.jpg -gravity center \
  -crop '100%x[fx:9/16*w]' +repage photo16x9.jpg

但是似乎[fx:...]参数中不允许使用-crop

有点黑客我找到了一个我无法理解的地方(!)也失败了,但我会在这里列出来展示研究工作!

convert photo.jpg -set option:distort:viewport \
  '[fx: w]x[fx: w*9/16 ]+0+0' -filter point \
  -distort SRT 0 +repage photo16x9.jpg

(我意识到上面的任何尝试都没有涵盖图像已经比16:9更宽的情况,但如果[fx:...]事情有效,我可以通过使用三元运算符实现这一点,所以我保持示例简单。)

1 个答案:

答案 0 :(得分:1)

也许您可以只计算宽高比并使用它来做出决定。创建两个测试图像,一个15x9和一个17x9:

convert -size 15x9 xc:black 15x9.png
convert -size 17x9 xc:black 17x9.png

现在请ImageMagick告诉您宽高比是否大于16:9或小于或等于16:9:

convert 15x9.png -format "%[fx:(w/h)>16/9]" info:
0

convert 17x9.png -format "%[fx:(w/h)>16/9]" info:
1