Imagemagick 通过指定新的纵横比来拟合图像
ImageMagick的Imagemagick 通过指定新的纵横比来拟合图像,imagemagick,imagemagick-convert,Imagemagick,Imagemagick Convert,ImageMagick的转换是否可以在指定仅纵横比后附加白色或黑色条以保持纵横比 更具体地说 假设我有一个2000x1000宽的图像,我想计算一个宽高比为4:3的新图像,比如一台电视机。我能行 convert input.png -background black -extent 2000x1500 -gravity center output.jpg 但在这里,我手动选择了2000x1500来生成额外的250x2像素的blakc。我可以要求将转换为: 将纵横比更改为4:3 不丢失任何像素;不
转换是否可以在指定仅纵横比后附加白色或黑色条以保持纵横比
更具体地说
假设我有一个2000x1000宽的图像,我想计算一个宽高比为4:3的新图像,比如一台电视机。我能行
convert input.png -background black -extent 2000x1500 -gravity center output.jpg
但在这里,我手动选择了2000x1500来生成额外的250x2像素的blakc。我可以要求将转换为:
将纵横比更改为4:3
不丢失任何像素;不插值任何像素
将图像居中
?
如果也可以选择背景色作为图像的主色调(如iTunes 11),请务必说明。Convert没有内置功能将图像填充到给定的纵横比,因此您需要编写脚本。下面是如何在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
注:
- bc用于浮点运算,因为bash本身只有整数运算
- 请注意,
-gravity center
位于-extent
之前的最后一个命令行上。这是因为重力是一个设置,而范围是一个操作符。设置应始终位于它们影响的运算符之前,否则当命令开始变得更复杂时,convert将执行意外操作
- 当您对程序的结果感到满意时,您可以复制并执行其输出,也可以在最终的
转换之前删除回音
对于查找图像主色的问题,有不同的方法,但一种常用的方法是将图像大小调整为1x1并输出结果像素的颜色-它将是整个图像的平均颜色:
convert input.png -resize 1x1 -format '%[pixel:p[0,0]]' info:
在调整大小之前,可以对图像进行其他处理,以获得不同的启发
convert input.png -resize 1x1 -format '%[pixel:p[0,0]]' info: