Niewidoczna warstwa obrazu PNG, która jest widoczna tylko jako tło

48

Ostatnio natrafiłem na bardzo osobliwy obraz o dziwnych właściwościach. Obraz jest w formacie PNG i pokazuje tylko prostego ptaka z przezroczystym tłem. Mój przyjaciel wysłał mi obraz z prostymi instrukcjami, aby go zapisać i ustawić jako tło.

Oryginalny obraz z samą mewa

Po ustawieniu obrazu jako mojego tła pojawia się drugi obraz pokazujący, że tak naprawdę mewa stojąca na broni:

Obraz w tle z tajną warstwą?

To na początku bardzo mnie zainteresowało naturą obrazu i sposobem jego wykonania. Otworzyłem obraz w Photoshopie i nic niezwykłego się nie pojawia - obraz jest nadal taki sam jak przezroczysta mewa, nie ma ukrytych warstw ani masek, które czyniłyby go niewidocznym. Po sprawdzeniu obrazu w Photoshopie pomyślałem, że system Windows wprowadził zmiany do pliku, gdy ustawiałem go jako tło pulpitu - po %AppData%\Microsoft\Windows\Themesprzejściu do obrazu wyglądał tak samo.

Dlaczego ten obraz pokazuje oddzielną ukrytą warstwę lub całkowicie oddzielny obraz, gdy jest ustawiony jako tło pulpitu systemu Windows w porównaniu do wyświetlania lub edytowania w Photoshopie?

Callum
źródło
6
Otwórz go za pomocą XnView, kliknij „Usuń kanał alfa”, a zobaczysz pełny obraz. Windows 7 tła konwertuje do formatu JPEG, utraty przezroczystości answers.microsoft.com/en-us/windows/forum/windows_7-desktop/...
leonbloy

Odpowiedzi:

59

Zgaduję, że to, co nazywało się „Brudną Przezroczystością” w tym artykule ze Smashing Magazine .

Zasadniczo dowolny kolor w przezroczystych plikach PNG można opisać wartością RGBA, gdzie RGB oznacza kanały czerwony, zielony i niebieski, a A oznacza alfa. „Niewidzialne” kolory mogą mieć dowolne wartości RGB + 0 Alpha, co oznacza, że ​​kolor zachowa oryginalne informacje, ale będzie renderowany jako przezroczysty, ponieważ jego alfa jest ustawione na 0.

Dlaczego chcesz przechowywać wartości RGB, gdy używana jest Alpha? Możesz uzyskać gładkie krawędzie i przezroczyste kolory - w przeciwieństwie do poszarpanych krawędzi w plikach GIF z przezroczystym tłem. Przezroczystość w formacie PNG może wynosić od 0 do 255, w plikach GIF jest w 100% przezroczysta lub nieprzezroczysta. Aby renderować coś z, powiedzmy, 50% przezroczystością, nadal musisz znać wartości RGB, stąd wartość jest przechowywana. Większość programów do edycji obrazów odrzuca te informacje RGB podczas zapisywania w pełni przezroczystego koloru, w tym Photoshop.

Nie mogę mówić o wersjach CC, ale aby zobaczyć „niewidoczne” kolory w starszych wersjach Photoshopa, potrzebujesz wtyczki. Wybrać jeden: Photofreebies lub SuperPNG . SuperPNG wydaje się nowszy i mniej zagracony.

Dlaczego sztuczka działa? Tapety muszą być nieprzezroczyste, ponieważ nie ma w nich nic „za”, przez co można je zobaczyć, prawda? Domyślam się, że Windows odrzuca informacje o kanale Alpha, ujawniając ukryte wartości RGB w tym procesie.

Rhaenys
źródło
6
właśnie wypróbowałem to, co powiedziałeś, usuwając maskę warstwy przezroczystości (kanał alfa), czego nigdy mi nie przyszło do głowy - dzięki temu mogłem odtworzyć efekt. Jest to bardzo fajny sposób tworzenia tła. Myślę, że wkrótce będę badał jego możliwości trollingu: D
Callum
15
Powiedziałbym, że to błąd w systemie Windows. Jeśli wartość alfa piksela wynosi 0, piksel jest przezroczysty i wartości RGB nie powinny mieć znaczenia. Windows powinien renderować obraz zawierający przezroczystość na czymś innym, na przykład na białym tle.
Paul
5
@Paweł. Uzgodnione, z wyjątkiem tego, że byłby to zdefiniowany kolor tła pulpitu, ten sam kolor, który jest używany, jeśli obraz nie jest rozciągnięty lub sąsiadująco i jest zbyt mały, aby wypełnić pulpit. Metaforą jest to, że tapeta znajduje się na powierzchni lub ścianie o jednolitym kolorze.
trlkly
3
Byłbym bardzo zaskoczony, gdyby Adobe Photoshop potrzebował wtyczki, aby to osiągnąć - spodziewałbym się, że będzie oferował sterowanie podobne do GIMP, np. Dostosowywanie wartości alfa za pomocą krzywych lub poziomów narzędzi (to tylko dwa z wielu sposobów aby przezroczyste części były widoczne).
Michael Schumacher
2
@MichaelSchumacher Zdziwiłbyś się, jak w niektórych obszarach może brakować Photoshopa. Szczerze mówiąc, nie mam pojęcia, czy bieżąca wersja CC już to obsługuje. Postanowiłem pozostać przy moim wiecznie licencjonowanym PS, więc moja wersja jest już prawie przestarzała.
Rhaenys
13

Aby dodać odpowiedź Nihal , można to odtworzyć za pomocą pędzla „anti-erase” w GIMP. Pędzel do wymazywania może dodawać lub usuwać kanał alfa, jeśli obraz używa formatu, który go obsługuje (przytrzymaj Alt, aby przełączać między wymazywaniem a wygładzaniem).

Dla Krita, można to zrobić: Layer > Split Alpha > Alpha into Mask. Po wykonaniu tej czynności możesz ukryć lub usunąć właśnie utworzony kanał maski przezroczystości 1, a zobaczysz pełny obraz.

Ponieważ tło Windows nie może mieć za sobą nic, prawdopodobnie po prostu usuwa przezroczystość i wyświetla obraz bez niego (szybki i brudny 32-bitowy obraz do 24-bitowego wyglądu).

Blerg
źródło
3

Jedno wyjaśnienie: nie jest to błąd, jest to określone zachowanie w specyfikacji png. W szczególności specyfikacja stwierdza, że ​​jeśli przeglądający lub konwerter nie może zrozumieć przezroczystości lub przezroczystości, nie jest odpowiedni dla kontekstu lub użycia, kanał alfa można zignorować. Ponadto specyfikacja wzywa wszystkie generatory obrazu do ustawienia przezroczystych kolorów, aby obraz był użyteczny, jeśli kanał alfa zostanie zignorowany. (moja parafraza, minęło kilka lat odkąd przeczytałem specyfikację).

Hildred
źródło
1
Czy możesz spróbować znaleźć odpowiednie fragmenty ze specyfikacji? Ponieważ nie mogę tego znaleźć na w3.org/TR/PNG . Dzięki!
MarnixKlooster ReinstateMonica