使用 Image Magick 强制纵横比

使用 Image Magick 强制纵横比

我在 Image Magick 中寻找一个命令来强制将图像转换为特定的宽高比。结果应该是原始图像,其中图层扩展到正确的宽高比,原始图像位于中间,任何新的周围空间都是白色。我该怎么做?

例如,宽源 Image1 生成以下结果:

图片1 图像 1 为 4x3 比例

高大的源 Image2 生成了这样的结果:

在此处输入图片描述 在此处输入图片描述

在每种情况下,最终处理后的图像的宽高比均为 4:3。否则,它们的尺寸可能为任意。我手动执行了以下过程:如果宽度大于 4:3,则将高度设置为宽度/4×3;否则,如果高度大于 4:3,则将宽度设置为高度/3×4。

或者,如果更容易的话,所有输出图像都可以是固定大小:例如 640 x 480。

(所需命令稍后将批量用于处理一系列具有不同初始尺寸的文件。)

答案1

a.png

在此处输入图片描述

a.jpg

在此处输入图片描述

 find ./ -type f \( -iname \*.jpg -o -iname \*.png \) | \
  while read img; do
   fbname=$(basename "$img")
   magick "$img" -set option:wd "%[fx:(4/3)>(w/h)?(4/3*h):w]" -set option:ht "%[fx:(4/3)>(w/h)?h:(w/(4/3))]" -gravity center -background black -extent "%[wd]x%[ht]" result-"$fbname"
  done

result-a.png

在此处输入图片描述

result-a.jpg

在此处输入图片描述

识别a.png

a.png PNG 1000x400 1000x400+0+0 8-bit sRGB 264165B 0.000u 0:00.000

识别a.jpg

a.jpg JPEG 771x1036 771x1036+0+0 8-bit sRGB 186084B 0.000u 0:00.000

识别结果-a.jpg

result-a.jpg JPEG 1381x1036 1381x1036+0+0 8-bit Gray 256c 200001B 0.000u 0:00.000

识别结果-a.png

result-a.png PNG 1000x750 1000x750+0+0 8-bit sRGB 277529B 0.000u 0:00.000

相关内容