Remplacer la transparence dans les images PNG avec un fond blanc

J’ai des images PNG avec transparence et j’ai besoin de créer des versions avec le calque d’image composé sur un arrière-plan blanc. J’ai essayé différentes choses avec les opérations “convertir” d’Image Magick, mais rien ne se produit ou je reçois une erreur. Je ne veux pas passer à un formulaire JPG intermédiaire parce que je ne veux pas les artefacts. Bien sûr, il est facile de faire cela dans Gimp, Photoshop ou autre, mais je préfère vraiment le scripter depuis la ligne de commande car il y en a beaucoup.

Un exemple de commande Image Magick qui ne fonctionne pas est:

convert img1.png -background white -flatten img1-white.png 

Cela se traduit par une erreur.

Merci!

Cela fonctionne pour moi:

 convert -flatten img1.png img1-white.png 

Références de la documentation:

  • -flatten de ligne de commande -flatten
  • -layers de ligne de commande -layers ( -flatten est équivalent à -layers flatten )
 -background white -alpha remove 

Exemple:

 convert image.png -background white -alpha remove white.png 

N’hésitez pas à remplacer le white par toute autre couleur que vous souhaitez. La documentation d’Imagemagick dit ceci à propos de l’opération -alpha remove :

Cette opération est simple et rapide, et ne nécessite aucune utilisation supplémentaire de la mémoire ou d’autres effets secondaires pouvant être associés à d’autres techniques de suppression de la transparence. C’est donc la manière préférée de supprimer la transparence de l’image.

L’aplatissement de l’image et l’application de l’image d’arrière-plan sont simples dans ImageMagick

Cependant, l’ordre des commandes est très important

Pour appliquer un arrière-plan sur une image transparente et l’aplatir, appliquez d’abord l’arrière-plan que l’aplatissez. L’inverse ne fonctionne pas.

 $ convert sourceimage.png -background BackgroundColor -flatten destinationimage.png 

Le seul qui a fonctionné pour moi était un mélange de toutes les réponses:

 convert in.png -background white -alpha remove -flatten -alpha off out.png 

L’utilisation de -flatten m’a complètement rendu fou car -flatte en combinaison avec la récolte mogrifiée et le redimensionnement ne fonctionne tout simplement pas. La manière officielle et pour moi seule est de “supprimer” le canal alpha.

-alpha supprimer -alpha off (pas nécessaire avec JPG)

Voir la documentation: http://www.imagemagick.org/Usage/masking/#remove

La section Alpha Remove du Guide d’utilisation d’ImageMagick suggère d’utiliser l’option -alpha remove , par exemple:

 convert in.png -background white -alpha remove out.png 

… en utilisant la couleur -background de votre choix.

Le guide indique:

Cette opération est simple et rapide, et ne nécessite aucune utilisation supplémentaire de la mémoire ou d’autres effets secondaires pouvant être associés à d’autres techniques de suppression de la transparence. C’est donc la manière préférée de supprimer la transparence de l’image.

Il ajoute en outre la note:

Notez que même si la transparence est «supprimée», le canal alpha rest activé, mais sera désormais complètement opaque. Si vous n’avez plus besoin du canal alpha, vous pouvez utiliser Alpha Off pour le désactiver.

Ainsi, si vous n’avez pas besoin du canal alpha, vous pouvez réduire la taille de votre image de sortie en ajoutant l’option -alpha off , par exemple:

 convert in.png -background white -alpha remove -alpha off out.png 

Vous trouverez plus de détails sur les autres techniques souvent utilisées pour supprimer la transparence décrites dans la section Suppression de la transparence des images .

Dans cette section, on mentionne une mise en garde importante à l’usage de -flatten comme technique de suppression de la transparence:

Cependant, cela ne fonctionnera pas avec “mogrify” ou avec une séquence de plusieurs images, essentiellement parce que l’opérateur “-flatten” est vraiment conçu pour fusionner plusieurs images en une seule image.

Donc, si vous convertissez plusieurs images à la fois, par exemple en générant des vignettes à partir d’un fichier PDF, -flatten ne fera pas ce que vous voulez (cela aplatira toutes les images de toutes les pages en une seule image). D’un autre côté, l’utilisation de la technique -alpha remove produira toujours plusieurs images, chacune ayant une transparence supprimée.

voici comment remplacer la même image dans tous les dossiers d’un répertoire avec du blanc au lieu de transparent:

mogrify -background white -flatten */*.png

Il semble que votre commande soit correcte, le problème est peut-être dû au manque de support pour PNG (). Vous pouvez vérifier avec convert -list configure ou simplement essayer ce qui suit:

 sudo yum install libpng libpng-devel 

Ce n’est pas exactement la réponse à votre question, mais j’ai trouvé votre question en essayant de comprendre comment supprimer le canal alpha, alors j’ai décidé d’append cette réponse ici:

Si vous souhaitez supprimer le canal alpha en utilisant imagemagick, vous pouvez utiliser cette commande:

 mogrify -alpha off ./*.png 

Welp il semble que ma décision d’installer “la magie graphique” sur “image magick” a quelques aspérités – quand je réinstalle la véritable “image magick” crue, alors la commande ci-dessus fonctionne parfaitement.

edit , longtemps plus tard – Un de ces jours, je vais vérifier si “graphics magick” a résolu ce problème.

Cela crée une image en plaçant simplement le 1er avec la transparence sur le 2ème

 composite -gravity center ImgWithTransp.png BackgroundSameSizeOfImg.png ResultImg.png 

à l’origine trouvé le conseil sur ce post

Pour supprimer le canal alpha du fichier, utilisez l’option alpha off :

 convert in.png -background white -alpha off out.png