De quels paramètres "convertir" (?) A-t-il besoin pour obtenir cette SORTIE à partir de cette ENTRÉE?
CONTRIBUTION:
PRODUCTION:
De quels paramètres "convertir" (?) A-t-il besoin pour obtenir cette SORTIE à partir de cette ENTRÉE?
CONTRIBUTION:
PRODUCTION:
Réponses:
Comme je ne voulais pas que les images soient alignées avec le côté droit, j'ai dû utiliser une approche différente ( composite
outil ImageMagick ):
convert -size 500x500 xc:white canvas.png
convert canvas.png in.png -geometry +200+200 -composite out.png
-size
devrait être la taille finale de l'image que vous souhaitez, canvas.png
est une toile blanche vierge, in.png
serait l'image que vous souhaitez remplir et -geometry
est le décalage de positionnement.
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 montage
comme 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 convert
vous devez recalculer les valeurs que vous devez passer -extent
pour chaque image d'entrée qui a une taille différente.
Première utilisation identify -format
pour 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 520x352
valeur 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 -format
commande 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.%e
partie de la commande par %t.png
...
Documentation: http://www.imagemagick.org/Usage/crop/#extent
convert in.png -gravity east -extent 500x352 out.png
-extend 520x352
. +1 pour la 'bonne direction' cependant :-P
-background transparent
pour conserver un fond transparent.
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