Convertir png 32 bits à 8 bits png avec ImageMagick en préservant semi transparent pixels
Je veux convertir png 32 bits à 8 bits png avec ImageMagick, mais semi transparents les pixels sont perdus. Comment résoudre ce problème? La commande que j'utilise est la suivante
convert original.png PNG8:output.png
Connexes: stackoverflow.com/questions/1468221/...
Cette question n'est pas un doublon. Cette affiche est de se plaindre de la perte de pixels semi-transparents, après la conversion de 24 bits à 8 bits. Il a déjà l' (correcte) de la syntaxe pour la conversion de 24 bits à 8 bits, il se demande pourquoi il se comporte de cette façon (et il y a une bonne réponse pour que).
Cette question n'est pas un doublon. Cette affiche est de se plaindre de la perte de pixels semi-transparents, après la conversion de 24 bits à 8 bits. Il a déjà l' (correcte) de la syntaxe pour la conversion de 24 bits à 8 bits, il se demande pourquoi il se comporte de cette façon (et il y a une bonne réponse pour que).
OriginalL'auteur Karmar | 2012-12-25
Vous devez vous connecter pour publier un commentaire.
Apparemment, même si le format PNG permet en fait de toutes les couleurs en 8 bits couleurs indexées PNG entièrement ou partiellement transparent, ImageMagick "PNG8" spécificateur de format prend uniquement en charge les GIF-style 1-bit de transparence.
Il est possible de produire indexée de 8 bits Png en utilisant ImageMagick par pas à l'aide de la
PNG8:
prescripteur, mais simplement à l'aide de-colors 256
ou-colors 255
* réduire le nombre de couleurs dans l'image. Malheureusement, au moins d'après mes tests en utilisant ImageMagick 6.8.9, les images qui en ont assez bizarre et tout à fait inutilement laid couleur de quantification des artefacts.Heureusement, il y a un bien meilleur outil pour ce travail spécifique: pngquant. En l'utilisant, la conversion d'un 32 bits RGBA PNG dans un 8-bit colormapped PNG avec un minimum de perte de qualité est aussi simple que:
Comme une démonstration rapide, voici un test simple image (une étoile avec un semi-ombre portée) converti au format PNG 8 bits à l'aide de différentes méthodes:
De gauche à droite:
pngquant 256 < input.png > output.png
convert input.png -colors 255 output.png
*convert input.png PNG8:output.png
convert input.png -colors 255 PNG8:output.png
**) Dans les commentaires ci-dessous, il est suggéré que
-colors 255
est nécessaire de "réserve d'une inscription en arrière-plan la couleur." Basé sur mes tests, je n'ai pas observé ce fait être le cas; à l'aide de-colors 256
sera toujours produire un 8-bit colormapped PNG, avec les défauts de quantification qualitativement similaires, mais diffèrent dans le détail de la sortie avec-colors 255
. Néanmoins, juste pour jouer la sécurité, j'ai utilisé-colors 255
pour les exemples ci-dessus. La réduction de la palette de couleurs la taille par une couleur ne devrait pas, en soi, affecter de manière significative la qualité des résultats, comme un test avecpngquant 255
sera de sortie.png">démontrer.Eh bien, ça valait la peine d'essayer. 🙁 (Ps. Vous n'essayez , droit? Quelqu'un dans le fil que j'ai relié à suggéré que c'est précisément la
PNG8:
préfixe qui est en train de briser la transparence alpha.)Oui, j'ai essayé les deux. Deuxième fait complètement transparents les pixels noirs. J'ai commencé à utiliser pngquant outil de ligne de commande au lieu de ImageMagick. Il préserver la couche alpha correctement.
Essayez
-colors 255
au lieu de-colors 256
. ImageMagick besoin de réserver un bulletin de participation pour le "fond" de la couleur.Il n'est pas nécessaire de réserver une couleur d'arrière-plan, mais ImageMagick réserve un par défaut. Vous pouvez éviter que avec "-définir le format png:exclure-chunk=bKGD". La quantification ressemble probablement mieux avec "couleurs 255" et pas spécification PNG8: (PNG8 utilise un quick-and-dirty la méthode de quantification que simplement remet à zéro les bits de poids faible). Mais, en fait, je préfère utiliser pngquant plutôt que d'ImageMagick pour la palette génération.
OriginalL'auteur Ilmari Karonen