Xpoint
   [напомнить пароль]

Особенности воспроизведения цветов в разных графических форматах при разной глубине цвета

Метки: [без меток]
2005-03-29 18:25:57 [обр] SelenIT(0/67)[досье]

Очень часто бывает, что при стыковке графики разных форматов (особенно Flash) и обычных HTML-заливок цвета не совпадают, хотя в фотошоповском исходнике цвет был один и тот же, и его же значение подставлено для заливки. Насколько я понимаю, это оттого, что привычные шестнадцатеричные триплеты соответствуют 24-битной палитре, а на практике чаще попадаются 32- и 16-битные. И разные форматы по-разному выбирают максимально подходящий (по их алгоритму) цвет из доступной палитры.

Существуют ли какие-либо правила, по которым можно было бы подобрать наиболее близкий к желаемому цвет, который заведомо останется одинаковым по крайней мере в большинстве форматов в 16-, 24- и 32-битных палитрах? И где можно узнать об этом поподробнее?

спустя 46 минут [обр] Lynn «Кофеман»(0/571)[досье]
Я думаю, что тут дело скорее в том, что jpg-сжатие искажает цвета. Простой эксперимент, создайте в фотошопе файл сплошного желтого цвета (#ffff00) и сохраните как jpg. Цвет изменится на #ffff01 — это конечно не заметно, но на более сложных файлах цвет может поменятся значительно.
спустя 25 минут [обр] Алексей В. Иванов(0/2861)[досье]
24/32 бита — это не важно. В 32-битном цвете последние 8 бит не используются AFAIK.
Разница зачастую случается из-за потерь/преобразований. Например, при просмотре на 16-ти битной глубине цвета браузеры не мешают цвета (для получения более похожего оттенка) в отличии от флэша и photoshop, например, поэтому, если подразумевается просмотр в 16-ти битном режиме, то подбирайте цвета "правильные", берите их из 16-ти битной палитры. Я зачастую цвета подгонял просто: переключался в 16-ти битный режим, делал PrintScreen и "брал пипеткой" и подгонял цвета под 16 бит.
спустя 2 часа 1 минуту [обр] SelenIT(0/67)[досье]
Lynn «Кофеман»[досье]
Подозреваю, что так поступает не только jpg. Хорошо бы провести серию подобных экспериментов, но как всегда дефицит времени не позволяет... Может быть, где-то в Сети уже есть исследования на эту тему?
Алексей В. Иванов[досье]
Я несколько раз сталкивался с ситуацией, когда предлагаемый Вами способ давал сбои - цвета, которые давали одинаковое значение при "взятии пипеткой" со скриншота при 16-битной цветности, оказывались существенно разными при переключении обратно в 32-битный режим. Можно ли как-нибудь определить принадлежность цвета к 16-битной палитре "аналитически", нет ли какой-нибудь формулы для этого?
спустя 6 минут [обр] SelenIT(0/67)[досье]
P.S. Вдогонку возник еще один вопрос, косвенно связанный с предыдущим: а все ли 16-битные цвета присутствуют в 32-битной палитре? Иными словами, бывают ли цвета, существующие только в 16-битном режиме?
спустя 33 минуты [обр] Николай Бубело(0/113)[досье]

SelenIT[досье]
> Может быть, где-то в Сети уже есть исследования на эту тему?

В Сети не видел, а сам делал.
Как правило, цвета до 15-16 бит режет видеоадаптер. Очень примитивно: от зеленого минус 2 бита, от остальных — минус 3 (если до 15 бит — от всех минус 3). А программы (то ли броузер, то ли драйвера?) могут пытаться делать свою цветокоррекцию, в результате чего могут возникать мелкие нестыковки, подобные описанным выше.
Поэтому: каждый байт цвета округляем до значения, кратного 8. Ну, за исключением FF — там так и остается FF. В результате получаем т.н. "псевдобезопасную" палитру, цвета которой правильно отображаются на 16/24/32. Проверено на практике — замечаний нет.
Ну, а между 24/32 разницы фактически никакой нет, верно.

NB: давным-давно (когда мобилки были большими:) где-то здесь уже была похожая тема, но я ее не нашел (плохо искал, наверное:)

спустя 38 минут [обр] SelenIT(0/67)[досье]
Николай Бубело[досье]
За правило "округлять до кратного 8" - большое спасибо! Правда, интуитивно чувствую, что это не совсем окончательный ответ, поскольку "классическая безопасная" палитра с ее 33, 99 и т.п. вроде бы тоже не искажается. Про "минус 2 бита" немного не понял - Вы имеете в виду, что, например, #001600 преобразуется в #001400?
Похожую тему поищу, спасибо за подсказку.
спустя 18 минут [обр] Lynn «Кофеман»(0/571)[досье]

png24 не режет цвета вообще и использует сжатие без потерь (во всяком случае при сохранении из Photoshop'а). Но зато Photoshop вписывает в него некое значение гаммы из-за которого этот png в IE отображается темнее, чем есть на самом деле. Лечится путём удаления из файла этой информации.
При сохранении в gif или png8 в Photoshop'е можно поигратся с палитрой, но обычно он сам достаточно хорошо справляется с выбором нужных цветов.

ЗЫ. Давно я не видел 16-битных цветов.

спустя 27 минут [обр] Алексей В. Иванов(0/2861)[досье]
SelenIT[досье]
Про биты: 8R8G8B -> 5R6G5B.
Под зеленую компоненту выделено на один бит больше т.к. он самый чувствительный для глаз человека.
По поводу 16-24 бит и bgcolor: http://faqteam.org/graphics/
спустя 16 минут [обр] SelenIT(0/67)[досье]
Lynn «Кофеман»[досье]
А я как раз недавно столкнулся с этой странностью отображения png24 в IE и не знал, с чем она связана... Спасибо!
Алексей В. Иванов[досье]
Огромное спасибо за пояснение и еще большее - за ссылку. Наконец до меня дошло).
спустя 15 минут [обр] Lynn «Кофеман»(0/571)[досье]
SelenIT[досье]
Утилита с помощью которой я с этим боролся. Нужно удалять chunk gAMA.
спустя 23 минуты [обр] SelenIT(0/67)[досье]
Lynn «Кофеман»[досье], за утилиту отдельное огромное спасибо!
спустя 12 часов [обр] Старынин Валерий(0/57)[досье]
А как из jpeg-а вычистить PhotoShop'овский мусор (вроде он сохраняет туда preview)?
спустя 10 минут [обр] Lynn «Кофеман»(0/571)[досье]
Из Photoshop'а надо сохранять File -> Save for Web... (Alt+Shift+Ctrl+S), тогда никакого мусора не будет.
спустя 2 минуты [обр] Алексей В. Иванов(0/2861)[досье]
JPG Cleaner v2.6 очищает всякую мету лишнюю, но про превьюшку первый раз слышу. Врядли она записывается внутрь. Для этого есть progressive-сжатие.
Powered by POEM™ Engine Copyright © 2002-2005