-
ФДВР. Каналы и маски: практика — I
В этой статье мы научимся на практике применять каналы и маски для оптимизации изображений в формате PNG.
Первое, на что хочется обратить внимание, так это на игнорируемые многими разработчиками маски влияния на цветовое распределение и на смешивание в окне Save for Web:

Давайте посмотрим, как это может помочь нам в оптимизации PNG-изображения. Возьмем исходник:

Попробуем сохранить его в PNG8 со следующими настройками: Color reduction: Adaptive, Dither: No dithering, Colors: 256. Не будем рассуждать, насколько целесообразно сохранять такое изображение в PNG (мы ведь тренируемся), лучше посмотрим на то, что получилось:

42 КБПервое, что мне бросается в глаза — «побитый» маятник. На общем фоне это очень яркое пятно, которое притягивает взгляд зрителя, и это же пятно выглядит очень некрасиво. Попробуем сгладить цветовые переходы маятника, выставив в параметрах сохранения Dither: 100%.

46 КБМаятник выглядит немного лучше, чего не скажешь о всем остальном изображении: вес файла увеличился на 4 КБ и на однородном фоне появился шум:

Зачастую от шума можно избавиться, снизив значение параметра Dither, но и качество самого изображения может пострадать.
Исходя из этих проблем, попробуем совершить невероятное: сделаем так, чтобы изображение выглядело лучше при меньшем количестве цветов и весе изображения. Для этого нам помогут отмеченные выше маски влияния.
Начнем с цвета. Переходим в палитру Channels и создаем новый канал под названием color. Мы уже определили, что проблемной областью является маятник, поэтому в нужном месте рисуем белый кружок (для удобства лучше включить канал RGB):

Переходим в диалоговое окно Save for Web и выставляем там следующие параметры: Color reduction: Adaptive, Dither: No, Colors: 128 (как видите, количество цветов делаем в 2 раза меньше). Теперь надо выбрать маску влияния на цвет: жмем на иконку
рядом с Color reduction и в списке выбираем канал color. Смотрим:
Сейчас вы увидели маску влияния в действии: маятник выглядит прекрасно, чего не скажешь о всем остальном. По сути, мы сказали фотошопу: «Область маятника очень важна, поэтому постарайся сделать так, чтобы там сохранилось как можно больше цветов». Маска влияния работает точно так же, как и обычная маска: белый цвет означает максимальный приоритет области пикселей в основном изображении, черный — минимальный. Все промежуточные оттенки пропорционально влияют на приоритет области.
Маятник перетащил одеяло на себя, поэтому нужно снизить интенсивность цвета белого кружка, чтобы остальные области не были обделены цветом. Закрываем окно Save for Web, выделяем канал color и применяем к нему Levels (Ctrl+L или ⌘+L). Ставим нижнему белому ползунку в Output levels значение 50. Таким образом мы снизили интенсивность цвета в маске, сказав, что самый яркий цвет должен быть не больше 50:

Пробуем еще раз сохранить с теми же параметрами:

Уже лучше, но появились другие проблемные области, которые тоже нужно исправить:

Думаю, вы уже поняли, как работают маски влияния. Вы подсказываете фотошопу, каким именно областям изображения нужно уделить больше внимания при снижении количества цветов. Чем ярче цвет в маске, тем больше цветов из этой области старается сохранить фотошоп. Методом проб и ошибок у меня получилась вот такая маска (вы можете скопировать изображение себе, чтобы проверить в действии):

Маска влияния на смешивание (dithering) работает точно так же: вы указываете, как сильно нужно смешать пиксели в указанных областях. Помните, что при смешивании образуются нерегулярные структуры цветов, которые плохо сжимаются PNG-упаковщиком (поэтому изображение с включенным смешиванием, как правило, весит больше, чем без него). С помощью маски можно указать, какие именно области нуждаются в смешивании, сократив, тем самым, итоговый вес файла.
У меня получилась вот такая маска:

Соединив все вместе получим такое изображение (параметры сохранения: Adaptive, 128 цветов):

Вполне неплохо для 128 цветов, не находите? Сделаем последние штрихи: увеличим количество цветов до 180, а верхнюю границу смешивания снизим до 80%. В итоге наш модельный ряд выглядит следующим образом:

256 цветов, без смешивания, без оптимизации
42 КБ
180 цветов
34 КБ
128 цветов
31 КБПопробуйте немного поиграться с этими масками, чтобы понять, как они работают и когда их стоит применять. В следующей части рассмотрим, как с помощью масок можно оптимизировать полупрозрачные PNG.
17 комментариев

Спасибо. Очень познавательно.
Спасибо, Сергей! Обязательно пишите ещё!
Определенно писать дальше.
Даже и не думал, что эта тема может быть такой популярной
Даже и не думал, что эта тема может быть такой популярной
Сергей, а Вы бы знали как мало материала на эту тему есть на русском языке! А английским, к сожалению, я не владею в необходимой степени! Огромное спасибо за статью, будем ждать продолжения.
Да даже на английском практически нечего почитать на тему оптимизации графики для веб. Большинство статей сводится до рекомендаций поиграться с регуляторами качества или количества цветов. Реже советуют использовать консольные утилиты типа optipng, pngout и jpegtran. Действительно полезную информацию, наверняка, можно получить только прочитав спецификации форматов графики, используемых для веба. Но там так все сухо и занудно написано, что, лично у меня, дело никогда не доходит дальше 2 страницы
Вот и представьте мои мучения, потому что практически все способы оптимизации, которыми я пользуюсь придумывались именно после чтения спецификаций
Спасибо, что делитесь
Круть! Тема очень востребована )))
Простите ради бога, я не могу найти кнопки маскирования в сейв фо веб диалоге в шопе CS4. В тройке вижу, в четверке не вижу.
где они?))
Я, к сожалению, еще не добрался до CS4, поэтому не могу подсказать
Спасибо, познавательно, но мне кажеться что в недалеком будущем такое увлечение как оптимизация может быть не востребовано(скорочть передачи в сети ростет) или я ошибаюсь?
Ошибаетесь. Во-первых, оптимизация графики нужна не только для веба. Мне, например, писали некоторые ребята, занимающиеся разработкой игр для мобильных платформ, где приложение должно занимать не больше строго отведенного объема.
Во-вторых, скорость передачи сети очень слабо развивается в регионах и некоторых странах бывшего СССР, так что в ближайшие несколько лет вряд ли будет какая-то революция в этом сегменте.
В-третьих, сейчас активно развивается мобильный интернет, где скорости пока еще не такие высокие.
блин таже фигня, не могу найти в СS4 подозреваю этих масок в save for web больше нет
Познавательно, новеньким на в самую пору. Даже я, когда нахожу сложные уроки, теряю пару часов, что бы повторить результат. Бывает кое что и забываю.Сохраню вашу статью на заметку:)
я такую информацию (Vary optimization based on a mask ) нашел в официальном хелпе фотошопа, но это так, наблюдение.
кстати, когда по-вашему в браузерах будет реализована полноценная поддержка векторной графики?