Imagemagick 7.0.7.22 及以上版本
-crop 3:2
自2018年1月6日起可用,详情请参阅 更改日志。
JPG
magick convert in.jpg -gravity center -crop 3:2 out.jpg
![修改后的图片](https://istack.dev59.com/LW8PU.webp)
警告/提醒:如果您没有使用-gravity center
,则会生成两个输出文件:
![右部分](https://istack.dev59.com/Q0Tfp.webp)
PNG
正如fmw42所指出的那样,PNG文件存储虚拟画布的大小。建议使用+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 及以下版本
注意:对于v7版本,您需要在任何convert
之前添加magick
。
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
ah=9
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更有用。要得到所需的横纵比,请将解决方案1中的两个1920x1080
或解决方案2中的aw
/ah
变量替换为相应值。
照片来源:Anders Krusberg / Peabody Awards