Découvrez la couleur de fond transparente PNG sous Linux

2

Il semble que les fichiers PNG contiennent des informations sur la couleur d’arrière-plan des pixels transparents. Cela devient parfois visible lorsque vous utilisez cette image comme texture avec des paramètres incorrects.

Comment savoir sous Linux (idéalement en ligne de commande) quelle est la couleur des pixels transparents dans un fichier PNG?

qubodup
la source

Réponses:

3

La couleur de fond est transmise via le bloc "bKGD" de PNG.

À partir de la ligne de commande, vous pouvez utiliser "pngcheck -v". Téléchargez et installez pngcheck à partir de

http://www.libpng.org/pub/png/apps/pngcheck.html

puis tapez

pngcheck -v file.png

Si un fichier bKGD est présent dans le fichier PNG, la sortie de pngcheck inclura quelque chose comme ceci:

morceau bKGD à l'offset 0x000a0, longueur 6 rouge = 0x00e0, vert = 0x00e0, bleu = 0x0080

Vous avez probablement déjà ImageMagick (version 6.6.9 ou ultérieure), vous pouvez donc également obtenir des informations sur le bloc bKGD, ainsi que de nombreux autres éléments, en tapant

identify -verbose file.png

et chercher

Couleur de fond: srgba (224,224,128,1)

png: bKGD: un morceau a été trouvé (voir Couleur de fond, ci-dessus)

Si seule "Couleur de fond" apparaît mais pas "png: bKGD: ...", alors identifier indique la couleur de fond par défaut d'ImageMagick et aucun fragment bKGD n'est présent dans le fichier PNG.

Glenn Randers-Pehrson
la source
Merci! identifier est plus lisible, plus largement disponible et pngcheck ne semble pas montrer cette information pour les images en niveaux de gris: codepad.org/2yquVHrc
qubodup
Je ne pense pas que cela ait quelque chose à voir avec l'image en niveaux de gris, juste qu'il lui manque un morceau bKGD (qui est un morceau optionnel!). ImageMagick affichera une couleur d'arrière-plan car ImageMagick assume une couleur d'arrière-plan par défaut s'il n'en existe aucune dans le fichier PNG. Je vais mettre à jour la réponse.
Glenn Randers-Pehrson
0

La spécification PNG ( lien ) décrit le bloc tRNS où les informations de transparence sont stockées.

La bibliothèque de logiciels libpng peut lire et écrire des fichiers PNG, y compris les informations de transparence. Plus précisément, recherchez la fonction suivante:

png_get_tRNS(png_ptr, info_ptr, &trans_alpha, &num_trans, &trans_color)
Steven
la source
Je vous remercie. Malheureusement, je ne peux pas programmer sur ce niveau, c'est pourquoi j'ai choisi superutilisateur et non superposable superuser.com/help/on-topic
qubodup