¿Cómo insertar espacios en blanco con imagemagick?


15

¿Qué parámetros necesita "convertir" (?) Para obtener esta SALIDA de esta ENTRADA?

ENTRADA:

ingrese la descripción de la imagen aquí

SALIDA:

ingrese la descripción de la imagen aquí

Respuestas:


8

Como no quería que las imágenes se alinearan con el lado derecho, tuve que usar un enfoque diferente ( compositeherramienta de ImageMagick ):

convert -size 500x500 xc:white canvas.png
convert canvas.png in.png -geometry +200+200 -composite out.png

-sizedebe ser el tamaño de imagen final que desee, canvas.pnges un lienzo blanco en blanco, in.pngsería la imagen que desea rellenar y -geometryes el desplazamiento de posicionamiento.


15

Mi versión de ImageMagick es '6.7.8-0 2012-07-04 Q16'. De acuerdo con el documento, la respuesta del comando @kev debería funcionar:

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

Sin embargo, como con la mayoría de las preguntas de ImageMagick, puede lograr el mismo objetivo con diferentes medios. Podrías usar montageasí:

 montage null: in.png -tile 2x1 -geometry +17+0 out1.png

Esto usa la imagen especial 'null:' para concatenarla con el in.png.


Es cierto que convertnecesita volver a calcular los valores a los que debe pasar -extentpara cada imagen de entrada que tenga un tamaño diferente.

Primer uso identify -formatpara obtener las dimensiones de la imagen:

 identify -format '%Wx%H' in.png

Esto debería devolver algo como:

 449x352

Ok, ahora necesitarías agregar tus 71 píxeles deseados, para obtener el 520x352valor final . Pero no necesita hacer ese cálculo en sus propios cerebros:

ImageMagick al rescate !, y sus capacidades de cálculo mágico ... :-)

Puede indicarle al identify -formatcomando que haga ese cálculo por usted:

 identify -format '%[fx:W+71]x%H'

Esto debería darte un resultado de:

 520x352

Asumiendo que solo desea rellenar / agregar una 'franja blanca' de 71 píxeles de ancho a la izquierda de cualquier imagen, puede usar la siguiente línea de comando:

 convert \
    in.png \
   -gravity east \
   -background white \
   -extent $(identify -format '%[fx:W+71]x%H' in.png) \
    out2.png

Voila! Una línea de comando (que encapsula 2 comandos, para ser honesto) y puede dejar que este se suelte en todos sus PNG, JPEG, GIF, ... en un directorio para agregar automáticamente su tira blanca de 71 píxeles a cada uno de ellos:

 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

Para cada imagen, su salida sigue siendo el mismo tipo de archivo. Por supuesto, puede exigir que todos los resultados sean PNG (o lo que desee). Simplemente reemplace la %t.%eparte del comando con %t.png...


8

Documentación: http://www.imagemagick.org/Usage/crop/#extent

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

¡¡Gracias!! Pero, ¿qué pasa si mi imagen no es 500x352, porque el tamaño varía?
Gasko Peter

1
Solo te muestro cómo hacerlo.
kev

@kev: Tu comando no hace exactamente lo que @gasko peter quería. Deberías haberlo usado -extend 520x352. +1 para la 'dirección correcta' aunque
:-P

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

Tuve que agregar -background transparentpara preservar un fondo transparente.
temblor

0

Tengo este comando definido en mi .bash_profile. Calculará automáticamente el tamaño de la imagen final a partir del relleno que desee en ancho y alto (funciona con ceros):

# 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"
}

Ejemplo de uso:

# pad 50px left and right, no vertical padding
img_pad in.png 50x0 out.png 
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.