¿Por qué esta imagen PNG se muestra de manera diferente en Chrome y Firefox que en Safari e IE?


675

Mira esta imagen:

Manzana o pera

En Chrome y Firefox se mostrará como una pera. Ahora, intente guardarlo y verlo guardado en su escritorio. Además, intente ver en Safari o Internet Explorer . ¡Se mostrará como una manzana!

Intenta hacer clic en la imagen y moverla. Notarás que aparece la manzana.

¿Por qué pasó esto?


55
Si trato de arrastrar la imagen en Firefox solo un poco, la imagen arrastrada de forma transparente formará la manzana aPear
ajax333221

1
¿Cómo creaste esta imagen? ¿Me puede indicar un sitio web?
tumchaaditya

10
Para futuros lectores, esto parece solucionarse en las versiones actuales de IE.
Kat

2
Pero aún puede descargarlo en su escritorio y ver la manzana allí, y verlo en Firefox, Chrome como pera.
Jet

Respuestas:


534

Ocurre porque algunos navegadores realizan la corrección gamma como se especifica en el archivo de imagen.

Aquí está la imagen sin corregir. Los píxeles "blanco-ish" en la imagen de la manzana contienen la imagen de una pera, almacenada a una intensidad mucho mayor, es decir, muy brillante.

Aquí está la imagen con corrección gamma. Los píxeles "negros" de la imagen de pera contienen la imagen de una manzana, almacenada a una intensidad bastante normal, pero reducida a casi negro con la corrección gamma.

En mi pantalla, puedo ver débilmente la pera entre los píxeles blancos en la primera imagen, pero en la segunda imagen, la manzana es indistinguible de los píxeles negros a su alrededor.

(También puede ver algunas bandas de color en la pera con corrección de gamma, porque la imagen sin corregir está usando un rango mucho más pequeño de los canales de color).

El archivo de imagen PNG contiene un fragmento de gAMA que especifica un valor de gamma de archivo de 0.02. Cuando se muestra sin corrección de gamma, el espectador ve una manzana con píxeles "blancos" intercalados, que en realidad son la pera en su intensidad original (alta).

Cuando se muestra con corrección de gamma, el espectador ve una pera con corrección de color con píxeles "negros" que en realidad son la manzana renderizada a un valor de gamma mucho más bajo.

Los navegadores que muestran la pera están realizando la corrección de gamma en la imagen, mientras que los navegadores que muestran la manzana no están realizando la corrección de gamma, sino que solo la muestran con sus valores de color literales.


14
Una lectura recomendada sobre el tema: el famoso artículo de Eric Brasseur llamado "error de gamma en el escalado de imagen .
ulidtko

1
@ulidtko Eso es ahora un 404. Aquí hay una copia en su Archivo Web .
Cole Johnson

229

Esto fue demasiado para un comentario, pero espero que ayude.

Por lo tanto, estoy bastante seguro de que este problema trata de la forma en que los navegadores interpretan la información gamma con PNG. Es un problema bastante divertido y, en primer lugar, trata las ambigüedades de la información gamma.

El artículo The Sad Story of PNG Gamma "Correction" proporciona un resumen muy agradable de los problemas, remedios y otros datos curiosos.

Dicho esto, en realidad podemos quitar la información gamma de una imagen usando pngcrush

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

Entonces, con la información gamma y sin ella:

Pera una manzana

Realmente no diría que esta es "la respuesta", pero en todo caso, probablemente esté en la dirección correcta. Estoy seguro de que alguien con mucho conocimiento sobre los perfiles de color, etc., tendrá una respuesta más formal.


3
esas dos imágenes se ven iguales para mí, parpadeando entre manzana y pera al igual que el original en la pregunta. Estoy usando Safari 6.0.2
Fraser Graham

1
Tenga en cuenta que los dos últimos elementos del comando proporcionado aquí son infiley outfile: por ejemplo pngcrush -rem gAMA -rem cHRM -rem iCCP -rem sRGB infile.png outfile.png. Más información: hsivonen.fi/png-gamma
fredrivett

40

Cambiar la gamma ( γ ) de una imagen consiste en modificar el valor gamma en:

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

que proporciona el color de píxel de salida (R ', G', B ') que se muestra en la pantalla después de aplicar la función gamma a los valores de píxel iniciales (R, G, B) (considerando R, G y B normalizados entre 0 y 1 )

Ahora, tomemos el canal rojo, por ejemplo.
Si R = R0 + R1 , obtendrá
R '= (R0 + R1) γ = R0 γ * (1 + R1 / R0) γ

Si R0 es mucho más grande que R1, entonces tienes
(1 + R1 / R0) γ ≈ 1 + γ R1 / R0 ,
entonces R '≈ R0 γ + γ
R1 * R0 γ-1

Esto significa que para gamma cercano a 0, R0 γ domina. Para γ = 1, obtienes
R '≈ R0 + R1

Para una gamma grande, domina el segundo término, de modo que puede configurar directamente R0 = componente rojo de la pera y R1 = componente rojo de la manzana, con R0 mucho más grande que R1 y obtendrá las variaciones deseadas al cambiar la gamma de su monitor (o la curva de gamma particular que usa cada software).


9

No se trata de redondear píxeles y los perfiles de color ICC no son el problema.

Es una imagen engañosa, y algunos navegadores muestran PNG sin datos gamma. Para esos navegadores, ves una cosa, y para otros navegadores ves la imagen completa (con la pera oculta en el fondo).

Veo una imagen de truco de manzana / pera, o simplemente veo la pera, dependiendo de si el navegador admite estos datos gamma.


1

a medida que sucede, puede ver más detalles en imágenes con una pantalla calibrada adecuada y si la gama / brillo / contraste es demasiado alta, puede ver que una imagen de la imagen está oculta más