Notatki zespołu o rzemiośle, formatach i drobnych decyzjach stojących za dobrym wynikiem.
Dlaczego fotograficzne PNG są tak duże
Bezstratna kompresja PNG zapisuje każdy piksel dokładnie. Dla obrazu fotograficznego z milionami subtelnie zmieniających się tonów daje to bardzo duże pliki, bo prawie nie ma czego deduplikować ani przewidywać między sąsiednimi pikselami. Typowe zdjęcie 1600x1200 zapisuje się jako PNG dużego rozmiaru. Ten sam obraz jako JPEG przy jakości 85 mieści się w 200 do. Ta różnica pochodzi z dyskretnej transformacji kosinusowej w sercu JPEG, która działa w blokach 8x8 pikseli, odrzuca szczegóły wysokiej częstotliwości, na które ludzki układ wzrokowy jest najmniej czuły, i zwięźle koduje pozostałe współczynniki. Wynikiem jest znacznie mniejszy plik dla każdego obrazu z ciągłą zmianą tonów, czyli właściwie każdego zdjęcia. Gwarancja bezstratności PNG jest cenna dla grafiki i plików roboczych, ale to zły pojemnik dla fotografii gotowych do udostępnienia.
Przezroczystość i kanał alfa
PNG obsługuje pełny 8-bitowy obsługa przezroczystości, co znaczy, że każdy piksel może być od całkowicie przezroczystego po całkowicie nieprzezroczysty. JPG nie definiuje żadnej informacji o alfie, ponieważ jego pojemnik nie ma pola na przezroczystość na piksel. Gdy mechanizm obrazu platformy zapisuje PNG jako JPEG, najpierw składa obsługa przezroczystości na kolorze tła przed zapisem. Tło domyślne to biel, dlatego przezroczyste obszary PNG wyglądają na białe w wynikowym JPG. Kluczowe jest to, że żadne narzędzie nie stworzy przezroczystego JPG, bo format nie obsługuje tego pojęcia. Jeśli zachowanie wycinka jest ważne, odpowiedzią jest WebP albo zachowanie PNG. RoundCut wybiera biel jako kolor spłaszczenia, bo pasuje do tła większości dokumentów i list produktów.
Zmierzona wydajność zapisu
Zmierzone na Chrome 148, komputer Linux, z użyciem ścieżki zapisu JPEG platformy. Obraz 400x300 (0,12 MP) zapisuje się w około 10 do 15 ms. Obraz 1024x768 (0,78 MP) zapisuje się w 13 do 20 ms. Obraz 3840x2160 (8 MP) zapisuje się w około 1,4 sekundy. Obraz 8000x6000 (48 MP) zapisuje się w około 1,5 sekundy. Zapis JPEG w przeglądarce jest znacznie szybszy niż zapis PNG dla tego samego obrazu i o wiele szybszy niż AVIF, który potrzebuje osobnego modułu i może zająć 25 sekund przy 48 MP nawet na komputerowym Chrome. Ta przewaga prędkości czyni PNG na JPG jedną z najszybszych ścieżek konwersji w tej rodzinie, bez kosztu dodatkowego pobierania, bo zapis JPEG jest wbudowany w każdą przeglądarkę.
EXIF i obsługa metadanych
Proces ponownego zapisu usuwa metadane EXIF, IPTC i XMP z wynikowego JPG we wszystkich przeglądarkach. Oznacza to, że współrzędne lokalizacji, model aparatu, data wykonania, nota o prawach autorskich i wszelkie pola własne obecne w źródłowym PNG zostają usunięte. Profile kolorów ICC idą inną ścieżką, gdzie Chrome i Safari zachowują profil ICC sRGB w wyniku, a Firefox usuwa go całkowicie. Praktycznym efektem jest to, że przekonwertowany JPG jest bezpieczny w sRGB we wszystkich przeglądarkach, ale jeśli twój PNG był oznaczony profilem szerokiej gamy, jak Display-P3 lub Adobe RGB, ten znacznik nie przetrwa w Firefoksie. Jeśli zachowanie pełnych metadanych jest wymogiem twojego przepływu pracy, edytuj je dedykowanym narzędziem po konwersji. Dla typowego użytku sieciowego i udostępniania usunięcie metadanych jest korzystne, bo trochę zmniejsza plik i usuwa dane GPS ze zdjęć.
Kiedy artefakty JPG są widoczne
Kompresja JPEG działa na blokach 8x8 pikseli. Gdy źródłowy obraz zawiera twarde przejście między dwoma bardzo różnymi kolorami w jednym bloku, krok kompresji JPEG przybliża to przejście ograniczonymi współczynnikami częstotliwości. Wynikiem jest dzwonienie, aureola jaśniejszych lub ciemniejszych pikseli wokół krawędzi. W fotografiach jest to niewidoczne, bo krawędzie nigdy nie są idealnie ostre, a zdjęcia z prawdziwego świata niosą mikrozmienność, do której to przybliżenie dobrze pasuje. W zrzutach ekranu, logo, elementach interfejsu z twardymi obramowaniami, tekście lub sąsiadujących płaskich blokach koloru dzwonienie jest wyraźnie widoczne przy każdym ustawieniu jakości, bo te elementy to dokładnie taki sygnał, z którym algorytm radzi sobie słabo. Rada jest prosta, nie konwertuj zrzutów ekranu, logo ani obrazów pełnych tekstu na JPG. Zostaw je jako PNG albo użyj WebP dla mniejszego pliku, który całkiem omija problem.
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. Otwórz 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.