如何用imagemagick插入空格?


Answers:


8

由于我不希望图像与右侧齐平,因此我不得不使用另一种方法(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是定位偏移量。


15

我的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...


8

说明文件:http : //www.imagemagick.org/用法/ crop /#extent

convert in.png -gravity east -extent 500x352 out.png

谢谢!!但是,如果我的图片不是500x352,该怎么办?
加斯科·彼得

1
我只是告诉你怎么做。
kev 2012年

@kev:您的命令没有完全执行@gasko peter想要的操作。您应该已经使用过-extend 520x352。+1代表“正确方向” :-P
Kurt Pfeifle,2012年

sed's#-extend#-extent#g'–
Kurt Pfeifle

我必须添加-background transparent以保留透明背景。
tremby

0

我在中定义了此命令.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 
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.