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

如何使用imagemagick裁剪到至少16:9,imagemagick,imagemagick-convert,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裁剪所需的数量 如果我想缩放到已知的宽度或高度(),这也会更容易。但我希望保留

我有一些大小和比例未知的图像。我想以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裁剪所需的数量

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

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

我希望这能奏效

convert photo.jpg -gravity center \
  -crop '100%x[fx:9/16*w]' +repage photo16x9.jpg
但是遗憾的是,
-crop
参数中似乎不允许使用
[fx:…]

我在某处发现了一些我一生都无法理解的(!)黑客攻击也失败了,但我将在这里列出它以显示研究成果

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:…]
的事情起作用,我可以通过使用三元运算符来实现这一点,因此我保持了示例的简单性。)

也许您可以计算纵横比并使用它来做出决定。创建两个测试图像,一个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