Notatki zespołu o rzemiośle, formatach i drobnych decyzjach stojących za dobrym okrągłym przycięciem.
Dlaczego fotograficzne PNG są tak duże
PNG obiecuje zapisać każdy piksel, nie tracąc żadnego, a ta obietnica drogo kosztuje na zdjęciu. Przy milionach łagodnie przesuwających się tonów kompresor nie ma prawie czego przewidywać ani zwijać, więc plik puchnie. Banalne zdjęcie 1600x1200 może siedzieć na 3 do 5 MB jako PNG, lecz ten sam obraz jako JPEG przy jakości 85 mieści się w 200 do 400 KB. Różnica sprowadza się do transformacji kosinusowej, na której wspiera się JPEG, która kroi obraz na bloki 8x8, zrzuca szczegół wysokiej częstotliwości, który oko ledwie rejestruje, i ciasno pakuje to, co zostało. Materiał ciągłego tonu, czyli niemal cała fotografia, kurczy się dramatycznie. Doskonała wierność PNG zarabia na swoje na płaskiej grafice i pracach w toku, ale to po prostu zła osłona dla zdjęcia, które zamierzasz udostępnić.
Przezroczystość i kanał alfa
8-bitowy kanał alfa pozwala PNG zapisać dowolny poziom krycia na piksel, od całkiem prześwitującego po całkiem lity. JPG nie oferuje takiego pola, więc przezroczystość nie ma gdzie mieszkać. Gdy mechanizm obrazu odbudowuje PNG jako JPEG, najpierw kładzie obraz na wybranej podkładce, a ta podkładka domyślnie jest biała, co dokładnie jest powodem, dla którego prześwitujące obszary czytają się potem na biało. Wniosek jest tępy, przezroczysty JPG nie może istnieć, bo format nie ma o nim pojęcia. Gdy wycinek musi przetrwać, WebP lub nietknięty PNG to twoje jedyne trasy. Araluma zatrzymuje się na bieli jako wypełnieniu, bo zlewa się z dokumentami, slajdami i kartami sklepowymi, gdzie te JPG najczęściej osiadają.
Zmierzona wydajność zapisu
Wszystkie te liczby pochodzą z Chrome 148 na komputerze z Linuksem, wspierając się na własnym zapisie JPEG przeglądarki. Przy 0,12 MP miniatura 400x300 owija się w około 10 do 15 ms. Podbij do 0,78 MP, klatka 1024x768, a siedzi blisko 13 do 20 ms. Zdjęcie 8 MP w 3840x2160 potrzebuje mniej więcej 1,4 sekundy, a nawet potwór 48 MP w 8000x6000 prosi tylko o około 1,5 sekundy. Pisanie JPG w ten sposób zgrabnie wyprzedza pisanie PNG tego samego obrazu i całkowicie ubiega AVIF, który musi załadować osobny moduł i może zgrzytać 25 sekund na tym obrazie 48 MP nawet na komputerze. Razem wzięte, to jedna z najszybszych tras gdziekolwiek w rodzinie konwersji, i nic dodatkowego nie kosztuje, by ją pobrać, bo zapisywacz JPEG już mieszka w każdej przeglądarce.
EXIF i obsługa metadanych
Odbudowa obrazu czyści jego znaczniki EXIF, IPTC i XMP z powstałego JPG w każdej przeglądarce, co wymiata współrzędne GPS, korpus aparatu, znacznik czasu ujęcia, tekst praw autorskich i wszelkie pola własne, które niósł PNG. Profile kolorów ICC biorą osobną trasę, gdzie Chrome i Safari trzymają profil sRGB na wyjściu, a Firefox ścina go razem z resztą. Więc JPG jest bezpieczny w sRGB wszędzie, ale znacznik szerokiej gamy, jak Display-P3 lub Adobe RGB, nie przejdzie przez Firefoksa. Jeśli twój przepływ zależy od utrzymania wszystkich tych metadanych, zarządzaj nimi dedykowanym narzędziem potem. Dla codziennej sieci i udostępniania utrata znaczników jest mile widziana, przycinając trochę wagi i wyciągając dane lokalizacji z twoich zdjęć.
Kiedy artefakty JPG są widoczne
JPEG rozumuje w blokach 8x8. Upuść twardy skok między dwoma bardzo różnymi kolorami wewnątrz jednego bloku, a kompresja JPEG może go tylko naszkicować garstką członów częstotliwości, zostawiając dzwonienie, słabą aureolę jaśniejszych lub ciemniejszych pikseli obejmującą krawędź. Fotografie kryją to dobrze, bo ich krawędzie nigdy nie są ostre jak brzytwa, a otaczająca mikrozmienność maskuje przybliżenie. Lecz zrzuty ekranu, logo, pudełka z czystymi obramowaniami, litery lub sąsiadujące płyty płaskiego koloru obnażają je przy każdej jakości, bo to dokładnie ten sygnał, z którym matematyka się mocuje. Zasada pisze się sama, trzymaj zrzuty ekranu, logo i grafikę pełną tekstu z dala od JPG. Zostaw je w PNG albo przejdź na WebP po chudy plik, który omija dzwonienie całkiem.
Prywatność i gdzie ląduje praca
To, gdzie ląduje praca, zależy od liczby. Przy pojedynczym obrazie nic nie opuszcza przeglądarki, i możesz sprawdzić to na żywo w kilka sekund. Otwórz DevTools w Chrome, przejdź do panelu Sieć, filtruj po XHR i Fetch i przekonwertuj plik. Podczas kodowania nic się nie pojawia. Przy dwóch lub więcej Araluma wysyła je na nasz serwer, który konwertuje, łączy wynik i zwraca link do pobrania. Ten link i przekonwertowane pliki są usuwane w około 2 godziny. Ścieżka pojedynczego obrazu trzyma wszystko na urządzeniu, poza siecią, podczas gdy partia zamienia to na domknięcie wielu plików naraz. Przy zrzucie czegoś prywatnego lub zdjęciu oznaczonym twoją lokalizacją konwersja pojedynczo trzyma to na twojej maszynie, prawdziwa różnica, nie slogan.