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.
Po ustawieniu obrazu jako mojego tła pojawia się drugi obraz pokazujący, że tak naprawdę mewa stojąca na broni:
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\Themes
przejś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?
Odpowiedzi:
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.
źródło
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).
źródło
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ę).
źródło