• ФДВР. Каналы и маски: практика — I

    В этой статье мы научимся на практике применять каналы и маски для оптимизации изображений в формате PNG.

    Первое, на что хочется обратить внимание, так это на игнорируемые многими разработчиками маски влияния на цветовое распределение и на смешивание в окне Save for Web:

    masks

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

    clock

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


    42 КБ

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

    step2
    46 КБ

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

    step2_noise

    Зачастую от шума можно избавиться, снизив значение параметра Dither, но и качество самого изображения может пострадать.

    Исходя из этих проблем, попробуем совершить невероятное: сделаем так, чтобы изображение выглядело лучше при меньшем количестве цветов и весе изображения. Для этого нам помогут отмеченные выше маски влияния.

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

    step3

    Переходим в диалоговое окно 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:

    step5

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

    step6

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

    step7

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

    step8

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

    У меня получилась вот такая маска:

    step9

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

    step10

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


    256 цветов, без смешивания, без оптимизации
    42 КБ
    result
    180 цветов
    34 КБ
    step10
    128 цветов
    31 КБ

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

  • 17 комментариев

    1. Panya
      1 апреля 2009

      Спасибо. Очень познавательно.

    2. Александр Борисов
      2 апреля 2009

      Спасибо, Сергей! Обязательно пишите ещё!

    3. Булат
      2 апреля 2009

      Определенно писать дальше.

    4. Сергей Чикуенок
      2 апреля 2009

      Даже и не думал, что эта тема может быть такой популярной :)

    5. 2 апреля 2009

      Даже и не думал, что эта тема может быть такой популярной
      Сергей, а Вы бы знали как мало материала на эту тему есть на русском языке! А английским, к сожалению, я не владею в необходимой степени! Огромное спасибо за статью, будем ждать продолжения.

    6. Panya
      2 апреля 2009

      Да даже на английском практически нечего почитать на тему оптимизации графики для веб. Большинство статей сводится до рекомендаций поиграться с регуляторами качества или количества цветов. Реже советуют использовать консольные утилиты типа optipng, pngout и jpegtran. Действительно полезную информацию, наверняка, можно получить только прочитав спецификации форматов графики, используемых для веба. Но там так все сухо и занудно написано, что, лично у меня, дело никогда не доходит дальше 2 страницы :)

    7. Сергей Чикуенок
      2 апреля 2009

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

      Вот и представьте мои мучения, потому что практически все способы оптимизации, которыми я пользуюсь придумывались именно после чтения спецификаций :)

    8. Panya
      2 апреля 2009

      Спасибо, что делитесь :)

    9. 6 апреля 2009

      Круть! Тема очень востребована )))

    10. Леша
      6 апреля 2009

      Простите ради бога, я не могу найти кнопки маскирования в сейв фо веб диалоге в шопе CS4. В тройке вижу, в четверке не вижу.
      где они?))

    11. Сергей Чикуенок
      6 апреля 2009

      Я, к сожалению, еще не добрался до CS4, поэтому не могу подсказать

    12. 28 апреля 2009

      Спасибо, познавательно, но мне кажеться что в недалеком будущем такое увлечение как оптимизация может быть не востребовано(скорочть передачи в сети ростет) или я ошибаюсь?

    13. Сергей Чикуенок
      28 апреля 2009

      Ошибаетесь. Во-первых, оптимизация графики нужна не только для веба. Мне, например, писали некоторые ребята, занимающиеся разработкой игр для мобильных платформ, где приложение должно занимать не больше строго отведенного объема.

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

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

    14. 30 апреля 2009

      блин таже фигня, не могу найти в СS4 подозреваю этих масок в save for web больше нет

    15. 29 июля 2009

      Познавательно, новеньким на в самую пору. Даже я, когда нахожу сложные уроки, теряю пару часов, что бы повторить результат. Бывает кое что и забываю.Сохраню вашу статью на заметку:)

    16. Шатов
      8 сентября 2009

      я такую информацию (Vary optimization based on a mask ) нашел в официальном хелпе фотошопа, но это так, наблюдение.

    17. Шатов
      8 сентября 2009

      кстати, когда по-вашему в браузерах будет реализована полноценная поддержка векторной графики?

    Комментировать

    Powered by Zen Coding