Прозрачность в компьютерной графике возможна в ряде форматов файлов . Термин « прозрачность » используется разными людьми по-разному, но в самом простом случае это «полная прозрачность», то есть то, что полностью невидимо. Только часть графики должна быть полностью прозрачной, иначе ничего не будет видно. Более сложным является «частичная прозрачность» или «полупрозрачность» [ требуется цитата ] , когда достигается эффект частичной прозрачности графики так же, как цветное стекло. Поскольку в конечном итоге печатная страница или экран компьютера или телевизора могут быть только одного цвета в одной точке, частичная прозрачность всегда имитируется на каком-то уровне путем смешивания цветов . Существует много разных способов смешивания цветов, поэтому в некоторых случаях прозрачность неоднозначна.
Кроме того, прозрачность часто является «дополнительной» для графического формата, и некоторые графические программы игнорируют прозрачность.
Растровые форматы файлов, поддерживающие прозрачность, включают GIF , PNG , BMP , TIFF , TGA и JPEG 2000 , либо посредством прозрачного цвета , либо посредством альфа-канала .
Большинство векторных форматов неявно поддерживают прозрачность, поскольку они просто избегают помещения любых объектов в заданную точку. Это касается EPS и WMF . Для векторной графики это может не рассматриваться как прозрачность, но требует такого же тщательного программирования, как и прозрачность в растровых форматах.
Более сложные векторные форматы могут допускать комбинации прозрачности между элементами внутри графики, а также выше. Это включает SVG и PDF .
Соответствующий растровый графический редактор отображает прозрачность специальным узором, например, шахматным узором.
Одна цветовая запись в палитре одного изображения GIF или PNG может быть определена как «прозрачная», а не как фактический цвет. Это означает, что когда декодер встречает пиксель с этим значением, он отображается в цвете фона той части экрана, где размещено изображение, даже если он меняется от пикселя к пикселю, как в случае фонового изображения .
Приложения включают в себя:
Прозрачный цвет следует выбирать тщательно, чтобы избежать исчезновения предметов, которые случайно имеют тот же цвет.
Даже эта ограниченная форма прозрачности имеет неоднородную реализацию, хотя большинство популярных веб-браузеров способны отображать прозрачные изображения GIF. Эта поддержка часто не распространяется на печать, особенно на печатающие устройства (такие как PostScript ), которые не включают поддержку прозрачности в устройство или драйвер. За пределами мира веб-браузеров поддержка прозрачных файлов GIF довольно нестабильна.
Края символов и других изображений с прозрачным фоном не должны иметь оттенков серого : они обычно используются для промежуточных цветов между цветом буквы/изображения и цветом фона, обычно оттенки серого являются промежуточными между черными буквами и белым фоном. Однако, например, с красным фоном промежуточные цвета будут темно-красными. Серые пиксели края дадут уродливый и нечеткий результат. Для переменного цвета фона нет подходящих фиксированных промежуточных цветов.
Некоторые форматы изображений, такие как PNG и TIFF, также допускают частичную прозрачность через альфа-канал, что решает проблему ограничения краев. Вместо того, чтобы каждый пиксель был либо прозрачным, либо непрозрачным, его можно установить на 254 уровня частичной прозрачности, что позволит части фонового изображения проступать сквозь изображение переднего плана.
Частичная прозрачность в основном используется для создания «мягких краев» в графике, чтобы они сливались с фоном. [1] См. также монохромный или с оттенками серого и сглаживание . Частичная прозрачность также может использоваться для того, чтобы сделать изображение менее заметным, например, водяной знак или другой логотип; или для визуализации чего-либо прозрачного, например, призрачного видения в видеоигре. Анимация альфа-канала в программе редактирования изображений может обеспечить плавные переходы между различными изображениями.
Процесс объединения частично прозрачного цвета с фоном («композитинг») часто плохо определен, и результаты могут быть не совсем одинаковыми во всех случаях. Например, если используется цветокоррекция, следует ли компоновать цвета до или после цветокоррекции?
Альтернативный подход к полной прозрачности — использование контура обрезки . Контур обрезки — это просто фигура или контур, который используется в сочетании с другими графическими объектами. Все, что находится внутри контура, видимо, а все, что находится за его пределами, невидимо. Контур по своей сути векторный, но потенциально может использоваться для маскировки как векторных, так и растровых данных. Основное применение контуров обрезки — в файлах PostScript.
В то время как некоторые спецификации прозрачности неопределенны, другие могут давать математические подробности того, как должны быть составлены два цвета. Это дает довольно простой пример того, как могут работать вычисления композиции, как может давать ожидаемые результаты, а также может преподносить сюрпризы.
В этом примере необходимо скомпоновать два серых цвета. Значения серого считаются числами от 0,0 (белый) до 1,0 (черный). Подчеркнем: это только одно возможное правило для прозрачности. Если вы работаете с прозрачностью, проверьте правила, используемые в вашей ситуации.
Цвет в точке, где должны быть объединены цвета G1 и G2, равен ( G1 + G2 ) / 2
. Некоторые следствия этого:
( G1 + G1 ) /2 = G1
.G2 / 2
. Это всегда будет меньше любого ненулевого значения G2, поэтому результат будет белее G2. (Это легко изменить для случая, когда G2 белый).( G2 + 1 ) / 2
. Это всегда будет больше, чем G2, поэтому результат будет чернее, чем G2.( G1 + G2 ) / 2 = ( G2 + G1 ) / 2
. Это означает, что не имеет значения, в каком порядке смешиваются два графика, т.е. какой из них находится сверху, а какой снизу.( ( G1 + G2 ) / 2 + G3 ) / 2 = G1 / 4 + G2 / 4 + G3 / 2( G1 + ( G2 + G3 ) / 2 ) / 2 = G1 / 2 + G2 / 4 + G3 / 4
Это важно, поскольку означает, что при объединении трех и более объектов с использованием этого правила прозрачности окончательный цвет во многом зависит от порядка выполнения вычислений.
Хотя формула проста, она может быть не идеальной. Человеческое восприятие яркости не линейно — мы не обязательно считаем, что значение серого 0,5 находится на полпути между черным и белым. Такие детали могут не иметь значения, когда прозрачность используется только для смягчения краев, но в более сложных проектах это может быть существенно. Большинству людей, серьезно работающих с прозрачностью, нужно будет увидеть результаты, и они могут поиграть с цветами или (где это возможно) алгоритмом, чтобы получить нужные им результаты.
Эту формулу можно легко обобщить для цветов RGB или CMYK , применив формулу к каждому каналу отдельно. Например, final red = ( R1 + R2 ) / 2
. Но ее нельзя применить ко всем цветовым моделям. Например, цвет Lab даст неожиданные результаты.
Альтернативная модель заключается в том, что в каждой точке каждого элемента, который нужно объединить для прозрачности, есть связанный цвет и непрозрачность между 0 и 1. Для каждого цветового канала вы можете работать с этой моделью: если канал с интенсивностью G2
и непрозрачностью T2
накладывается на канал с интенсивностью G1
и непрозрачностью, T1
результатом будет канал с интенсивностью, равной (1 - T2) * G1 + G2
, и непрозрачностью 1 - (1 - T2) * (1 - T1)
. Каждый канал должен быть умножен на соответствующее значение альфа перед композицией (так называемая предварительно умноженная альфа ). Спецификация файла SVG использует этот тип смешивания, и это одна из моделей, которые можно использовать в PDF.
Альфа-каналы могут быть реализованы таким образом, где альфа-канал обеспечивает уровень непрозрачности, который будет применяться одинаково ко всем остальным каналам. Чтобы работать с приведенной выше формулой, непрозрачность должна быть масштабирована до диапазона от 0 до 1, независимо от ее внешнего представления (часто от 0 до 255, если используются 8-битные образцы, такие как «RGBA»).
Начиная с версии 1.4 стандарта PDF ( Adobe Acrobat версии 5) поддерживается прозрачность (включая полупрозрачность). Прозрачность в файлах PDF позволяет создателям достигать различных эффектов, включая добавление теней к объектам, создание полупрозрачных объектов и смешивание объектов друг с другом или с текстом. PDF поддерживает множество различных режимов смешивания , а не только наиболее распространенный метод усреднения, а правила композиции множества перекрывающихся объектов позволяют выбирать (например, смешивать ли группу объектов перед смешиванием с фоном или смешивать каждый объект по очереди с фоном).
Прозрачность PDF — очень сложная модель, ее оригинальная спецификация Adobe была длиной более 100 страниц. Ключевым источником сложности является то, что смешивание объектов с различными цветовыми пространствами может быть сложным и подверженным ошибкам, а также вызывать проблемы совместимости . Прозрачность в PDF была разработана не для того, чтобы вызывать ошибки в программах просмотра PDF, которые ее не понимают — они просто отображали бы все элементы как полностью непрозрачные. Однако это был палка о двух концах, так как пользователи со старыми программами просмотра, принтерами PDF и т. д. могли увидеть или распечатать что-то совершенно иное, чем исходный дизайн.
Тот факт, что модель прозрачности PDF настолько сложна, означает, что она не поддерживается должным образом. Это означает, что RIP и принтеры часто испытывают проблемы с печатью PDF с прозрачностью. Решением этой проблемы является либо растрирование изображения, либо применение векторного сглаживания прозрачности к PDF. Однако векторное сглаживание прозрачности чрезвычайно сложно и поддерживается только несколькими специализированными пакетами.
Язык PostScript имеет ограниченную поддержку полной (не частичной) прозрачности, в зависимости от уровня PostScript. Частичная прозрачность доступна с расширением pdfmark, [2] доступным во многих реализациях PostScript.
Уровень 1 PostScript обеспечивает прозрачность двумя способами:
Уровень 2 PostScript не добавляет никаких специфических функций прозрачности. Однако, используя шаблоны, произвольная графика может быть нарисована через маски, определенные любыми векторными или текстовыми операциями. Однако это сложно реализовать. Кроме того, это слишком часто достигало пределов реализации, и лишь немногие прикладные программы когда-либо предлагали эту технику.
Уровень 3 PostScript добавляет дополнительную опцию прозрачности для любого растрового изображения. Можно применить прозрачный цвет или диапазон цветов; или можно использовать отдельную 1-битную маску для предоставления альфа-канала.
Файлы EPS содержат PostScript, который может быть уровня 1, 2 или 3 и использовать функции, описанные выше. Более тонкая проблема возникает с предпросмотрами для файлов EPS, которые обычно используются для отображения вида файла EPS на экране. Существуют жизнеспособные методы настройки прозрачности в предварительном просмотре. Например, предварительный просмотр TIFF может использовать альфа-канал TIFF. Однако многие приложения не используют эту информацию о прозрачности и поэтому будут отображать предварительный просмотр в виде прямоугольника. Полузапатентованная технология, впервые примененная в Photoshop и принятая рядом приложений допечатной подготовки, заключается в сохранении контура обрезки в стандартном месте EPS и использовании его для отображения.
Кроме того, лишь немногие программы, генерирующие предварительные просмотры EPS, генерируют в предварительном просмотре информацию о прозрачности.
Некоторые программы пытались обойти эту проблему, считая весь белый цвет в предварительном просмотре прозрачным, но это также проблематично в случаях, когда некоторые белые цвета непрозрачны .
В последнее время появились приложения, которые вообще игнорируют предварительный просмотр; поэтому они получают информацию о том, какие части предварительного просмотра следует отрисовывать, путем интерпретации PostScript.