Comment insérer un espace blanc avec imagemagick?

15

De quels paramètres "convertir" (?) A-t-il besoin pour obtenir cette SORTIE à partir de cette ENTRÉE?

CONTRIBUTION:

entrez la description de l'image ici

PRODUCTION:

entrez la description de l'image ici

gasko peter
la source

Réponses:

8

Comme je ne voulais pas que les images soient alignées avec le côté droit, j'ai dû utiliser une approche différente ( compositeoutil ImageMagick ):

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

-sizedevrait être la taille finale de l'image que vous souhaitez, canvas.pngest une toile blanche vierge, in.pngserait l'image que vous souhaitez remplir et -geometryest le décalage de positionnement.

mustafa.0x
la source
15

Ma version d'ImageMagick est '6.7.8-0 2012-07-04 Q16'. Selon le docu, la réponse de la commande @kev devrait fonctionner:

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

Cependant, comme avec la plupart des questions ImageMagick, vous pouvez atteindre le même objectif avec des moyens différents. Vous pouvez utiliser montagecomme ceci:

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

Ceci utilise l'image spéciale 'null:' pour la concaténer avec le in.png.


Il est vrai qu'avec convertvous devez recalculer les valeurs que vous devez passer -extentpour chaque image d'entrée qui a une taille différente.

Première utilisation identify -formatpour obtenir les dimensions de l'image:

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

Cela devrait renvoyer quelque chose comme:

 449x352

Ok, vous devez maintenant ajouter les 71 pixels souhaités pour obtenir la 520x352valeur finale . Mais vous n'avez pas besoin de faire ce calcul dans votre propre cerveau:

ImageMagick à la rescousse !, et ses capacités de calcul magique ... :-)

Vous pouvez dire à la identify -formatcommande de faire ce calcul pour vous:

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

Cela devrait maintenant vous donner un résultat de:

 520x352

Donc, en supposant que vous vouliez simplement ajouter / ajouter une `` bande blanche '' de 71 pixels de largeur à gauche de n'importe quelle image, vous pouvez utiliser la ligne de commande unique suivante:

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

Voila! Une ligne de commande (qui encapsule 2 commandes, pour être honnête) et vous pouvez laisser celle-ci lâche sur tous vos PNG, JPEG, GIF, ... dans un répertoire pour ajouter automatiquement votre bande blanche de 71 pixels à chacun d'eux:

 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

Pour chaque image, sa sortie reste le même type de fichier. Bien sûr, vous pouvez appliquer toutes les sorties au format PNG (ou tout ce que vous voulez). Remplacez simplement la %t.%epartie de la commande par %t.png...

Kurt Pfeifle
la source
8

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

convert in.png -gravity east -extent 500x352 out.png
kev
la source
Merci!! Mais que faire si ma photo n'est pas 500x352 - parce que la taille varie?
gasko peter
1
Je vous montre juste comment.
kev
@kev: Votre commande ne fait pas exactement ce que @gasko peter voulait. Vous auriez dû utiliser -extend 520x352. +1 pour la 'bonne direction' cependant :-P
Kurt Pfeifle
# -extend # -extent # g de
sed
J'ai dû ajouter -background transparentpour conserver un fond transparent.
tremby
0

J'ai cette commande définie dans mon .bash_profile. Il calculera automatiquement la taille finale de l'image à partir du remplissage souhaité en largeur et en hauteur (fonctionne avec des zéros):

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

Exemple d'utilisation:

# pad 50px left and right, no vertical padding
img_pad in.png 50x0 out.png 
Jonathan H
la source