Por que essa imagem PNG é exibida de maneira diferente no Chrome e Firefox e no Safari e IE?


675

Confira esta imagem:

Maçã ou pêra

No Chrome e Firefox, ele aparecerá como uma pera. Agora, tente salvá-lo e veja-o salvo na sua área de trabalho. Além disso, tente visualizar no Safari ou no Internet Explorer . Ele será exibido como uma maçã!

Tente clicar na imagem e movê-la. Você notará que a maçã aparece.

Por que isso acontece?


5
se eu tentar arrastar a imagem no firefox um pouco, o transparente arrastado imagem fará com que a forma da maçã apear
ajax333221

1
Como você criou esta imagem? Você pode me indicar um site?
tumchaaditya

10
Para futuros leitores, isso parece estar corrigido nas versões atuais do IE.
Kat

2
Mas você ainda pode baixá-lo na área de trabalho e ver a maçã lá, e vê-lo no Firefox, Chrome como pêra.
Jet

Respostas:


534

Isso acontece porque alguns navegadores executam a correção gama conforme especificado no arquivo de imagem.

Aqui está a imagem não corrigida. Os pixels "branco-ish" na imagem da maçã contêm a imagem de uma pera, armazenada em uma intensidade muito maior, ou seja, muito brilhante.

Aqui está a imagem corrigida por gama. Os pixels "preto-ish" na imagem pêra contêm a imagem de uma maçã, armazenada em uma intensidade bastante normal, mas reduzida para quase preto com a correção gama.

Na minha tela, vejo a pêra fracamente entre os pixels brancos na primeira imagem, mas na segunda imagem, a maçã é indistinguível dos pixels pretos ao seu redor.

(Você também pode ver algumas faixas de cores na pera com correção de gama, porque a imagem não corrigida está usando uma faixa muito menor dos canais de cores.)

O arquivo de imagem PNG contém um pedaço de gAMA especificando um valor de gama de arquivo de 0,02. Quando exibido sem correção de gama, o visualizador vê uma maçã com pixels "brancos" intercalados, que na verdade são a pêra em sua intensidade (alta) original.

Quando exibido com correção de gama, o visualizador vê uma pera corrigida por cores com pixels "pretos" que são na verdade a maçã renderizada com um valor gama muito mais baixo.

Os navegadores que exibem a pera estão executando a correção gama na imagem, enquanto os navegadores que exibem a maçã não estão executando a correção gama, mas apenas exibindo seus valores literais de cores.


14
Uma leitura recomendada sobre o tema: o famoso artigo de Eric Brasseur chamado "erro Gamma em escala imagem .
ulidtko

1
@ulidtko Agora é 404. Aqui está uma cópia no Web Archive .
Cole Johnson

229

Isso foi um pouco demais para um comentário, mas espero que ajude.

Portanto, tenho certeza de que esse problema lida com a maneira como os navegadores interpretam as informações gama com PNGs. É um problema bastante divertido e lida com as ambiguidades da informação gama em primeiro lugar.

O artigo A triste história da PNG Gamma "Correção" fornece um resumo muito bom dos problemas, soluções e outros fatos divertidos.

Com isso dito, podemos remover as informações gama de uma imagem usando pngcrush

pngcrush -rem gAMA -rem cHRM -rem iCCP -rem sRGB pear.png apple.png

Portanto, com as informações gama e sem elas:

pera uma maçã

Eu realmente não diria que essa é "a resposta", mas, se for o caso, provavelmente está na direção certa. Tenho certeza de que alguém com muito conhecimento sobre perfis de cores e assim por diante apresentará uma resposta mais formal.


3
essas duas imagens parecem iguais para mim, oscilando entre maçã e pêra, exatamente como o original da pergunta. Estou usando o Safari 6.0.2
Fraser Graham

1
Observe que os dois últimos elementos do comando fornecido aqui são os infilee outfile: por exemplo pngcrush -rem gAMA -rem cHRM -rem iCCP -rem sRGB infile.png outfile.png. Mais informações: hsivonen.fi/png-gamma
fredrivett

40

Alterar o gama ( γ ) de uma imagem consiste em modificar o valor gama em:

(R ', G', B ') = (R γ , G γ , B γ )

que fornece a cor do pixel de saída (R ', G', B ') exibida na tela após aplicar a função gama aos valores iniciais de pixel (R, G, B) (considerando R, G e B normalizados entre 0 e 1 )

Agora, vamos pegar o canal vermelho, por exemplo.
Se R = R0 + R1 , você obterá
R '= (R0 + R1) γ = R0 γ * (1 + R1 / R0) γ

Se R0 é muito maior que R1, você tem
(1 + R1 / R0) γ ≈ 1 + γ R1 / R0 ,
então R '≈ R0 γ + γ
R1 * R0 γ-1

Isso significa que, para gama próxima de 0, R0 γ domina. Para γ = 1, você obtém
R '≈ R0 + R1

Para uma gama grande, o segundo termo domina, para que você possa configurar diretamente R0 = componente vermelho da pêra e R1 = componente vermelho da maçã, com R0 muito maior que R1 e você obterá as variações desejadas ao alterar a gama de seu monitor (ou a curva gama específica que cada software usa).


9

Não são pixels arredondados e os perfis de cores ICC não são o problema.

É uma imagem de truque, e alguns navegadores exibem PNGs sem dados gama. Para esses navegadores, você vê uma coisa e, para outros navegadores, vê a imagem completa (com a pera escondida em segundo plano).

Eu vejo uma imagem de truque de maçã / pêra ou apenas a pêra, dependendo se o navegador suporta esses dados gama.


1

bem como acontece, você pode ver mais detalhes nas fotos com uma exibição calibrada adequada e, se a gama / brilho / contraste estiver muito alto, poderá ver a única imagem na imagem mais oculta

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.