web-dev-qa-db-fra.com

ImageMagick étendre la toile avec un fond transparent

convert input.png -extent 100x100 -gravity center -background white output.png

Si l'entrée est 50x50, l'arrière-plan environnant est blanc. Puis-je définir cela sur transparent sans déclarer aucune couleur dans l'entrée comme transparente?

49
Toby

Utilisez-le à la place:

convert               \
      input.png       \
     -background none \
     -gravity center  \
     -extent 100x100  \
      output.png

Remarquez bien: L'ordre des paramètres est significatif! (Pour vous convaincre, mettez simplement -background none à la fin des paramètres au lieu du début ...)


Mise à jour: Merci à @jesmith qui a remarqué que la ligne de commande que j'ai fournie à l'origine ne fonctionne plus comme prévu. Les versions plus récentes de convert nécessitent en outre que -gravity center est appelé avant -extent 100x100. (Ce fut l'une des modifications apportées aux versions les plus récentes d'une ImageMagick [au moment de la rédaction de cette réponse]).

89
Kurt Pfeifle

Ironiquement, la note de Kurt est parfaite, l'ordre compte beaucoup. La commande de Kurt a pour résultat que gravity n'est pas appliqué au extent, donc la 'bordure' transparente sera tout en bas et/ou à droite de l'image.

Déplacer gravity avant extent créera correctement des "bordures" transparentes égales sur tous les côtés applicables.

convert input.jpg -background none -gravity Center -extent 100x50 output.png

8
eprothro