Question

J'ai des images PNG avec transparence, et je dois créer des versions avec la couche d'image composée sur un fond blanc. J'ai essayé différentes choses avec Image Magick « convertir » les opérations, mais soit rien ne se passe ou je reçois une erreur. Je ne veux pas aller à une forme de JPG intermédiaire parce que je ne veux pas les artefacts. Bien sûr, il est facile de le faire dans Photoshop ou Gimp ou autre chose, mais je scénario vraiment plutôt à partir de la ligne de commande, car il y a beaucoup de ces choses.

Un exemple d'une commande Magick d'image non-travail est:

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

Cela se traduit par une erreur.

Merci!

Était-ce utile?

La solution

Cela fonctionne pour moi:

convert -flatten img1.png img1-white.png

références de documentation:

Autres conseils

-background white -alpha remove -alpha off

Exemple:

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

Ne hésitez pas à remplacer white avec une autre couleur que vous voulez. documentation ImageMagick dit ceci au sujet de l'opération -alpha remove :

  

Cette opération est simple et rapide, et fait le travail sans avoir besoin   toute utilisation de mémoire supplémentaire, ou d'autres effets secondaires qui peuvent être associés   avec des techniques alternatives de suppression de la transparence. Il est donc la   manière préférée d'enlever la transparence de l'image.

Aplatissement l'image et l'application de l'image de fond est en ligne droite vers l'avant dans ImageMagick

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

Pour appliquer un arrière-plan sur une image transparente et l'aplatir, d'abord appliquer le fond de l'aplatir. 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

Utilisation -flatten m'a fait complètement fou parce que -flatten en combinaison avec la culture mogrify et le redimensionnement ne fonctionne tout simplement pas. Le fonctionnaire et pour moi seule façon correcte consiste à « supprimer » le canal alpha.

-Alpha -alpha enlever off (non nécessaire JPG)

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

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

mogrify -background white -flatten */*.png

Le Alpha Retirer section ImageMagick Guide d'utilisation suggère d'utiliser l'option -alpha remove, par exemple:

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

... en utilisant la couleur de -background de votre choix.

Le guide indique:

  

Cette opération est simple et rapide, et fait le travail sans avoir besoin d'utiliser de la mémoire supplémentaire, ou d'autres effets secondaires qui peuvent être associés à des techniques de suppression de transparence alternative. Il est ainsi la voie preferred de supprimer la transparence de l'image.

Il ajoute en outre la note:

  

Notez que si la transparence est « retiré » du canal alpha reste allumé, mais sera désormais entièrement opaque. Si vous ne avez plus besoin du canal alpha, vous pouvez alors utiliser Alpha Off pour le désactiver.

Ainsi, si vous n'avez pas besoin du canal alpha, vous pouvez rendre votre taille de l'image de sortie plus petite en ajoutant l'option -alpha off, par exemple:

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

Il y a plus de détails sur les autres, les techniques souvent utilisées pour éliminer la transparence décrite dans le Suppression de la transparence à partir d'images .

inclus dans cette section est fait mention d'une mise en garde importante à l'utilisation de -flatten comme une technique pour enlever 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 êtes en train de convertir plusieurs images à la fois, par exemple générer des vignettes à partir d'un fichier PDF, -flatten ne fera pas ce que vous voulez (il aplatir toutes les images pour toutes les pages en une seule image). D'autre part, en utilisant la technique de -alpha remove produira encore plusieurs images, chacune ayant la transparence enlevé.

Il semble que votre commande est correcte si le problème peut être dû à un manque de soutien pour PNG (). Vous pouvez vérifier avec convert -list configure ou tout simplement les opérations suivantes:

sudo yum install libpng libpng-devel

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

Si vous voulez 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 « graphiques Magick » sur « Image Magick » a quelques bords rugueux -. Quand je réinstalle authentique crufty ancienne « image Magick », la commande ci-dessus fonctionne parfaitement

modifier , longtemps plus tard - un de ces jours, je vais vérifier pour voir si « graphiques Magick » a résolu ce problème.

Je avais besoin soit: à la fois -alpha background et -flatten ou -fill

.

J'ai fait un nouveau PNG avec un fond transparent et un point rouge au milieu.

convert image.png -background green -alpha off green.png a échoué: elle a produit une image avec un fond noir

convert image.png -background green -alpha background -flatten green.png produit une image à l'arrière-plan vert correct.

Bien sûr, avec un autre fichier que je renomme image.png, il n'a rien fait. Pour ce fichier, je trouve que la couleur des pixels transparents était « # d5d5d5 » donc je remplis cette couleur avec le vert:

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

cela crée une image juste de placer le 1er avec la transparence au-dessus du 2ème

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

à l'origine trouvé la pointe sur ce poste

Pour supprimer effectivement le canal alpha à partir du fichier, utilisez le alpha off l'option :

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

J'ai vu cette question et des réponses qui aident vraiment moi, mais je me devais de le faire pour un grand nombre de 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 {} \;

Il est -alpha off, pas -alpha enlever! le chargement de l'application iOS magasin échoue quand il y a un canal alpha dans une icône !!

Voici comment faire: mogrify -alpha off * .png

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top