“转换”(?)需要哪些参数才能从这个输入中获取这个输出?
输入:
输出:
答案1
由于我不希望图像与右侧齐平,所以我不得不使用不同的方法(ImageMagick 的composite
工具):
convert -size 500x500 xc:white canvas.png
convert canvas.png in.png -geometry +200+200 -composite out.png
-size
应该是您想要的最终图像大小,canvas.png
是一张空白的白色画布,in.png
是您想要填充的图像,-geometry
是定位偏移量。
答案2
我的 ImageMagick 版本是“6.7.8-0 2012-07-04 Q16”。根据文档,@kev 命令的答案应该有效:
convert in.png -gravity east -extent 520x352 out.png
但是,与大多数 ImageMagick 问题一样,您可以使用不同的方法实现相同的目标。您可以montage
像这样使用:
montage null: in.png -tile 2x1 -geometry +17+0 out1.png
这使用特殊的“null:”图像将其与连接起来in.png
。
确实,您需要为每个具有不同大小的输入图片convert
重新计算需要传递的值。-extent
首先使用identify -format
获取图像的尺寸:
identify -format '%Wx%H' in.png
这应该返回类似这样的内容:
449x352
好的,现在您需要添加所需的 71 个像素,以获得最终520x352
值。但您不需要在自己的大脑中进行这种计算:
ImageMagick 来救援!还有它的神奇计算能力...... :-)
您可以告诉identify -format
命令为您完成该计算:
identify -format '%[fx:W+71]x%H'
现在你应该得到以下结果:
520x352
因此假设您只想在任何图片的左侧填充/添加 71 像素宽的“白色条纹”,您可以使用以下单个命令行:
convert \
in.png \
-gravity east \
-background white \
-extent $(identify -format '%[fx:W+71]x%H' in.png) \
out2.png
瞧!一个命令行(老实说,它封装了 2 个命令),您可以将这个命令放到目录中的所有 PNG、JPEG、GIF 等图片上,以自动将 71 像素的白色条纹添加到每个图片上:
for i in *.png *.jpeg *jpg *.gif; do
convert \
${i} \
-gravity east \
-background white \
-extent $(identify -format '%[fx:W+71]x%H' ${i}) \
$(convert ${i} -format "71-pixels-padded-left---%t.%e" info:)
done
对于每个图像,其输出保持相同的文件类型。当然,您可以强制所有输出为 PNG(或任何您想要的格式)。只需将%t.%e
命令的一部分替换为%t.png
...
答案3
文档:http://www.imagemagick.org/Usage/crop/#extent
convert in.png -gravity east -extent 500x352 out.png
答案4
我已在 中定义了此命令.bash_profile
。它将根据您想要的宽度和高度填充自动计算最终图像大小(使用零):
# arithmetic with awk
calc() { awk "BEGIN { print $* }"; }
# pad an image
img_pad() {
local width height pw ph
[ $# -lt 3 ] && { echo "Usage: img_pad <Input> <WxH> <Output>"; return; }
# parse current size and padding
IFS=x read width height <<< "$(identify "$1" | awk '{print $3}')"
IFS=x read pw ph <<< "$2"
# new widht and height
width=$(calc "$width + 2*$pw")
height=$(calc "$height + 2*$ph")
echo "Converting '$1' to '$3' with size ${width}x${height} (+w=${pw}, +h=${ph})."
convert "$1" -gravity center -extent "${width}x${height}" "$3"
}
使用示例:
# pad 50px left and right, no vertical padding
img_pad in.png 50x0 out.png