Почему это изображение PNG отличается по-разному в Chrome & Firefox, чем в Safari и IE?

Отметьте это изображение:

Apple or Pear

В Chrome и Firefox он будет отображаться как груша. Теперь попробуйте сохранить его и посмотреть на него, сохраненное на рабочем столе. Кроме того, попробуйте просмотреть Safari или internetā Проводник . Он будет отображаться как яблоко!

Попробуйте щелкнуть изображение и переместить его. Вы заметите, что появляется яблоко.

Почему это происходит?

663 голоса | спросил ethree 7 AMpSun, 07 Apr 2013 07:32:40 +040032Sunday 2013, 07:32:40

5 ответов


524

Это происходит потому, что некоторые браузеры выполняют гамма-коррекцию, указанную в файле изображения.

Вот нескорректированное изображение. «Бело-белые» пиксели в изображении яблока содержат изображение груши, хранящееся при гораздо большей интенсивности, то есть очень яркое.

Вот изображение с исправлением гамма-искажений. «Черно-ишевые» пиксели на грушевом изображении содержат изображение яблока, которое хранится при довольно нормальной интенсивности, но уменьшено до почти черного с гамма-коррекцией.

На моем экране я вижу грушу слабо среди белых пикселей на первом изображении, но на втором изображении яблоко неотличимо от черных пикселей вокруг него.

(Вы также можете увидеть некоторую цветопередачу на гамма-исправленной груше, потому что нескорректированное изображение использует гораздо меньший диапазон цветовых каналов.)

Файл изображения PNG содержит блок gAMA, определяющий значение гаммы файла 0,02. При отображении без гамма-коррекции зритель видит яблоко с «белыми» пикселями вкрапленными, которые на самом деле являются грушей при ее первоначальной (высокой) интенсивности.

При отображении с гамма-коррекцией зритель видит окрашенную цветом грушу с «черными» пикселями, которые на самом деле представляют собой яблоко с гораздо более низким значением гаммы.

Браузеры, отображающие грушу, выполняют гамма-коррекцию на изображении, в то время как браузеры, отображающие яблоко, не выполняют гамма-коррекцию, а просто показывают ее с буквальными значениями цвета.

ответил mwfearnley 7 AMpSun, 07 Apr 2013 09:23:23 +040023Sunday 2013, 09:23:23
226

Это было слишком много для комментария, но, надеюсь, это помогает.

Итак, я уверен, что эта проблема связана с тем, как браузеры интерпретируют гамма-информацию с помощью PNG. Это довольно забавная проблема и в первую очередь касается двусмысленности гамма-информации.

Статья Печальная история PNG Gamma «Коррекция» дает очень хорошее резюме проблем, средств защиты , и другие интересные факты.

С учетом сказанного мы можем фактически удалить гамма-информацию из изображения с помощью pngcrush

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

Итак, с гамма-информацией и без нее:

pear яблоко

Я бы не сказал, что это «ответ», но если что-то, вероятно, находится в правильном направлении. Я уверен, что кто-то с большим количеством знаний о цветовых профилях и т. Д. Придет с более формальным ответом.

ответил Justin Van Horne 7 AMpSun, 07 Apr 2013 08:34:37 +040034Sunday 2013, 08:34:37
40

Изменение гаммы ( γ ) изображения заключается в изменении значения гамма в:

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

, который дает выходной цвет пикселя (R ', G', B '), отображаемый на экране после применения гамма-функции к начальным значениям пикселей (R, G, B) (с учетом R, G и B, нормированных между 0 и 1).

Теперь давайте возьмем красный канал, например.
Если R = R0 + R1 , вы получите R '= (R0 + R1) γ = R0 ³³ * (1 + R 1 /R 0)

Если R0 намного больше, чем R1, то у вас есть (1 + R1 /R0) γ â ‰ 1 + ³³ R1 /R0 ,
поэтому R 'â R0 ³³ + ³³R1 * R0 ³³-1

Это означает, что для гамма, близкого к 0, доминирует R0 γ . Для γ = 1 вы получите R 'â ‰ R0 + R1

Fo большая гамма, второй член доминирует, так что вы можете напрямую установить R0 = красный компонент груши и R1 = красный компонент яблока, причем R0 намного больше, чем R1, и вы получите желаемые изменения при изменении гамма вашего монитора (или конкретная гамма-кривая, используемая каждым программным обеспечением).

ответил WhitAngl 7 AMpSun, 07 Apr 2013 09:38:41 +040038Sunday 2013, 09:38:41
9

Это не округление пикселей, а цветовые профили ICC не являются проблемой.

Это трюк, и некоторые браузеры отображают PNG без гамма-данных. Для этих браузеров вы видите одно, а для других браузеров вы видите полное изображение (с грушей, скрытой в фоновом режиме).

Я вижу изображение трюка яблоко /груша, или я просто вижу грушу, в зависимости от того, поддерживает ли браузер эти гамма-данные.

ответил Jodo 7 AMpSun, 07 Apr 2013 09:41:01 +040041Sunday 2013, 09:41:01
1

, так как это происходит, вы можете увидеть более подробную информацию на фотографиях с соответствующим откалиброванным дисплеем и если гамма /яркость /контрастность являются высокими, вы можете видеть, что одно изображение на снимке скрыто больше

ответил nwgat 11 MaramTue, 11 Mar 2014 05:49:30 +04002014-03-11T05:49:30+04:0005 2014, 05:49:30

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132