给定一个图像,如何使用 imagemagick 将其调整为特定的纵横比?例如,调整为2:1
答案1
需要考虑两件事:
- 可轻松调整大小,有或没有宽高比转换
- 按照纵横比转换进行裁剪
我依次讨论一下:
1. 可简单调整大小,有或无宽高比转换
imagemagick
默认情况下,将在转换过程中保持图像的预先存在的纵横比。使用此测试图像:
它的尺寸恰好为 100x100,尝试使用此语法调整为 300x150 将会默默地失败:
convert test.png -resize 300x150 300_test.png
并将产生150x150图像:
为了强制imagemagick
实际生成 2:1 宽高比的图像,需要使用以下略有不同的语法:
convert test.png -resize 300x150\! distort.png
这样就实现了 2:1 的宽高比,当然原始图像会失真:
2. 按照长宽比转换进行裁剪
如果您希望简单而自动地将图像裁剪为指定的纵横比,最简单的方法是使用以下方法之一Fred 的 ImageMagick 脚本:“Aspectcrop”在我们的测试图像上的用法很简单:
./aspectcrop -a 2:1 test.png Fred_wins.png
并且生成的图像已成功裁剪为 2:1 的比例:
另一个需要操作的选项是-g gravity
定义图像的哪一部分用于裁剪。默认是中心,所有选项为:
- 中心(c)
- 北 (n)
- 南
- 東 (e)
- 西 (w)
- 西北
- 东北
- 西南, (sw)
- 东南 (se)
举个例子北:
./aspectcrop -a 2:1 -g n test.png north.png
结果是:
如果您需要使用此脚本批量加载单个目录中的图像,则可以使用 bash“for”循环。首先正确放置脚本并将其设置为可执行文件:
sudo mv aspectcrop /usr/local/bin
sudo chmod +x /usr/local/bin/aspectcrop
这使得使用脚本变得容易得多。然后从图像目录中运行“for”循环:
for i in *.png
do
aspectcrop -a 2:1 -g n "$i" "${i%.png}_cropped.png"
done
此循环可以根据输入和输出文件的类型、不同的位置等而变化。您还可以生成类似的语法,以递归方式搜索图像。可能性很多...
我认为这一切都非常酷:)
参考:
答案2
这是用于检查文件夹中所有 jpg 的 4:3 比例的脚本。
#!/bin/sh
EXTENSION="*.jpg"
for file in $EXTENSION
do
currAspect=$(identify -format "%[fx:w/h]" "$file")
roundFloat=$(printf '%.*f\n' 3 "$currAspect")
if [ $roundFloat != 1.333 ]
then
echo "name: $file aspect: $currAspect rounded: $roundFl$
fi
done