Notatki zespołu o rzemiośle, formatach i drobnych decyzjach stojących za dobrym wynikiem.
Bezstratny kontener, co przechowuje PNG
PNG opiera się na bezstratnym algorytmie DEFLATE. Zapisuje wartości RGBA każdego piksela dokładnie tak, jak je otrzymał, stosuje odwracalny filtr do każdej linii skanowania, a następnie ściska całość wariantem zlib. Bezstratny oznacza tu, że rozpakowane wartości pikseli są bajt po bajcie identyczne z pierwotnymi. W przypadku JPG na PNG pierwotne wartości to piksele zwracane, gdy przeglądarka dekoduje JPEG. Te zdekodowane piksele już niosą wszystkie przybliżenia, jakie JPEG wprowadził przy swoim pierwotnym zapisie, więc PNG sumiennie przechowuje przybliżone piksele, a nie rzeczywistą scenę. Po pomiarach JPEG o wadze przy 1024x768 dekoduje się do około jako PNG, a JPEG o wadze przy 3840x2160 rośnie do mniej więcej . Te mnożniki trzymają się z grubsza w różnych typach treści, ponieważ stosunek zależy od rozdzielczości, a nie od poziomu jakości JPEG. Bezstratny kontener jest cenny przez to, czemu zapobiega, dalszej degradacji, a nie przez to, co przywraca.
Dlaczego jakości JPEG nie da się odzyskać
Kompresja JPEG odrzuca informację na stałe. Proces zapisu stosuje dyskretną transformację kosinusową do bloków 8x8 pikseli, kwantyzuje uzyskane współczynniki częstotliwości do mniejszego zbioru i przechowuje te skwantowane wartości. Krok kwantyzacji jest jednokierunkowy, skoro współczynnika, który wynosił 47 i został zaokrąglony do 50, nie da się później cofnąć do 47, a żaden zapis pierwotnej wartości nie przetrwa w pliku. Gdy przeglądarka dekoduje JPEG, rekonstruuje piksele ze skwantowanych współczynników, które są przybliżeniami pierwotnych wartości. Zapisanie tych przybliżonych pikseli jako PNG daje bezstratny zapis przybliżeń, więc PNG jest doskonałą reprezentacją zdegradowanego obrazu. To nie ograniczenie PNG ani tego narzędzia, to fundamentalna właściwość kompresji stratnej, gdzie informacja odrzucona przy zapisie przepada. Poprawa jakości JPEG wymaga rozpoczęcia od nieskompresowanego oryginału albo pliku RAW.
Zmierzony wzrost rozmiaru pliku
Stosunek rozmiarów od JPG do PNG zmienia się zależnie od treści obrazu, ale podąża za przewidywalnym wzorcem. Obrazy fotograficzne ze złożoną zmiennością tonalną rosną najbardziej, ponieważ transformacja JPEG jest dostrojona właśnie do takiej treści i osiąga wysokie stopnie kompresji, podczas gdy bezstratna kompresja PNG nie dorówna tym stopniom na zaszumionych danych pikseli. Pomiary testowe tego narzędzia pokazują, że zdjęcie JPEG o wadze przy 1024x768 daje PNG o wadze , mniej więcej sześciokrotny wzrost, a zdjęcie JPEG o wadze przy 3840x2160 daje PNG o wadze , mniej więcej 3,3 raza więcej. Dla materiału płaskiego kolorystycznie, jak zrzuty ekranu i ikony, JPEG od początku słabo pasuje do treści i jego pliki bywają większe przy równej jakości, więc PNG tej samej treści rośnie mniej gwałtownie. Praktyczny wniosek jest prosty, jeśli rozmiar wyjściowego pliku ma dla Ciebie znaczenie, przekształcenie JPG na PNG pcha Cię w złą stronę.
Przezroczystość, możliwość kontra zawartość
PNG obsługuje 8-bitowy przezroczystość jako cechę kontenera, gdzie plik może zawierać wartości krycia na każdy piksel w zakresie od 0 (w pełni przezroczysty) do 255 (w pełni nieprzezroczysty). Gdy JPG jest przekształcany na PNG przez zapis poprzez wbudowany silnik obrazów platformy, wynikowy PNG jest ustawiany jako w pełni nieprzezroczysty, z każdym pikselem przy wartości alfa 255, ponieważ źródłowy JPG od początku nie miał żadnej informacji o przezroczystości. Format PNG jest gotów przechować przezroczystość, plik po prostu żadnej nie zawiera, bo żadnej nie było w źródle. Dodanie przezroczystości do obrazu wymaga osobnego przetwarzania, albo maskowania tła w edytorze, albo zautomatyzowanego kroku usuwania tła. Narzędzie do usuwania tła wyuczone rozpoznawać obiekt potrafi dać PNG z prawdziwą alfą, zerując wartości alfa na pikselach tła po przekształceniu.
Obsługa metadanych EXIF
Potok zapisu usuwa metadane EXIF, IPTC i XMP z wyjściowego PNG w każdej przeglądarce. Oznacza to, że współrzędne GPS, model aparatu, data wykonania, ciągi praw autorskich i wszelkie własne pola XMP obecne w źródłowym JPG zostają usunięte. Profile kolorów ICC idą nieco inną drogą, gdzie Chrome i Safari zachowują znacznik profilu ICC sRGB na wyjściu, a Firefox usuwa go razem z całą resztą metadanych. Praktyczny rezultat to wyjście bezpieczne w sRGB w różnych przeglądarkach, ale profile o szerokiej gamie, jak Display-P3 czy Adobe RGB, giną w Firefoksie. Dla większości zastosowań sieciowych i przy udostępnianiu usunięcie metadanych pomaga, skoro nieco zmniejsza rozmiar wyjścia i usuwa dane o lokalizacji ze zdjęć. Dla profesjonalnej fotografii lub procesów archiwalnych, gdzie osadzone metadane muszą zostać zachowane, prowadź łańcuch metadanych dedykowanym narzędziem przed przekształceniem formatu lub po nim.
Prywatność w praktyce
To, gdzie odbywa się konwersja, zależy od liczby plików. Przy pojedynczym obrazie żadne dane nie opuszczają przeglądarki, i da się to sprawdzić w czasie rzeczywistym. Lista pozostaje pusta podczas kodowania. Przy dwóch lub więcej plikach RoundCut wysyła je na nasz serwer, który konwertuje, pakuje wynik i zwraca link do pobrania. Ten link i przekonwertowane pliki są usuwane w około 2 godziny. Ścieżka pojedynczego obrazu działa w całości na twoim urządzeniu, poza siecią, podczas gdy ścieżka partii zamienia to na wygodę konwersji wielu plików naraz. Przy obrazach z wrażliwą treścią, jak zrzut osobistego dokumentu lub zdjęcie z danymi lokalizacji, konwersja pojedynczo trzyma wszystko lokalnie.