通过指定新的纵横比来拟合图像
Posted
技术标签:
【中文标题】通过指定新的纵横比来拟合图像【英文标题】:Fitting images by specifying the new aspect ratio 【发布时间】:2014-03-10 04:56:58 【问题描述】:ImageMagick 的convert
能否在仅指定纵横比后附加白条或黑条以保持纵横比?
更具体的
假设我有一个 2000x1000 的广角图像,我想计算一个宽高比为 4:3 的新图像以适应电视,例如电视。我可以的
convert input.png -background black -extent 2000x1500 -gravity center output.jpg
但在这里我手动选择了 2000x1500 来生成额外的 250x2 像素的 blakc。可以问convert
:
-
将纵横比更改为 4:3
不丢失任何像素;不插入任何像素
居中图像
?
如果也可以选择背景颜色作为图像中的主要颜色(如在 iTunes 11 中),请提及如何。
【问题讨论】:
【参考方案1】: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="$Wx$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
注意事项:
bc 用于浮点运算,因为 bash 本身只有整数运算。 注意-gravity center
位于-extent
之前的最后一个命令行上。这是因为重力是一个设置,而范围是一个运算符。设置应始终先于它们影响的运算符,否则当您的命令开始变得更复杂时,convert 会做出意想不到的事情。
当您对程序的结果感到满意时,您可以复制并执行它的输出,或者只删除最终 convert
之前的 echo
。
对于您关于查找图像主色的问题,有不同的方法可以做到这一点,但一种常见的方法是将图像大小调整为 1x1 并输出结果像素的颜色 - 这将是平均颜色全图:
convert input.png -resize 1x1 -format '%[pixel:p[0,0]]' info:
您可以在调整大小之前对图像进行其他处理以获得不同的启发式。
【讨论】:
以上是关于通过指定新的纵横比来拟合图像的主要内容,如果未能解决你的问题,请参考以下文章