我有未知大小和比例的图像。我希望采取集中的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:...]
事情有效,我可以通过使用三元运算符实现这一点,所以我保持示例简单。)
答案 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