在指定只宽高比后,ImageMagick的convert
可以附加白色或黑色条以保持宽高比吗?
更具体地
假设我有一个2000x1000的宽镜图像,我想计算一个宽高比为4:3的新图像,比如电视。我能做到
convert input.png -background black -extent 2000x1500 -gravity center output.jpg
但是在这里我手动选择2000x1500来产生额外的250x2像素的blakc。我可以问convert
:
如果还可以选择背景颜色作为图像中的主色(如在iTunes 11中),请提及如何使用。
答案 0 :(得分:1)
转换没有内置功能来将图像填充到给定的宽高比,因此您需要编写脚本。以下是在bash中如何做到这一点:
#!/bin/bash -e
im="$1"
targetaspect="$2"
read W H <<< $(identify -ping -format "%w %h" "$im")
curaspect=$(bc <<< "scale=10; $W / $H")
echo "current-aspect: $curaspect; target-aspect: $targetaspect"
comparison=$(bc <<< "$curaspect > $targetaspect")
if [[ "$comparison" = "1" ]]; then
targeth=$(bc <<< "scale=10; $W / $targetaspect")
targetextent="${W}x${targeth%.*}"
else
targetw=$(bc <<< "scale=10; $H * $targetaspect")
targetextent="${targetw%.*}x$H"
fi
echo convert "$im" -background black \
-gravity center -extent "$targetextent" \
output.jpg
使用输入图像调用此脚本,并将目标宽高比指定为浮点数(例如,4/3 = 1.333):
$ do-aspect input.png 1.333
注意:
-gravity center
位于-extent
之前的最后一个命令行。这是因为gravity是设置,而extent是运算符。设置应始终位于它们影响的运算符之前,否则转换将在命令开始变得更复杂时执行意外操作。echo
之前删除convert
。关于找到图像的主色的问题,有不同的方法可以做到这一点,但一种常见的方法是将图像大小调整为1x1并输出合成像素的颜色 - 它将是平均颜色整个形象:
convert input.png -resize 1x1 -format '%[pixel:p[0,0]]' info:
您可以在调整大小之前对图像进行其他处理,以获得不同的启发式方法。