ImageMagick:如何将图像最小化到一定的纵横比?

标签 imagemagick crop aspect-ratio

使用 imagemagick,我想以最小的方式裁剪图像,使其适合给定的纵横比。

示例:假设图像为 3038 x 2014 像素,我想将其裁剪为 3:2 的纵横比。生成的图像将是 3021 x 2014 像素,从原始图像的中心裁剪。

所以寻找一个类似于 convert in.jpg -gravity center -crop_to_aspect_ratio 3:2 out.jpg 的命令.

最佳答案

Imagemagick 7.0.7.22 及以上-crop 3:2工作自 January 6th, 2018 .
JPG

magick convert in.jpg -gravity center -crop 3:2 out.jpg
in.jpg (before) out.jpg (after)
警告/提醒:如果您不使用 -gravity center ,您将获得两个输出文件:
left slice right slice
PNG
正如 fmw42 指出的那样,PNG 文件存储虚拟 Canvas 大小。 +repage被推荐。
magick convert in.png -gravity center -crop 3:2 +repage out+repage.png
GIMP、IrfanView、Chrome 和 Windows Explorer 没有显示出任何区别,但 Imagemagick 知道:
magick identify out*png
out_stndrd.png PNG 252x168 314x168+31+0 8-bit sRGB 78557B 0.000u 0:00.000
out+repage.png PNG 252x168 252x168+0+0 8-bit sRGB 78529B 0.000u 0:00.000
Imagemagick 6.9.9-34以上
JPG
convert in.jpg -gravity center -crop 3:2 out.jpg
PNG
convert in. -gravity center -crop 3:2 +repage out.png
Imagemagick 6.9.9-33/7.0.7.21 及以下
注意:您需要添加magick在任何之前 convert对于 v7。
1. 具体目标分辨率
如果您最终的目标是获得特定分辨率(例如 1920x1080),那么使用 -geometry 很容易。 ,抑扬格/帽子/屋顶/房屋符号( ^ )和 -crop :
convert in.jpg -geometry 1920x1080^ -gravity center -crop 1920x1080+0+0 out.jpg
要循环多个 jpg 文件:
for i in *jpg
  do convert "$i" -geometry 1920x1080^ -gravity center -crop 1920x1080+0+0 out-"$i"
done
2. 仅纵横比裁剪
如果你想避免缩放,你必须在 Imagemagick 之外计算裁剪边的新长度。这涉及更多:
aw=16 #desired aspect ratio width...
ah=9 #and height
in="in.jpg"
out="out.jpg"

wid=`convert "$in" -format "%[w]" info:`
hei=`convert "$in" -format "%[h]" info:`

tarar=`echo $aw/$ah | bc -l`
imgar=`convert "$in" -format "%[fx:w/h]" info:`

if (( $(bc <<< "$tarar > $imgar") ))
then
  nhei=`echo $wid/$tarar | bc`
  convert "$in" -gravity center -crop ${wid}x${nhei}+0+0 "$out"
elif (( $(bc <<< "$tarar < $imgar") ))
then
  nwid=`echo $hei*$tarar | bc`
  convert "$in" -gravity center -crop ${nwid}x${hei}+0+0 "$out"
else
  cp "$in" "$out"
fi
我在示例中使用 16:9,希望它对大多数读者来说比 3:2 更有用。更改 1920x1080 的两次出现在解决方案 1 或 aw 中/ah解决方案 2 中的变量以获得所需的纵横比。
图片来源:Anders Krusberg / Peabody Awards

关于ImageMagick:如何将图像最小化到一定的纵横比?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21262466/

相关文章:

svg - 将 svg 转换为 png imagemagick 路径周围的黑色边框

php - 如何在 PHP 中使用 Imagemagick 仅修剪图像的左侧和右侧?

javascript - 停止裁剪图像外的cropper js

image - 如何在 P5 中裁剪图像?

python - matplotlib 和地理数据图的纵横比

PHP 在没有 ImageMagick 的情况下将 SVG 转换为 PNG

c - 将 ImageMagick lib 的 ImageWand 组件与 CMake 结合使用

android - 在不创建新文件的情况下裁剪图像

graphics - knitr:设置 'out.height' 突然不保持纵横比