Di quali parametri ha bisogno "convert" (?) Per ottenere questo OUTPUT da questo INPUT?
INGRESSO:
PRODUZIONE:
Di quali parametri ha bisogno "convert" (?) Per ottenere questo OUTPUT da questo INPUT?
INGRESSO:
PRODUZIONE:
Risposte:
Poiché non volevo che le immagini fossero allineate con il lato destro, ho dovuto utilizzare un approccio diverso (lo composite
strumento di ImageMagick ):
convert -size 500x500 xc:white canvas.png
convert canvas.png in.png -geometry +200+200 -composite out.png
-size
dovrebbe essere la dimensione finale dell'immagine desiderata, canvas.png
è una tela bianca vuota, in.png
sarebbe l'immagine che si desidera riempire ed -geometry
è l'offset di posizionamento.
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 montage
così:
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 convert
te è necessario ricalcolare i valori che devi passare -extent
per ogni immagine di input che ha dimensioni diverse.
Primo utilizzo identify -format
per 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 520x352
valore 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 -format
comando 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.%e
parte del comando con %t.png
...
Documentazione: http://www.imagemagick.org/Usage/crop/#extent
convert in.png -gravity east -extent 500x352 out.png
-extend 520x352
. +1 per la "giusta direzione" :-P
-background transparent
per preservare uno sfondo trasparente.
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