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

5684
Callum Carmicheal

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

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

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

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

Прямая ссылка на изображение.

48
Откройте его с помощью XnView, нажмите «Удалить альфа-канал», и вы увидите полное изображение. Windows 7 преобразует фоны в JPEG, теряя прозрачность https://answers.microsoft.com/en-us/windows/forum/windows_7-desktop/transparent-gif-as-desktop-background-picture/f4e1def4-05f0-41a3-807c -3c908cee2f83? страница = 1 leonbloy 6 лет назад 6
к сожалению ссылка была мертва phuclv 5 лет назад 0

3 ответа на вопрос

59
Nihal

Я предполагаю, что это было названо «Грязная прозрачность» в этой статье от Smashing Magazine .

По сути, любой цвет в прозрачных PNG может быть описан значением RGBA, где RGB обозначает красный, зеленый и синий каналы, а A обозначает альфа. «Невидимые» цвета могут иметь любые значения RGB + 0 Альфа, что означает, что цвет сохранит исходную информацию, но будет отображаться как прозрачный, поскольку его альфа установлен на 0.

Почему вы хотите хранить значения RGB при использовании Alpha? Таким образом, вы можете получить плавные края и прозрачные цвета - в отличие от зубчатых краев в GIF-изображениях с прозрачным фоном. Прозрачность в PNG может быть от 0 до 255, в GIF-файле она либо на 100% прозрачна, либо непрозрачна. Чтобы отобразить что-то, скажем, с 50% прозрачностью, вам все равно нужно знать значения RGB, следовательно, значение сохраняется. Большинство программ для редактирования изображений отбрасывают эту информацию RGB при сохранении полностью прозрачного цвета, включая Photoshop.

Я не могу говорить о версиях CC, но чтобы увидеть «невидимые» цвета в старых версиях Photoshop, вам понадобится плагин. Выберите один: фото бесплатно или SuperPNG . SuperPNG кажется более новым и менее загруженным.

Почему трюк работает? Обои должны быть непрозрачными, потому что за ними ничего не видно, верно? Я предполагаю, что Windows отбрасывает информацию об альфа-канале, выявляя скрытые значения RGB в процессе.

Я просто попробовал то, что вы сказали, удалив маску слоя прозрачности (альфа-канал), что мне никогда не приходило в голову - благодаря этому я смог повторить эффект. Это очень крутой способ создания фонов, я думаю, что очень скоро буду изучать его возможности троллинга: D Callum Carmicheal 6 лет назад 5
Я бы сказал, что это ошибка в Windows. Если альфа-значение пикселя равно 0, то пиксель является прозрачным, и значения RGB не должны иметь значения. Windows должна отобразить изображение, которое содержит прозрачность поверх чего-то другого, например, на белом фоне. Paul 6 лет назад 15
@Павел. Согласен, за исключением того, что это будет определенный цвет фона для рабочего стола, тот же цвет, который используется, если изображение не растянуто или не мозаично и слишком мало для заполнения рабочего стола. Метафора заключается в том, что обои находятся поверх поверхности или стены сплошного цвета. trlkly 6 лет назад 5
Я был бы очень удивлен, если Adobe Photoshop нужен плагин для достижения этой цели - я ожидаю, что он будет предлагать элементы управления, подобные GIMP, например, корректировать альфа-значения с помощью инструментов кривых или уровней (это только два из многих способов сделать прозрачные части видимыми). Michael Schumacher 6 лет назад 3
@MichaelSchumacher Вы будете удивлены тем, как Photoshop может не хватать в определенных областях. Честно говоря, я понятия не имею, поддерживает ли текущая версия CC это уже. Я решил придерживаться своей бессрочной лицензии PS, поэтому моя версия уже устарела. Nihal 6 лет назад 2
@Paul Однако вам не нужно устанавливать альфа на 0. Альфа 1 также невероятно прозрачна, и она избежит большинства функций автоматического удаления. T. Sar 6 лет назад 2
Чтобы продолжить то, что сказал @CallumCarmicheal, в Photoshop перейдите в Layer -> Layer Mask -> From Transparency и затем Layer -> Layer Maker - Disable. Chris Haas 6 лет назад 1
@Paul Другой ответ предполагает, что это поведение разрешено спецификацией PNG. Если это так, то это кажется ошибкой в ​​спецификации. Marnix Klooster 6 лет назад 1
13
Blerg

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

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

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

3
hildred

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

Не могли бы вы попробовать найти соответствующий отрывок из спецификации? Потому что я не могу найти это в https://www.w3.org/TR/PNG/. Спасибо! Marnix Klooster 6 лет назад 1