Camada de imagem PNG invisível que é visível apenas como plano de fundo

48

Recentemente, deparei com uma imagem muito peculiar, com propriedades estranhas. A imagem está no formato PNG e mostra apenas um pássaro simples com um fundo transparente. Meu amigo me enviou a imagem com instruções simples apenas para salvá-la e defini-la como plano de fundo.

Imagem original com apenas a gaivota

Depois de definir a imagem como plano de fundo, uma segunda imagem parece mostrar que, de fato, a gaivota está em uma arma:

Imagem de fundo com uma camada secreta?

A princípio, fiquei muito curioso com a natureza da imagem e como fazê-la. Abri a imagem no Photoshop e nada fora do comum aparece - a imagem ainda é a mesma da gaivota transparente, não há camadas ou máscaras ocultas para torná-la invisível. Depois de verificar a imagem no Photoshop, pensei que o Windows fizesse alterações no arquivo ao defini-lo como plano de fundo da área de trabalho - depois de navegar para %AppData%\Microsoft\Windows\Themesa imagem parecia o mesmo.

Por que essa imagem mostra uma camada oculta separada ou uma imagem completamente separada quando definida como plano de fundo da área de trabalho do Windows em comparação com a exibição ou edição no Photoshop?

Callum
fonte
6
Abra-o com o XnView, clique em "Remover canal alfa" e você verá a imagem completa. O Windows 7 convertidos fundos para JPEG, perdendo a transparência answers.microsoft.com/en-us/windows/forum/windows_7-desktop/...
leonbloy

Respostas:

59

Acho que é o que foi chamado de "Dirty Transparency" neste artigo da Smashing Magazine .

Essencialmente, qualquer cor em PNGs transparentes pode ser descrita por um valor RGBA, em que RGB representa os canais Vermelho, Verde e Azul e A significa Alpha. As cores "invisíveis" podem ter valores RGB + 0 Alfa, o que significa que a cor reterá as informações originais, mas ficará transparente porque o alfa está definido como 0.

Por que você deseja armazenar os valores RGB quando o Alpha está sendo usado? Assim, você pode obter bordas suaves e cores transparentes - ao contrário das bordas irregulares nos GIFs de fundo transparente. A transparência no PNG pode ir de 0 a 255, nos GIFs é 100% transparente ou opaco. Para renderizar algo com, digamos, 50% de transparência, você ainda precisará conhecer os valores RGB, portanto, o valor é armazenado. A maioria dos softwares de edição de imagem descarta essas informações RGB ao salvar uma cor totalmente transparente, incluindo o Photoshop.

Não posso falar das versões CC, mas para ver as cores "invisíveis" nas versões mais antigas do Photoshop, você precisará de um plugin. Escolha um: Photofreebies ou SuperPNG . O SuperPNG parece mais recente e menos confuso.

Por que o truque funciona? Os papéis de parede devem ser opacos porque não há nada "por trás" deles para mostrar, certo? Meu palpite é que o Windows descarta as informações do canal Alpha, revelando os valores RGB ocultos no processo.

Rhaenys
fonte
6
Eu apenas tentei o que você disse removendo a máscara da camada de transparência (canal alfa), que nunca havia me ocorrido - ao fazer isso, consegui replicar o efeito. Esta é uma maneira muito legal de fazer fundos eu acho que será explorar as suas capacidades de pesca ao corrico muito em breve: D
Callum
15
Eu diria que isso é um bug no Windows. Se o valor alfa de um pixel é 0, o pixel é transparente e os valores RGB não devem importar. O Windows deve renderizar uma imagem que contenha transparência sobre outra coisa, por exemplo, um fundo branco.
Paul
5
@Paulo. Concordado, exceto que seria a cor de plano de fundo definida para a área de trabalho, a mesma cor usada se a imagem não for esticada ou lado a lado e for muito pequena para preencher a área de trabalho. A metáfora é que o papel de parede está sobre uma superfície ou parede de uma cor sólida.
trlkly
3
Eu ficaria muito surpreso se o Adobe Photoshop precisasse de um plug-in para conseguir isso - eu esperaria que ele oferecesse controles semelhantes ao GIMP, por exemplo, ajuste dos valores alfa por ferramentas de curvas ou níveis (essas são apenas duas das muitas maneiras para tornar as partes transparentes visíveis).
Michael Schumacher
2
@ MichaelSchumacher Você ficaria surpreso com a falta de Photoshop em certas áreas. Para ser justo, não faço ideia se a versão atual do CC já o suporta. Decidi ficar com meu PS perpetuamente licenciado, então minha versão está quase obsoleta agora.
Rhaenys
13

Para adicionar à resposta de Nihal , isso pode ser reproduzido usando o pincel "anti-apagamento" no GIMP. O pincel Apagar pode adicionar ou remover um canal alfa se a imagem estiver usando um formato que o suporte (mantenha pressionada a tecla Alt para alternar entre apagar e apagar).

Para Krita, você pode fazer isso: Layer > Split Alpha > Alpha into Mask. Depois disso, você pode ocultar ou excluir o canal da Máscara de transparência 1 que acabou de ser criado e você verá a imagem completa.

Como o plano de fundo do Windows não pode ter nada por trás, provavelmente está apenas removendo a transparência e exibindo a imagem sem ela (imagem rápida e suja de 32 bits a 24 bits pela aparência).

Blerg
fonte
3

Um ponto de esclarecimento: Este não é um erro, é um comportamento especificado na especificação png. Especificamente, a especificação afirma que, se um visualizador ou conversor não puder entender a transparência ou a transparência não for apropriada para um contexto ou usar o canal alfa, poderá ser ignorado. Além disso, a especificação solicita que todos os geradores de imagem definam as cores transparentes para que a imagem seja útil se o canal alfa for ignorado. (minha paráfrase, já faz alguns anos desde que li as especificações.)

hildred
fonte
11
Você poderia, por favor, tentar encontrar as passagens relevantes da especificação? Porque não consigo encontrar isso em w3.org/TR/PNG . Obrigado!
MarnixKlooster ReinstateMonica