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!
Cela fonctionne pour moi:
convert -flatten img1.png img1-white.png
-flatten
option de ligne de commande-layers
option de ligne de commande (-flatten
est équivalent à -layers flatten
)-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.
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
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 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
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
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é.
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
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
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.
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.
Pour supprimer réellement le canal alpha du fichier, utilisez l’option alpha off :
convert in.png -background white -alpha off out.png
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 {} \;
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
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