如何使用ImageMagick按固定宽高比居中最小裁剪任意尺寸图像?
如何让ImageMagick强制按指定宽高比居中最小裁剪(不受原图横竖影响)
默认使用-crop 宽:高参数时,ImageMagick会自动对比原图比例与指定比例,若原图为竖版(高度大于宽度),会自动改用逆比例裁剪(比如指定16:9时实际按9:16裁剪)。要实现不管原图横竖,都严格按指定比例从中心最小裁剪,可以通过ImageMagick的fx表达式动态计算裁剪尺寸,强制锁定目标比例。
核心命令(以16:9比例为例)
# 新版本ImageMagick(7+)用magick magick input-image.jpg -gravity center -crop "%[fx:h*16/9>w?w:h*16/9]x%[fx:w*9/16>h?h:w*9/16]+0+0" output-image.jpg # 旧版本ImageMagick(6及以下)用convert convert input-image.jpg -gravity center -crop "%[fx:h*16/9>w?w:h*16/9]x%[fx:w*9/16>h?h:w*9/16]+0+0" output-image.jpg
命令解释
-gravity center:指定从图像中心开始裁剪%[fx:...]:通过ImageMagick的内置表达式动态计算裁剪尺寸:- 计算裁剪宽度:
h*16/9>w?w:h*16/9- 先按16:9比例计算对应原图高度的理想宽度(
h*16/9),如果这个值大于原图实际宽度,说明原图宽度不足,直接保留原图宽度;否则用计算出的理想宽度作为裁剪后的宽度。
- 先按16:9比例计算对应原图高度的理想宽度(
- 计算裁剪高度:
w*9/16>h?h:w*9/16- 先按16:9比例计算对应原图宽度的理想高度(
w*9/16),如果这个值大于原图实际高度,说明原图高度不足,直接保留原图高度;否则用计算出的理想高度作为裁剪后的高度。
- 先按16:9比例计算对应原图宽度的理想高度(
- 计算裁剪宽度:
+0+0:裁剪位置无偏移,确保中心对齐
适配其他比例的方法
如果需要裁剪为其他比例(比如4:3),只需替换命令中的比例数值:
# 4:3比例裁剪示例 magick input-image.jpg -gravity center -crop "%[fx:h*4/3>w?w:h*4/3]x%[fx:w*3/4>h?h:w*3/4]+0+0" output-image.jpg
内容的提问来源于stack exchange,提问作者user782860
相关产品推荐
相关产品推荐

