Обманная полупрозрачность для gif

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

Не правильно Правильно
Не правильно Правильно

Проблема возникает из-за того, что gif не поддерживает полупрозрачности.

Поэтому если в том же photoshop подготовить нужное изображение, отделив его от какого-либо фона (как обычно вырезают какие-либо объекты), а потом сохранить в gif и указать в настройках gif`а поддержку прозрачности, часто образовывается белый ореол (если же края объекта изначально никак не будут сглажены и не будут иметь полупрозрачных областей, то ореола не будет), т.к. прозрачной остается только та область изображения, которая была на 100% прозрачна в самом фотошопе, у всех остальных полупрозрачных областей автоматически образуется белая подложка.

Один из вариантов, который применяют — это просто взять и сохранить нужное изображение со всем куском фона в виде подложки, тогда это может быть уже и не гиф вовсе, а jpg (т.е. в итоге получается изображение вообще без прозрачных и полупрозрачных областей). Иногда это действительно единственный выход (к примеру, если вырезанный объект состоит из многих градаций цветов, и не допустимо, чтобы все эти цвета были ограничены рамками в 256 цветов). При таком решении есть два минуса, во-первых, размер файла увеличивается, так как вынужден содержать излишнюю информацию в виде фона, а во-вторых, есть большая вероятность того, что края этого изображения не будут стыковаться с фоном сайта.

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

Я использую для редактирования photoshop, но на самом деле можно использовать любой более или менее продвинутый графический редактор. Главное — принцип.

Пример решения проблемы

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

Роза Фон сайта
Роза Фон сайта

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

1.
В phoshop должно быть открыто два рисунков. Первый — это непосредственно роза, а второй нужно будет создать самому. Создается просто новый файл с размерами холста большего, чем роза. Сильно стараться на этом этапе сделать нужный размер не имеет смысла, проще будет потом подогнать размеры. Новый рисунок заливаем текстурой, такой же, какая будет на страничке, или же однотонным цветом, все зависит от того, какой фон будет на страничке.

2.
Если на рисунке с розой находятся, какие-либо посторонние серые пятна или просто сам фон не достаточно белый, все это можно убрать при помощи Image -> Adjustments -> Brightnes/Contrast… (оба регулятора экспериментально сдвигаются в право, это срабатывает только с изображениями на подобие розы в примере, т.е. ч/б). Если от какого-то мусора все равно не удается избавиться, то замазываем его белым цветом (кистью). В итоге у нас однозначно должна быть роза на белоснежном фоне.

3.
Берем инструмент «Волшебная палочка» (Magic Wand Tool) с настройками: Tolerance=1, Anti-aliased отключен, Contiguous отключен.

Настройки волшебной палочки

И щелкаем ею на белом участке изображения розы, таким образом выделив все белое.

Выделенное пространство вокруг розы

4.
Нажимаем меню Select->Inverse. Таким образом выделение инвертируется и выделена будет именно роза, а не ее окружение.

Выделенная роза

5.
Выбираем инструмент Move Tool и перетаскиваем выделенный участок рисунка (по сути, саму розу с маленьким белым ореолом) на рисунок с фоном сайта.

Не обработанная роза на фоне сайта

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

У нас получился рисунок, состоящий из двух слоев. Нижний слой — это фон, верхний — это розочка.

Палитра слоев

6.
Теперь слою с розочкой нужно установить режим наложения Multiple.

Изменение режима наложения слоя

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

7.
Щелкните левой кнопкой мыши, удерживая Ctrl (на клавиатуре), на слое с розой (в палитре слоев на маленькой картинке предосмотра розы), после чего должна получиться выделенная роза.

Или:

Это же можно сделать по другому. Для этого в палитре слоев должен быть выделен слой с розой. После взять инструмент «Волшебная палочка» (Magic Wand Tool) с теми же настройками, которые мы использовали ранее (шаг 3), и щелкнуть на любую прозрачную область розы. Если вы будете использовать этот способ, то следующий шаг (8) выполнять не нужно, т.к. мы сразу будем иметь выделение вокруг розы (ее пустого пространства).

8.
Инвертируем выделение, выбрав в меню Select->Inverse. После чего у нас становится выделена область вне розы, а не сама роза.

Выделенное пространство вокруг розы

9.
Теперь нужно удалить ненужные куски фона (те, которые попадают в область выделения), чтобы вместо них появилась прозрачная область.

Если напротив фонового слоя стоит замочек ( на изображениях палитры слоев его видно, шаг 6), его нужно преобразовать в обычный слой (иначе этот слой нельзя будет сделать прозрачным в нужных нам местах). Делается это просто — нужно произвести двойной клик на этом слое, а в появившемся диалоговом окне нажать «Ок». После чего замочек пропадет.

Преобразованный фоновый слой

В палитре слоев должен быть выделен слой с фоном. Если все в порядке, нажимаем Del на клавиатуре. И убираем выделение, нажав на клавиатуре комбинацию Ctrl+D.

Результат

10.
Все. В общем-то, все готово. Осталось только удалить ненужные пустые края рисунка при помощи инструмента Crop Tool (оставив при этом пару пикселей припуска).

11.
Теперь осталось сохранить этот рисунок в gif. Удобнее делать это через меню File->Save For Web. Количество цветов, с которым вы будете сохранять рисунок, в принципе, имеет значение. Так как если у вас используется фон наподобие того, что здесь в примерах, и количество цветов, с которым вы будете сохранять gif-файл, будет 64-256, то будет слишком большой размер файла, примерно в два раза больше, чем мог бы быть. Да и качество особо от этого не улучшится. Как показала практика, самый оптимальный вариант — это 16 или 32 цветов (при ч/б рисунке с цветным фоном). Но, я думаю, количество цветов вы уже подберете опытным путем. Нужно, чтобы размер файла был как можно меньше и в то же время не появлялся ореол вокруг рисунка при вставке его на страничку. Не забывайте так же, что если у вас рисунок состоит не из градаций серого, а и из разных цветов, то вполне востребованным может быть использование и большего количества цветов, чем 32, это зависит от ситуации.

Вот результат того, что получилось у меня (т.е. это изображение уже можно помещать непосредственно на сайт):

Обработанный gif, готовый для вставки на сайт

Буду рад, если эта статья кому-то будет полезной.

Автор

  • Suok

    Спасибо! Очень интересная и полезная идея….!!!

  • Согласен с Suok!!!
    А еще часто раздражает на сайтах, фотографии (картинки, скины) в *.ipg с разводами, наслоениями и т.д.!!!. Хотя можно совершенно спокойно это все сделать без «разводов» сохраняя в графическом формате *.png например.

  • Николай

    Добрый день.
    Есть еще более быстрый способ устранения этой проблемы. После выделения розы, достаточно убрать лишний фон нажатием 2х или более раз клавиши backspace и затем размножить слой (ctrl+j) до полного убирания полупрозрачности, объеденить все слои, перевести в нужный режим и сохранить как обычный gif (ctrl+shift+alt+s).

  • Прикольно, автору и всем спасибо., я не знал про png.

  • А есть еще более простой способ:
    Сохраняя для веб в формате gif изображение с полупрозрачными краями, нужно выбрать в выпадающем списке Matte тот цвет, который будет подложен под изображение. Тогда ореол будет нужного цвета, а визуально результат от вашего не будет отличаться.

  • Николай,
    Имхо «звучит» не так уж и проще (у меня правда «звучит» тоже не просто, а на практике получается очень быстро, как и в вашем случае, наверное) 🙂 Но в любом случае много разных способов это хорошо.

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

  • swikearer

    Зaчетно!

  • guf

    Полезно! Если б в гифах была полупрозрачность

  • Владимир

    А если фон поменялся, что опять перекрашивать?

    Используйте PNG-8bit с полупрозрачностью.
    Он такой же компактный как и GIF.
    А GIF — только когда анимация нужна.

    Старые версии Photoshop не умеют работать с PNG-8bit
    FireWorks+CQ вам в помощь

  • Kseniarybka

    Спасибо, намучалась я с этими белыми ореолами в анимированных гифах…. Хороший вариант 🙂