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

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

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

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

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

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

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

3 ответа

Решение

Я предполагаю, что это было названо "Грязная прозрачность" в этой статье из 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, чтобы переключиться между стиранием и стиранием).

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

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

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

Я столкнулся с этой проблемой при попытке экспортировать видео с альфа-каналом в Adobe After Effects. Он будет настаивать на экспорте скрытого фона в любой видеоформат с прозрачностью, в т.ч. ProRes 4444 alpha, Анимационный кодек с альфа- и.png-последовательностями. Скрытый фон не был виден в предварительном просмотре временной шкалы, но в After Effects я не нашел способа предотвратить его появление в экспортированном видео.

SuperPNG (плагин форматов файлов для Photoshop), как уже предлагалось, представляет собой простой способ удалить скрытый фон из одного файла.png. Однако для большой группы файлов PNG (последовательность PNG) это невозможно.

Чтобы увидеть скрытый фон в Photoshop, нажмите "Слой" / "Маска слоя" / "Из прозрачности". Теперь посмотрим на панель слоев. Скрытый фон есть, и вы можете сделать его видимым в области редактора, удалив маску.

Вы можете использовать ImageMagick для удаления скрытого фона. Вы можете сделать это для одного файла или для нескольких файлов в пакете. В командной строке Windows вы можете сделать это для обработки *.png (очень медленно, но, по крайней мере, работает):

for %f in (*.png) do C:\ImageMagick\convert.exe -alpha on -background none -flatten "%f" "fixed_%f.png"
Другие вопросы по тегам