Wybór między PNG, JPEG, WebP i AVIF
Zdjęcia idą do JPEG, WebP albo AVIF. Zrzuty ekranu, logotypy, ikony, diagramy i wszystko, co ma płaskie kolory albo ostry tekst, idzie do PNG albo do bezstratnego trybu WebP. Jeśli potrzebujesz przezroczystości, JPEG odpada całkowicie. Jeśli wybierasz dziś format dla sieci i możesz serwować więcej niż jeden, w pierwszej kolejności AVIF, WebP jako opcja zapasowa, a oryginalny JPEG albo PNG dla wszystkiego, co bardzo stare.
To cała decyzja. Reszta tekstu wyjaśnia dlaczego, żebyś umiał rozpoznać, kiedy ta reguła praktyczna nie ma zastosowania.
W czym każdy format jest naprawdę dobry
| Format | Kompresja | Przezroczystość | Animacja | Najlepszy do | Najgorszy do |
|---|---|---|---|---|---|
| PNG | Bezstratna | Tak, pełny kanał alfa | Nie | Zrzutów ekranu, logotypów, ikon, grafiki kreskowej, wszystkiego z tekstem | Zdjęć, przy których pliki robią się bardzo duże |
| JPEG | Wyłącznie stratna | Nie | Nie | Zdjęć tam, gdzie liczy się powszechne wsparcie | Ostrych krawędzi, płaskiego koloru, tekstu, wszystkiego, co będziesz jeszcze edytować |
| WebP | Stratna albo bezstratna | Tak, w obu trybach | Tak | Ogólnego zastąpienia PNG i JPEG w sieci | Oprogramowania starszego niż mniej więcej z 2020 roku |
| AVIF | Stratna albo bezstratna | Tak | Tak | Najmniejszych plików ze zdjęciami, szerokiego gamutu i wysokiego zakresu dynamiki | Szybkiego kodowania i starszego oprogramowania, które go nie otworzy |
Bezstratność oznacza, że zdekodowany obraz jest bit w bit identyczny z tym, co weszło na wejście. Stratność oznacza, że koder trwale wyrzuca informację w zamian za mniejszy plik, a ty dostajesz z powrotem przybliżenie.
PNG jest bezstratny i zawsze taki będzie. Jego kompresja polega na przewidywaniu każdego piksela z sąsiadów i następnie kompresji różnic algorytmem deflate, co jest znakomite, gdy duże obszary są identyczne albo się powtarzają, i słabe, gdy każdy piksel różni się nieznacznie od sąsiada, jak na zdjęciu. Fotografia zapisana jako PNG jest często pięć do dziesięciu razy większa niż dobry JPEG z tym samym obrazem, bez żadnej widocznej korzyści.
JPEG jest stratny i nie ma kanału alfa, więc w ogóle nie potrafi zapisać przezroczystości. Dzieli obraz na bloki, przekształca każdy z nich na informację częstotliwościową i odrzuca te drobne szczegóły, na które oko jest najmniej wrażliwe. Sprawdza się to znakomicie na zdjęciach o ciągłej tonacji, a źle na twardych krawędziach, gdzie produkuje słabe poświaty i szum komarowy widoczne wokół tekstu zapisanego w JPEG.
WebP i AVIF to nowoczesne formaty kontenerowe wywodzące się z kodeków wideo. Oba działają stratnie i bezstratnie, oba obsługują pełną przezroczystość alfa i oba są wspierane przez każdą bieżącą, powszechnie używaną przeglądarkę. AVIF zwykle kompresuje mocniej niż WebP, zwłaszcza przy niskich ustawieniach jakości, i obsługuje szerokie gamuty barw oraz większe głębie bitowe. Ceną jest czas kodowania, który potrafi być zauważalnie dłuższy, oraz nieco węższe wsparcie poza przeglądarkami, w starszych aplikacjach desktopowych i narzędziach graficznych.
Przezroczystość
Prawdziwy kanał alfa, czyli osobną wartość krycia dla każdego piksela, potrafią zapisać tylko PNG, WebP i AVIF. To właśnie pozwala logotypowi usiąść czysto na tle w dowolnym kolorze.
Jeśli przekonwertujesz obraz z przezroczystością na JPEG, przezroczystość musi gdzieś się podziać. Większość narzędzi spłaszcza ją na biel, część na czerń, a dowiesz się, która, dopiero wtedy, gdy obraz pojawi się na kolorowym tle z białym prostokątem dookoła. Jeśli znasz docelowy kolor tła, spłaszcz świadomie na ten kolor, zamiast pozwalać konwerterowi zgadywać.
Kiedy kompresja stratna jest w porządku, a kiedy nie
Stratna jest w porządku przy ostatecznej publikacji treści fotograficznej w rozmiarze, w jakim naprawdę będzie wyświetlana. Przy rozsądnych ustawieniach jakości stratę naprawdę trudno dostrzec.
Stratna jest złym pomysłem, gdy:
- Obraz zawiera tekst, cienkie linie albo duże obszary płaskiego koloru. Artefakty kompresji skupiają się dokładnie na twardych krawędziach.
- Plik jest roboczym masterem, który będziesz jeszcze edytować i eksportować.
- Obraz będzie powiększany albo mocno korygowany kolorystycznie, co wzmacnia wszystko, co zrobił koder.
- Liczą się dokładne wartości pikseli, jak w pracy naukowej, medycznej albo kryminalistycznej, albo na zrzucie ekranu, z którego ktoś będzie odczytywał liczby.
Dlaczego ponowny zapis JPEG wciąż go pogarsza
Za każdym razem, gdy plik JPEG jest dekodowany i zapisywany ponownie, koder kwantyzuje dane, które już raz zostały skwantyzowane, a błąd zaokrąglenia się kumuluje. Nie chodzi o to, że jakość jest obniżana dwa razy względem oryginału; chodzi o to, że artefakty wprowadzone w pierwszym przebiegu są teraz traktowane jak prawdziwe szczegóły obrazu i z kolei przybliżane.
Zapis przy wyższym ustawieniu jakości tego nie cofa. Szczegół usunięty przy pierwszym zapisie przepadł. Ponowne kodowanie z jakością 95 na podstawie pliku o jakości 60 daje jedynie większy plik, który wiernie zachowuje artefakty jakości 60. Jeśli edytujesz obraz wielokrotnie, trzymaj master w formacie bezstratnym, a JPEG, WebP albo AVIF eksportuj na końcu.
Orientacyjne oczekiwania co do rozmiaru
To reguły praktyczne, a nie pomiary, i prawdziwe liczby zmieniają się ogromnie w zależności od zawartości obrazu. Dla typowego zdjęcia przy tej samej postrzeganej jakości spodziewaj się, że JPEG będzie punktem odniesienia, WebP wypadnie gdzieś o jedną czwartą mniejszy, a AVIF jeszcze mniejszy, przy czym różnica rośnie tym bardziej, im mocniej kompresujesz. Przy płaskiej grafice bezstratny WebP zwykle wygrywa z PNG, czasem znacząco. Szum i drobna faktura rozdymają każdy format stratny, więc ziarniste zdjęcie nigdy nie skompresuje się tak jak czyste ujęcie studyjne.
Zmień rozmiar, zanim skompresujesz
Największą pojedynczą wygraną prawie nigdy nie jest format. Są nią wymiary. Obraz serwowany w szerokości 4000 pikseli i wyświetlany w kolumnie o szerokości 800 pikseli niesie mniej więcej dwadzieścia pięć razy więcej danych pikselowych, niż potrzebuje, a żaden koder tego nie naprawi. Zmień rozmiar do mniej więcej tego, w jakim materiał będzie pokazany (podwój, jeśli celujesz w ekrany o dużej gęstości), potem wybierz format, a potem dobieraj ustawienie jakości, aż różnica stanie się ledwie zauważalna, i cofnij się o jeden stopień.