web-dev-qa-db-fra.com

Remplacer la transparence dans les images PNG par un fond blanc

J'ai des images PNG avec transparence et je dois créer des versions avec le calque d'image composé sur un fond blanc. J'ai essayé diverses choses avec les opérations de "conversion" d'Image Magick, mais rien ne se produit ou une erreur se produit. Je ne souhaite pas utiliser de formulaire JPG intermédiaire, car je ne souhaite pas les artefacts. Bien sûr, il est facile de faire cela dans Gimp, Photoshop ou autre, mais je préférerais vraiment le script depuis la ligne de commande car il existe beaucoup de ces choses.

Voici un exemple de commande Image Magick qui ne fonctionne pas:

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

Cela entraîne une erreur.

Merci!

239
Pointy

Cela fonctionne pour moi:

convert -flatten img1.png img1-white.png

Références de la documentation:

204
remosu
-background white -alpha off

Exemple:

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

N'hésitez pas à remplacer white par toute autre couleur de votre choix. La documentation de Imagemagick dit ceci à propos de l'opération -alpha off:

Cette opération est simple et rapide, et fait le travail sans avoir besoin de toute utilisation de mémoire supplémentaire ou tout autre effet indésirable éventuellement associé avec d'autres techniques d'élimination de la transparence. C'est donc le moyen préféré pour supprimer la transparence de l'image.

293
Rok Kralj

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 n'importe quel fond sur une image transparente et l'aplatir, appliquez d'abord le fond avant de l'aplatir L'inverse ne fonctionne pas. 

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

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
21
db0

L'utilisation de -flatten m'a rendu complètement fou, parce que -flatten en combinaison avec la culture mogrify et le redimensionnement ne fonctionnent tout simplement pas. Le seul moyen correct, officiel et pour moi, est de "supprimer" le canal alpha.

-alpha remove -alpha off (inutile avec JPG)

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

10
Tjarko Rikkerink

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

mogrify -background white -flatten */*.png

9
Julian

La section Alpha Remove du Guide d'utilisation 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 déclare:

Cette opération est simple et rapide. Elle ne nécessite aucune utilisation de mémoire supplémentaire ni d’autres effets secondaires pouvant être associés à d’autres techniques de suppression de la transparence. C’est donc la méthode privilégiée pour supprimer la transparence de l’image.

Il ajoute en plus la note:

Notez que, bien que la transparence soit «supprimée», le canal alpha restera activé, mais sera désormais totalement 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 transparence d’images .

Inclus dans cette section est la mention d'une mise en garde importante à l'utilisation 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.

Ainsi, si vous convertissez plusieurs images à la fois, par exemple, Si vous générez des vignettes à partir d'un fichier PDF, -flatten ne fera pas ce que vous voulez (il aplatira toutes les images de toutes les pages en une seule image). D'autre part, l'utilisation de la technique -alpha remove produira toujours plusieurs images, chacune ayant son transparent supprimé.

6
Gary

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. J'ai donc décidé d'ajouter cette réponse ici:

Si vous souhaitez supprimer le canal alpha à l'aide de imagemagick, vous pouvez utiliser cette commande:

mogrify -alpha off ./*.png
5
FreeNickname

Il semble que votre commande soit correcte, le problème peut donc être dû au manque de prise en charge de PNG (). Vous pouvez vérifier avec convert -list configure ou simplement essayer ceci:

Sudo yum install libpng libpng-devel
5
Alastair

Welp, il semble que ma décision d'installer "graphics magick" sur "image magick" présente quelques aspérités - lorsque je réinstalle une véritable vieille "image magick" cruelle, la commande ci-dessus fonctionne parfaitement.

edit , longtemps après - Un de ces jours, je vérifierai si "graphics magick" a résolu ce problème. 

3
Pointy

J'avais besoin soit: -alpha background et -flatten, soit -fill.

J'ai créé un nouveau fichier PNG avec un fond transparent et un point rouge au milieu. 

convert image.png -background green -alpha off green.png a échoué: il a généré une image avec un fond noir.

convert image.png -background green -alpha background -flatten green.png a produit une image avec le fond vert correct.

Bien sûr, avec un autre fichier que j'ai renommé image.png, rien n'a été fait. Pour ce fichier, j'ai trouvé que la couleur des pixels transparents était "# d5d5d5" et j'ai donc rempli cette couleur de vert:

convert image.png -fill green -opaque "#d5d5d5" green.png a remplacé les pixels transparents par le vert correct.

2
McNulty

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

convert in.png -background white -alpha off out.png
0
Nick Dowell

J'ai vu cette question et les réponses qui m'ont vraiment aidé, mais il m'a ensuite fallu le faire pour de nombreux fichiers. Donc, si vous avez plusieurs images (images PNG) dans un dossier et que vous voulez le faire pour tous:

find ./ -name "*.png" -exec convert {} -flatten {} \;
0
talsibony

C'est -alpha, PAS -alpha supprimer! Le téléchargement du iOS app store échoue lorsqu'il existe un canal alpha dans une icône!

Voici comment faire: Mogrify -alpha off * .png

0
railsfanatic

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

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

à l'origine trouvé le conseil sur ce post

0
Aquarius Power