web-dev-qa-db-fra.com

Couche d'image PNG invisible visible uniquement en tant qu'arrière-plan

Je suis récemment tombé sur une image très particulière, avec des propriétés étranges. L'image est au format PNG et ne montre qu'un oiseau simple avec un fond transparent. Mon ami m'a envoyé l'image avec des instructions simples juste pour l'enregistrer et la définir comme fond d'écran.

 Original image with just the seagull

Après avoir défini l'image comme arrière-plan, une deuxième image apparaît pour montrer qu'en fait la mouette se tenant sur une arme:

 Background image with a secret layer?

Au début, cela m'a rendu très curieux de la nature de l'image et de la réalisation d'une telle image. J'ai ouvert l'image dans Photoshop et rien ne sort de l'ordinaire - l'image est toujours la même que celle de la mouette transparente, il n'y a pas de calques ni de masques masqués pour la rendre invisible. Après avoir vérifié l’image dans Photoshop, j’avais pensé que Windows avait modifié le fichier lors de la définition de l’arrière-plan de mon bureau. Après le passage à %AppData%\Microsoft\Windows\Themes, l’image semblait identique.

Pourquoi cette image montre-t-elle un calque masqué distinct ou une image complètement distincte lorsqu'elle est définie comme fond d'écran du bureau Windows par rapport à l'affichage ou la modification dans Photoshop?

48
Callum Carmicheal

Je suppose que c’est ce qui s’appelait "Dirty Transparency" dans ce article de Smashing Magazine .

Toute couleur des PNG transparents peut être décrite par une valeur RGBA, où RVB représente les canaux rouge, vert et bleu et A, Alpha. Les couleurs "invisibles" peuvent avoir n'importe quelle valeur RVB + 0 Alpha, ce qui signifie que la couleur conservera les informations d'origine, mais restituera aussi transparente car son alpha est défini sur 0.

Pourquoi voudriez-vous stocker les valeurs RVB quand Alpha est utilisé? Vous pouvez ainsi obtenir des bords lisses et des couleurs transparentes, contrairement aux bords irréguliers des fichiers GIF à fond transparent. La transparence en PNG peut aller de 0 à 255, dans les GIF, elle est 100% transparente ou opaque. Pour obtenir un rendu avec une transparence de 50%, par exemple, vous devez toujours connaître les valeurs RVB. Par conséquent, la valeur est stockée. La plupart des logiciels d'édition d'images ignorent ces informations RVB lors de l'enregistrement d'une couleur entièrement transparente, y compris Photoshop.

Je ne peux pas parler pour les versions CC, mais pour voir les couleurs "invisibles" des anciennes versions de Photoshop, vous aurez besoin d'un plugin. Choisissez-en un: Photofreebies ou SuperPNG . SuperPNG semble plus récent et moins encombré.

Pourquoi l'astuce fonctionne? Les papiers peints doivent être opaques car il n'y a rien "derrière" à montrer, non? J'imagine que Windows supprime les informations du canal Alpha, révélant ainsi les valeurs RVB cachées.

59
Rhaenys

Pour ajouter à la réponse de Nihal , ceci peut être reproduit en utilisant le pinceau "anti-effacement" dans GIMP. Le pinceau Effacer peut ajouter ou supprimer un canal alpha si l'image utilise un format qui le prend en charge (maintenez la touche Alt enfoncée pour permuter entre l'effacement et l'anti-effacement).

Pour Krita, vous pouvez faire ceci: Layer > Split Alpha > Alpha into Mask. Cela fait, vous pouvez masquer ou supprimer le canal du masque de transparence 1 qui vient d'être créé et vous verrez l'image complète.

Etant donné que l'arrière-plan Windows ne peut rien avoir derrière, il est probablement difficile de supprimer la transparence et d'afficher l'image sans l'image (image 32 bits rapide et sale en 24 bits).

13
Blerg

Un point de clarification: Ce n'est pas un bogue, c'est un comportement spécifié dans la spécification png. Plus précisément, la spécification indique que si un visualiseur ou un convertisseur ne peut pas comprendre la transparence, la transparence ne convient pas à un contexte ou l'utilisation du canal alpha peut être ignorée. De plus, la spécification appelle tous les générateurs d'image à définir les couleurs transparentes de sorte que l'image soit utile si le canal alpha est ignoré. (ma paraphrase, cela fait quelques années que j'ai lu les spécifications.)

3
hildred