Невидимый слой изображения PNG, который виден только как фон

48

Недавно я наткнулся на очень своеобразное изображение со странными свойствами. Изображение в формате PNG и просто показывает простую птицу с прозрачным фоном. Мой друг прислал мне изображение с простыми инструкциями, чтобы просто сохранить его и установить в качестве фона.

Оригинальное изображение только с чайкой

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

Фоновое изображение с секретным слоем?

Это поначалу меня очень заинтересовало характером изображения и способами его создания. Я открыл изображение в Фотошопе, и ничего необычного не появляется - изображение остается таким же, как прозрачная чайка, нет скрытых слоев или масок, чтобы сделать его невидимым. Проверив изображение в Photoshop, я подумал, что Windows внесла изменения в файл, установив его в качестве фона рабочего стола - после перехода к %AppData%\Microsoft\Windows\Themesизображению он оказался таким же.

Почему это изображение показывает отдельный скрытый слой или совершенно отдельное изображение, если оно установлено в качестве фона рабочего стола Windows по сравнению с просмотром или редактированием в Photoshop?

Каллум
источник
6
Откройте его с помощью XnView, нажмите «Удалить альфа-канал», и вы увидите полное изображение. Windows 7 , преобразует фоны в JPEG, теряя прозрачность answers.microsoft.com/en-us/windows/forum/windows_7-desktop/...
leonbloy

Ответы:

59

Я предполагаю, что это было названо «Грязная прозрачность» в этой статье из 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 в процессе.

Rhaenys
источник
6
Я просто попробовал то, что вы сказали, удалив маску слоя прозрачности (альфа-канал), что мне никогда не приходило в голову - благодаря этому я смог повторить эффект. Это очень крутой способ создания фонов, я думаю, что очень скоро я буду изучать его возможности троллинга: D
Callum
15
Я бы сказал, что это ошибка в Windows. Если альфа-значение пикселя равно 0, то пиксель является прозрачным и значения RGB не должны иметь значения. Windows должна визуализировать изображение, которое содержит прозрачность поверх чего-то другого, например, белого фона.
Пол
5
@Павел. Согласен, за исключением того, что это будет определенный цвет фона для рабочего стола, тот же цвет, который используется, если изображение не растянуто или не мозаично и слишком мало для заполнения рабочего стола. Метафора заключается в том, что обои находятся поверх поверхности или стены сплошного цвета.
trlkly
3
Я был бы очень удивлен, если Adobe Photoshop нужен плагин для достижения этой цели - я ожидаю, что он будет предлагать элементы управления, аналогичные GIMP, например, корректировать альфа-значения с помощью инструментов кривых или уровней (это только два из многих способов сделать прозрачные части видимыми).
Михаэль Шумахер
2
@MichaelSchumacher Вы будете удивлены тем, как Photoshop может не хватать в определенных областях. Честно говоря, я понятия не имею, поддерживает ли текущая версия CC это уже. Я решил придерживаться своей вечно лицензированной PS, поэтому моя версия уже устарела.
Рейнис
13

Чтобы добавить ответ Нихала , это можно воспроизвести с помощью кисти «против стирания» в GIMP. Кисть «Удалить» может добавить или удалить альфа-канал, если изображение использует формат, который его поддерживает (удерживайте клавишу «Alt», чтобы переключиться между стиранием и стиранием).

Для Krita, вы можете сделать это: Layer > Split Alpha > Alpha into Mask. После этого вы можете скрыть или удалить канал Transparency Mask 1, который только что был создан, и вы увидите полное изображение.

Поскольку фон Windows не может иметь ничего позади, он, вероятно, просто лишает прозрачности и отображает изображение без него (быстрое и грязное 32-битное изображение до 24-битного по внешнему виду).

Blerg
источник
3

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

hildred
источник
1
Не могли бы вы попытаться найти соответствующий отрывок из спецификации? Потому что я не могу найти это в w3.org/TR/PNG . Спасибо!
MarnixKlooster ReinstateMonica