50 votes

Couche d'image PNG invisible qui n'est visible qu'en tant qu'arrière-plan

J'ai récemment découvert une image très particulière, aux propriétés étranges. L'image est au format PNG et représente un simple oiseau sur fond transparent. Mon ami m'a envoyé l'image avec des instructions simples 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 fond d'écran, une deuxième image apparaît pour montrer que la mouette se tient en fait sur une arme :

Background image with a secret layer?

Cela m'a d'abord rendu très curieux de la nature de l'image et de la manière de la réaliser. J'ai ouvert l'image dans Photoshop et rien ne sort de l'ordinaire - l'image est toujours la même que la mouette transparente, il n'y a pas de calques cachés ou de masques pour la rendre invisible. Après avoir vérifié l'image dans Photoshop, j'ai pensé que Windows avait modifié le fichier en le définissant comme fond d'écran. %AppData%\Microsoft\Windows\Themes l'image semble être la même.

Pourquoi cette image présente-t-elle un calque caché distinct ou une image complètement distincte lorsqu'elle est définie comme fond d'écran de Windows, alors qu'elle est visualisée ou modifiée dans Photoshop ?

59voto

Rhaenys Points 674

Je suppose qu'il s'agit de ce que l'on appelait la "transparence sale" dans cette affaire. article de Smashing Magazine .

Essentiellement, toute couleur dans les PNG transparents peut être décrite par une valeur RGBA, où RVB représente les canaux rouge, vert et bleu et A représente l'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 sera rendue transparente parce que son alpha est fixé à 0.

Pourquoi voudriez-vous stocker les valeurs RVB lorsque l'alpha est utilisé ? Pour obtenir des bords lisses et des couleurs transparentes, contrairement aux bords irréguliers des GIF à arrière-plan transparent. La transparence au format PNG peut aller de 0 à 255, tandis qu'au format GIF, elle est soit transparente à 100 %, soit opaque. Pour obtenir un rendu avec une transparence de 50 %, par exemple, vous devez connaître les valeurs RVB, d'où le stockage de la valeur. 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 des versions CC, mais pour voir les couleurs "invisibles" dans les anciennes versions de Photoshop, vous aurez besoin d'un plugin. Choisissez-en un : Photofreebies o SuperPNG . SuperPNG semble plus récent et moins encombré.

Pourquoi cette astuce fonctionne-t-elle ? Les fonds d'écran doivent être opaques parce qu'il n'y a rien "derrière" qui transparaît, n'est-ce pas ? Je pense que Windows rejette les informations du canal Alpha, révélant ainsi les valeurs RVB cachées.

13voto

Blerg Points 1162

A ajouter à Réponse de Nihal Il est possible de reproduire ce phénomène en utilisant la brosse "anti-effacement" dans le GIMP. La brosse d'effacement peut ajouter ou supprimer un canal alpha si l'image utilise un format qui le supporte (maintenez la touche Alt enfoncée pour passer de l'effacement à l'anti-effacement).

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

Puisque l'arrière-plan Windows ne peut pas avoir d'arrière-plan, il s'agit probablement de supprimer la transparence et d'afficher l'image sans elle (image rapide et sale de 32 bits à 24 bits d'après ce qu'il semble).

3voto

student Points 41

Une précision s'impose : Il ne s'agit pas d'un bogue, mais d'un comportement spécifié dans la spécification png. La spécification précise que si un visualisateur ou un convertisseur ne peut pas comprendre la transparence ou si la transparence n'est pas appropriée à un contexte ou à une utilisation, le canal alpha peut être ignoré. En outre, la spécification demande à tous les générateurs d'images de définir les couleurs transparentes de manière à ce que l'image soit utile si le canal alpha est ignoré. (je paraphrase, cela fait quelques années que je n'ai pas lu la spécification).

0voto

Cubbi Points 25339

J'ai rencontré ce problème en essayant d'exporter une vidéo avec un canal alpha dans Adobe After Effects. L'exportation d'un arrière-plan caché vers n'importe quel format vidéo avec transparence, y compris ProRes 4444 alpha, codec d'animation avec alpha et séquences .png, insistait. L'arrière-plan caché n'était pas visible dans la prévisualisation de la ligne de temps, mais je n'ai trouvé aucun moyen dans After Effects de l'empêcher d'apparaître dans la vidéo exportée.

SuperPNG (plugin de format de fichier pour Photoshop), comme déjà suggéré, est un moyen facile de supprimer l'arrière-plan caché d'un seul fichier .png. Cependant, pour un grand nombre de fichiers PNG (une séquence PNG), ce n'est pas possible.

Pour voir l'arrière-plan caché dans Photoshop, cliquez sur Calque / Masque de calque / De la transparence. Examinez maintenant le volet des calques. L'arrière-plan caché s'y trouve et vous pouvez le rendre visible dans la zone d'édition en supprimant le masque.

Vous pouvez utiliser ImageMagick pour supprimer l'arrière-plan caché. Vous pouvez le faire pour un fichier ou pour plusieurs fichiers dans un lot. Sur la ligne de commande de Windows, vous pouvez le faire pour traiter *.png (très lent mais qui fonctionne au moins) :

for %f in (*.png) do C:\ImageMagick\convert.exe -alpha on -background none -flatten "%f" "fixed_%f.png"

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X