如何使用 imagemagick 插入空白?

如何使用 imagemagick 插入空白?

“转换”(?)需要哪些参数才能从这个输入中获取这个输出?

输入:

在此处输入图片描述

输出:

在此处输入图片描述

答案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 

相关内容