Недавно я наткнулся на очень своеобразное изображение со странными свойствами. Изображение в формате PNG и просто показывает простую птицу с прозрачным фоном. Мой друг прислал мне изображение с простыми инструкциями, чтобы просто сохранить его и установить в качестве фона.
После установки изображения в качестве моего фона появляется второе изображение, показывающее, что на самом деле чайка стоит на оружии:
Это поначалу меня очень заинтересовало характером изображения и способами его создания. Я открыл изображение в Фотошопе, и ничего необычного не появляется - изображение остается таким же, как прозрачная чайка, нет скрытых слоев или масок, чтобы сделать его невидимым. Проверив изображение в Photoshop, я подумал, что Windows внесла изменения в файл, установив его в качестве фона рабочего стола - после перехода к %AppData%\Microsoft\Windows\Themes
изображению он оказался таким же.
Почему это изображение показывает отдельный скрытый слой или совершенно отдельное изображение, если оно установлено в качестве фона рабочего стола Windows по сравнению с просмотром или редактированием в Photoshop?
Ответы:
Я предполагаю, что это было названо «Грязная прозрачность» в этой статье из Smashing Magazine .
По сути, любой цвет в прозрачных PNG может быть описан значением RGBA, где RGB обозначает красный, зеленый и синий каналы, а A обозначает альфа. «Невидимые» цвета могут иметь любые значения RGB + 0 Alpha, что означает, что цвет сохранит исходную информацию, но будет отображаться как прозрачный, поскольку его альфа установлен на 0.
Почему вы хотите хранить значения RGB при использовании Alpha? Таким образом, вы можете получить плавные края и прозрачные цвета - в отличие от зубчатых краев в GIF-изображениях с прозрачным фоном. Прозрачность в PNG может изменяться от 0 до 255, в GIF - либо 100% прозрачная, либо непрозрачная. Чтобы отобразить что-то, скажем, с 50% прозрачностью, вам все равно нужно знать значения RGB, следовательно, значение сохраняется. Большинство программ для редактирования изображений отбрасывают эту информацию RGB при сохранении полностью прозрачного цвета, включая Photoshop.
Я не могу говорить о версиях CC, но чтобы увидеть «невидимые» цвета в старых версиях Photoshop, вам понадобится плагин. Выберите один: фото бесплатно или SuperPNG . SuperPNG кажется более новым и менее загруженным.
Почему трюк работает? Обои должны быть непрозрачными, потому что за ними ничего не видно, верно? Я предполагаю, что Windows отбрасывает информацию об альфа-канале, выявляя скрытые значения RGB в процессе.
источник
Чтобы добавить ответ Нихала , это можно воспроизвести с помощью кисти «против стирания» в GIMP. Кисть «Удалить» может добавить или удалить альфа-канал, если изображение использует формат, который его поддерживает (удерживайте клавишу «Alt», чтобы переключиться между стиранием и стиранием).
Для Krita, вы можете сделать это:
Layer > Split Alpha > Alpha into Mask
. После этого вы можете скрыть или удалить канал Transparency Mask 1, который только что был создан, и вы увидите полное изображение.Поскольку фон Windows не может иметь ничего позади, он, вероятно, просто лишает прозрачности и отображает изображение без него (быстрое и грязное 32-битное изображение до 24-битного по внешнему виду).
источник
Одно уточнение: это не ошибка, это определенное поведение в спецификации png. В частности, в спецификации указывается, что если зритель или преобразователь не может понять, что прозрачность или прозрачность не подходят для контекста, или использование альфа-канала может быть проигнорировано. Кроме того, спецификация требует, чтобы все генераторы изображений устанавливали прозрачные цвета, чтобы изображение было полезным, если альфа-канал игнорируется. (Мой перефраз, я был пару лет, так как я прочитал спецификацию.)
источник