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


48

Нещодавно я натрапив на дуже своєрідний образ, із дивними властивостями. Зображення у форматі PNG і просто показує просту птицю з прозорим фоном. Мій друг надіслав мені зображення простими інструкціями, щоб зберегти його та встановити як фоновий фон.

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

Після встановлення зображення як мого фону з'являється друге зображення, яке показує, що насправді чайка стоїть на зброї:

Фонове зображення з таємним шаром?

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

Чому на цьому зображенні відображається окремий прихований шар або зовсім окреме зображення, якщо його встановлено як фон робочого столу Windows порівняно з переглядом чи редагуванням у Photoshop?


6
Відкрийте його за допомогою XnView, натисніть "Видалити альфа-канал", і ви побачите повне зображення. Windows 7 перетворює фони в JPEG, втрачаючи прозорі відповіді.microsoft.com/ en-us
windows/

Відповіді:


59

Я здогадуюсь, що це називалося "брудна прозорість" у цій статті журналу Smashing .

По суті, будь-який колір прозорих PNG може бути описаний значенням RGBA, де RGB означає червоний, зелений і синій канали, а A - альфа. Кольори "невидимих" можуть мати будь-які значення RGB + 0 Альфа, тобто колір зберігатиме вихідну інформацію, але відображається як прозорий, оскільки його альфа встановлена ​​на 0.

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

Я не можу говорити про версії CC, але щоб побачити "невидимі" кольори у старих версіях Photoshop, вам знадобиться плагін. Виберіть один: Photofreebies або SuperPNG . SuperPNG здається більш свіжим і менш захаращеним.

Чому трюк працює? Шпалери повинні бути непрозорими, тому що немає нічого "позаду", щоб їх можна було показати, правда? Я здогадуюсь, що Windows відкидає інформацію про альфа-канал, розкриваючи приховані значення RGB в процесі.


6
Я просто спробував те, що ви сказали, знявши маску шару прозорості (альфа-канал), що мені ніколи не приходило в голову - роблячи це, я зміг повторити ефект. Це дуже класний спосіб створення фонів, я думаю, що я дуже скоро вивчу його можливості для тролінгу: D
Callum

15
Я б сказав, що це помилка в Windows. Якщо значення альфа пікселя дорівнює 0, то піксель є прозорим і значення RGB не повинні мати значення. Windows має надати зображення, яке містить прозорість поверх чогось іншого, наприклад білого тла.
Пол

5
@Paul. Погоджено, за винятком того, що це буде визначений колір фону для робочого столу, той самий колір, який використовується, якщо зображення не розтягується або викладається плиткою і занадто мало, щоб заповнити робочий стіл. Метафора полягає в тому, що шпалери розташовані поверх поверхні або стіни суцільного кольору.
trlkly

3
Я був би дуже здивований, якби Adobe Photoshop потребував плагіну, щоб досягти цього - я б очікував, що він пропонує керування, подібні GIMP, наприклад, коригування значень альфа за допомогою кривих або рівнів інструментів (це лише два з багатьох способів щоб прозорі частини були видні).
Майкл Шумахер

2
@MichaelSchumacher Ви були б здивовані тим, як Photoshop може бракувати в певних областях. Чесно кажучи, я не маю уявлення, чи підтримує його нинішня версія CC. Я вирішив дотримуватися свого постійного ліцензованого ПС, тому моя версія вже майже застаріла.
Rhaenys

13

Щоб додати відповідь Ніхала , це можна відтворити, використовуючи пензлик "проти стирання" в GIMP. Кисть "Стерти" може додавати або видаляти альфа-канал, якщо зображення використовує формат, який його підтримує, (утримуйте клавішу Alt, щоб поміняти місцями між стиранням та проти стирання).

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

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


3

Один момент уточнення: це не помилка, це вказана поведінка в специфікації png. Зокрема, специфікація зазначає, що якщо глядач або конвертер не може зрозуміти прозорість або прозорість, не підходить контексту або використовувати альфа-канал, може бути ігноровано. Далі специфікація вимагає від усіх генераторів зображень встановити прозорі кольори, щоб зображення було корисним, якщо альфа-канал ігнорується. (мій переказ, я пройшов пару років, як прочитав специфікацію.)


1
Чи можете ви спробуйте знайти відповідний уривок із специфікації? Тому що я не можу знайти це у w3.org/TR/PNG . Дякую!
MarnixKlooster ReinstateMonica
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.