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

48

Recentemente encontrei uma imagem muito peculiar, com propriedades estranhas. A imagem é um formato PNG e apenas mostra 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 meu plano de fundo.

Depoisdedefiniraimagemcomofundo,umasegundaimagemapareceparamostrarque,defato,agaivotaestáemumaarma:

Issoprimeiromedeixoumuitocuriosoparaanaturezadaimagemecomofazeressaimagem.EuabriaimagemnoPhotoshopenadaforadocomumaparece-aimagemaindaéomesmoqueagaivotatransparente,nãohácamadasescondidasoumáscarasparatorná-loinvisível.DepoisdeverificaraimagemnoPhotoshop,penseiqueoWindowsfizessealteraçõesnoarquivoaodefini-locomoplanodefundodaáreadetrabalho-depoisdenavegarpara%AppData%\Microsoft\Windows\Themes,aimagempareciaseramesma.

PorqueessaimagemmostraumacamadaocultaseparadaouumaimagemcompletamenteseparadaquandodefinidacomoplanodefundodaáreadetrabalhodoWindowsemcomparaçãocomaexibiçãoouediçãonoPhotoshop?

Link direto para a imagem.

    
por Callum Carmicheal 29.06.2017 / 22:53

3 respostas

59

Eu estou supondo que é o que foi chamado de "Transparência Suja" neste artigo da Smashing Magazine .

Essencialmente, qualquer cor em PNGs transparentes pode ser descrita por um valor RGBA, onde RGB significa 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á a informação original, mas será renderizada como transparente porque seu 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, em GIFs é 100% transparente ou opaco. Para renderizar algo em, 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 essa informação RGB ao salvar uma cor totalmente transparente, incluindo o Photoshop.

Eu não posso falar por versões CC, mas para ver as cores "invisíveis" em versões 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 "atrás" deles para mostrar, certo? Meu palpite é que o Windows descarta as informações do canal Alpha, revelando os valores RGB ocultos no processo.

    
por 29.06.2017 / 23:18
13

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

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

Como o fundo do Windows não pode ter nada por trás, é provável que ele apenas tire a transparência e exiba a imagem sem ela (imagem de 32 bits rápida e suja para 24 bits).

    
por 30.06.2017 / 05:38
3

Um ponto de esclarecimento: Isso não é um bug, é 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, isso não é apropriado para um contexto ou o canal alfa pode ser ignorado. Além disso, a especificação exige 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, faz alguns anos desde que li a especificação.)

    
por 01.07.2017 / 17:50