Jak nakazać Photoshopowi zachowanie koloru RGB w pełni przezroczystych pikseli podczas eksportowania jako PNG?

12

Mam problem z tym, jak Photoshop obsługuje całkowicie przezroczyste piksele podczas eksportowania jako PNG, co oznacza, że ​​kanały kolorów czerwonego, zielonego i niebieskiego dowolnych całkowicie przezroczystych pikseli są zapisywane jako 0 zamiast koloru zdefiniowanego w Photoshopie .

Na przykład: Mam plik PSD z maską warstwy. Niektóre kolorowe fragmenty obrazu są całkowicie przezroczyste przez maskę warstwy, ale nadal chcę, aby oryginalne kanały kolorów były zapisywane w pliku PNG zamiast tylko 0.

(Tak, sama PNG ma zawierać dane RGB nawet całkowicie przezroczystych pikseli. Jest to problem, z Photoshopa, a nie PNG).

Jeśli zastanawiasz się, dlaczego posiadanie danych koloru ma znaczenie, gdy piksel jest całkowicie przezroczysty, oto kilka przykładów użycia:

  • PNG jest próbkowany w wyższej rozdzielczości niż jest zapisywany, a próbkowane wartości są interpolowane między sąsiednimi pikselami. Może to powodować słabą czarną „aureolę” wokół obrazu, jeśli interpolacja nie jest ważona przez przezroczystość. (W moim przypadku próbkowanie w górę odbywa się na GPU, który ze względu na wydajność nie ma wpływu na przezroczystość).
  • Kanały czerwony, zielony, niebieski i alfa w pliku PNG są wykorzystywane do celów innych niż przechowywanie informacji o kolorze. (W moim przypadku używam wszystkich czterech kanałów do przechowywania danych potrzebnych do obliczeń oświetlenia w czasie rzeczywistym).

Dzięki za pomoc!

EDYTOWAĆ

Spróbuję wyjaśnić problem, który mam z użyciem pomocy wizualnych. Pokazywanie przezroczystych rzeczy jest trudne, ale mam nadzieję, że to wyjaśnia mój problem:

Mam plik PSD z jedną warstwą i maską warstwy. Warstwa kolorów wygląda następująco:

wprowadź opis zdjęcia tutaj

Jego maska ​​warstwy wygląda następująco:

wprowadź opis zdjęcia tutaj

Jeśli wyeksportuję ten plik PSD jako PNG, otrzymam to:

wprowadź opis zdjęcia tutaj

(Białe obszary są rzeczywiście przezroczyste; wyglądają po prostu na białym tle).

Być może zastanawiasz się: na czym polega problem? To wygląda dobrze! Problem polega na tym, że informacje o kolorze są przechowywane w tych przezroczystych pikselach. Używając narzędzia do usuwania danych krycia z PNG, pozostawiając nienaruszony RGB, możemy zobaczyć informacje o kolorze, które Photoshop zapisuje do przezroczystych pikseli:

wprowadź opis zdjęcia tutaj

Jak widać, Photoshop zastąpił informacje o kolorze w przezroczystych pikselach kolorem czarnym. Natomiast po usunięciu danych nieprzezroczystości z pliku PNG chcę, aby wyglądał dokładnie jak oryginalna warstwa kolorów:

wprowadź opis zdjęcia tutaj

Walt D.
źródło
Pokazanie przykładu tego, czego doświadczasz, może być bardziej pomocne. Głównie dlatego, że w przezroczystej części PNG nie powinno być żadnych informacji o kolorze. Jak oszczędzasz PNG? Czy używasz „Zapisz dla Internetu” i czy masz zaznaczoną „przezroczystość”? Wiem, że to brzmi prosto, ale nie jestem pewien, w jaki sposób osiągasz wyniki.
ErickP
Tak, nie opublikowałem żadnych przykładowych obrazów, ponieważ nie można zobaczyć problemu (bez ładowania PNG w programie do malowania i wyłączania przezroczystości), ponieważ problem dotyczy tylko pikseli, które są całkowicie przezroczyste. Zobaczę, czy uda mi się wyobrazić sobie, o czym mówię.
Walt D
Ale kiedy mówisz „nie powinno być żadnych informacji o kolorze w przezroczystej części PNG”, tak naprawdę chcę , aby były informacje o kolorze w przezroczystej części PNG. Wiem, że to brzmi dziwnie, ale są pewne zastosowania, takie jak dwa, o których wspomniałem powyżej. (I tak, PNG całkowicie obsługuje informacje o kolorze w jego przezroczystych regionach; używam ich cały czas w proceduralnie generowanych PNG. Problem polega na tym, jak Photoshop zapisuje przezroczyste regiony w PNG.)
Walt D
1
@ DA01 Nie sądzę, że jest to tak duży błąd, jak optymalizacja, którą robi Photoshop (pliki PNG o jednolitych kolorach zajmują mniej miejsca na dysku), która psuje mój szczególny przypadek użycia.
Walt D
1
@ErickP Dzięki za próbę pomocy, naprawdę to doceniam. :) Na szczęście GPU są obecnie dość standardowe, a tego rodzaju skalowanie (znane jako interpolacja dwuliniowa) działa dokładnie tak samo we wszystkich, więc każde rozwiązanie, które ostatecznie znajdę, powinno działać uniwersalnie.
Walt D

Odpowiedzi:

10

Znalazłem rozwiązanie! SuperPNG wtyczki zachowa wartości RGB dla przezroczystych pikseli Dopóki opuścić „Clean transparent” opcja zaznaczona.

Walt D.
źródło
Jestem ciekawy, czy istnieje Photoshop CC odpowiadający SuperPNG?
Marcel Wilson