Supposons que vous ayez une image (PNG ou JPG). Cette image a un fond blanc et j'ai besoin de rendre ce fond transparent.
J'ai essayé avec ces exemples:
convert original.png -background none transparent.png
convert original.png -background white -flatten -alpha off transparent.png
mais sans résultats souhaitables.
Comment puis-je le faire?
IMPORTANT: utilisation convert
de la ligne de commande.
convert original.png -transparent white new.png
mais en l'essayant, je ne peux pas la faire fonctionner. En passant, êtes-vous sûr que votre arrière-plan est en fait blanc (#FFFFFF), ou est-il juste presque blanc (par exemple #FEFEFE)?Réponses:
J'utilise ImageMagick 6.6.9-7 sur Ubuntu 12.04.
Ce qui a fonctionné pour moi était le suivant:
Cela a changé tout le blanc du test.png en transparent.
la source
J'ai eu le même problème. Dans lequel je dois supprimer le fond blanc du format d'image jpg / png en utilisant ImageMagick.
Ce qui a fonctionné pour moi était:
1) Convertissez le format d'image en png:
convert input.jpg input.png
2)
convert input.png -fuzz 2% -transparent white output.png
la source
mogrify -format png -median 2 -fuzz 5% -transparent white ico_*.jpg
Solution
Explication
C'est plutôt un peu plus long que les réponses simples données précédemment, mais cela donne de bien meilleurs résultats: (1) La qualité est supérieure en raison de l'alpha antialiasé, et (2) seul l'arrière-plan est supprimé par opposition à une seule couleur. ("Arrière-plan" est défini comme approximativement de la même couleur que le pixel supérieur gauche, en utilisant un remplissage à partir des bords de l'image.)
De plus, le canal alpha est également érodé d'un demi-pixel pour éviter les halos. Bien sûr, les opérations morphologiques d'ImageMagick ne fonctionnent pas (encore?) Au niveau des sous-pixels, vous pouvez donc voir que je fais exploser le canal alpha à 200% avant de s'éroder.
Comparaison des résultats
Voici une comparaison de l'approche simple ("-fuzz 2% -transparent white") par rapport à ma solution, lorsqu'elle est exécutée sur le logo ImageMagick . J'ai aplati les deux images transparentes sur un fond marron pour rendre les différences apparentes (cliquez pour les originaux).
Remarquez comment la barbe du sorcier a disparu dans l'approche simple. Comparez les bords de l'assistant pour voir comment l'alpha anti-crénelé aide la figure à se fondre en douceur dans l'arrière-plan.
Bien sûr, j'admets complètement qu'il y a des moments où vous voudrez peut-être utiliser la solution la plus simple. (Par exemple: c'est beaucoup plus facile à retenir et si vous convertissez en GIF, vous êtes de toute façon limité à l'alpha 1 bit.)
script shell mktrans
Comme il est peu probable que vous souhaitiez taper cette commande à plusieurs reprises, je vous recommande de l'encapsuler dans un script. Vous pouvez télécharger un script shell BASH à partir de github qui exécute ma solution suggérée. Il peut être exécuté sur plusieurs fichiers dans un répertoire et comprend des commentaires utiles au cas où vous souhaiteriez modifier les choses.
script bg_removal
À propos, ImageMagick est en fait livré avec un script appelé "bg_removal" qui utilise floodfill de la même manière que ma solution. Cependant, les résultats ne sont pas excellents car il utilise toujours l'alpha 1 bit. De plus, le script bg_removal s'exécute plus lentement et est un peu plus délicat à utiliser (il vous oblige à spécifier deux valeurs de fuzz différentes). Voici un exemple de la sortie de bg_removal.
la source
gimp
ou quoi que ce soit. :)Cela fonctionne pour moi:
où plus le% de fuzz est petit, plus le blanc est proche ou inversement, plus le% est grand, plus la variation du blanc est autorisée à devenir transparente
la source
mktrans
script shell: github.com/hackerb9/mktransVous pouvez l'utiliser pour rendre l'arrière-plan transparent
Ce qui précède donne le fond transparent du préfet
la source
()
:convert more-icon.png -gravity center -background 'rgba(0,0,0,0)' -extent 27x27 new-more-icon.png
En utilisant ImageMagick, c'est très similaire au code et au résultat de hackerb9, mais c'est une ligne de commande un peu plus simple. Il suppose que le pixel supérieur gauche est la couleur d'arrière-plan. Je remplis juste l'arrière-plan de transparence, puis je sélectionne le canal alpha et je le floue et je supprime la moitié de la zone floue en utilisant -level 50x100%. Ensuite, rallumez tous les canaux et aplatissez-le contre la couleur brune. Le -blur 0x1 -level 50x100% agit pour anticréneler les limites de la transparence du canal alpha. Vous pouvez régler la valeur de fuzz, la quantité de flou et la valeur de -niveau 50% pour modifier le degré d'anticrénelage.
la source
Si vous souhaitez contrôler le niveau de transparence, vous pouvez utiliser rgba. où a est l'alpha. 0 pour transparent et 1 pour opaque. Assurez-vous que le fichier de sortie final doit avoir l'extension .png pour la transparence.
la source
Oui. Eu ce même problème aussi. Voici la commande que j'ai exécutée et cela a parfaitement fonctionné:
convert transparent-img1.png transparent-img2.png transparent-img3.png -channel Alpha favicon.ico
la source