Come inserire uno spazio bianco con imagemagick?


15

Di quali parametri ha bisogno "convert" (?) Per ottenere questo OUTPUT da questo INPUT?

INGRESSO:

inserisci qui la descrizione dell'immagine

PRODUZIONE:

inserisci qui la descrizione dell'immagine

Risposte:


8

Poiché non volevo che le immagini fossero allineate con il lato destro, ho dovuto utilizzare un approccio diverso (lo compositestrumento di ImageMagick ):

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

-sizedovrebbe essere la dimensione finale dell'immagine desiderata, canvas.pngè una tela bianca vuota, in.pngsarebbe l'immagine che si desidera riempire ed -geometryè l'offset di posizionamento.


15

La mia versione di ImageMagick è "6.7.8-0 2012-07-04 Q16". Secondo il documento, la risposta del comando @kev dovrebbe funzionare:

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

Tuttavia, come con la maggior parte delle domande ImageMagick, puoi raggiungere lo stesso obiettivo con mezzi diversi. Puoi usare montagecosì:

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

Questo usa l'immagine speciale 'null:' per concatenarla con il file in.png.


È vero che con convertte è necessario ricalcolare i valori che devi passare -extentper ogni immagine di input che ha dimensioni diverse.

Primo utilizzo identify -formatper ottenere le dimensioni dell'immagine:

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

Questo dovrebbe restituire qualcosa del tipo:

 449x352

Ok, ora dovresti aggiungere i 71 pixel desiderati per ottenere il 520x352valore finale . Ma non hai bisogno di fare quel calcolo nel tuo cervello:

ImageMagick in soccorso! E le sue capacità di calcolo magico ... :-)

Puoi dire al identify -formatcomando di fare quel calcolo per te:

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

Questo dovrebbe ora darti un risultato di:

 520x352

Quindi supponendo che tu voglia solo pad / aggiungere una 'striscia bianca' di 71 pixel di larghezza a sinistra di qualsiasi immagine, puoi usare la seguente riga di comando singola:

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

Ecco! Una riga di comando (che incapsula 2 comandi, a dire il vero) e puoi lasciarlo libero su tutti i tuoi PNG, JPEG, GIF, ... in una directory per aggiungere automaticamente la striscia bianca di 71 pixel a ciascuno di essi:

 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

Per ogni immagine il suo output rimane lo stesso tipo di file. Ovviamente puoi imporre che tutti gli output siano PNG (o qualunque cosa tu voglia). Sostituisci semplicemente la %t.%eparte del comando con %t.png...


8

Documentazione: http://www.imagemagick.org/Usage/crop/#extent

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

Grazie!! E se la mia immagine non fosse 500x352, perché le dimensioni variano?
Gasko Peter

1
Ti faccio solo vedere come.
kev

@kev: il tuo comando non fa esattamente quello che voleva @gasko peter. Avresti dovuto usare -extend 520x352. +1 per la "giusta direzione" :-P
Kurt Pfeifle

# #extend # -ext # g 'di
sed

Ho dovuto aggiungere -background transparentper preservare uno sfondo trasparente.
tremby,

0

Ho questo comando definito nel mio .bash_profile. Calcola automaticamente la dimensione finale dell'immagine dall'imbottitura desiderata in larghezza e altezza (funziona con zeri):

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

Esempio di utilizzo:

# pad 50px left and right, no vertical padding
img_pad in.png 50x0 out.png 
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.