Kompresja Obraz贸w WebP
Nowoczesny format obraz贸w zoptymalizowany pod k膮tem sieci z kompresj膮 stratn膮 i bezstratn膮.
Dylemat Nowoczesnej Sieci: Potrzeba Nowego Formatu Obraz贸w
Przez dziesi臋ciolecia internet opiera艂 si臋 na tr贸jcy format贸w graficznych: JPEG dla fotografii, PNG dla grafik z przezroczysto艣ci膮 i GIF dla prostych animacji. Ka偶dy z nich by艂 mistrzem w swojej dziedzinie, ale 偶aden nie potrafi艂 wszystkiego. Stratna kompresja JPEG by艂a fantastyczna dla zdj臋膰, ale tworzy艂a brzydkie artefakty wok贸艂 ostrych linii w grafikach. PNG by艂 idealny dla logo i ikon dzi臋ki bezstratnej kompresji i przezroczysto艣ci, ale tworzy艂 bardzo du偶e pliki dla tre艣ci fotograficznych. GIF by艂 niekwestionowanym kr贸lem animacji, ale by艂 ograniczony do zaledwie 256 kolor贸w i brakowa艂o mu prawdziwej przezroczysto艣ci.
W miar臋 jak internet ewoluowa艂 w kierunku bogatszych, szybszych i bardziej mobilnych do艣wiadcze艅, ograniczenia tych starszych format贸w stawa艂y si臋 coraz bardziej widoczne. Szybko艣膰 艂adowania strony sta艂a si臋 kluczowym czynnikiem dla do艣wiadczenia u偶ytkownika i ranking贸w w wyszukiwarkach, a obrazy cz臋sto by艂y najci臋偶szymi elementami strony internetowej. 艢wiat potrzebowa艂 nowego, wszechstronnego formatu obraz贸w, kt贸ry m贸g艂by po艂膮czy膰 najlepsze cechy swoich poprzednik贸w: wysok膮 kompresj臋 JPEG, bezstratn膮 wierno艣膰 i przezroczysto艣膰 alfa formatu PNG oraz mo偶liwo艣ci animacji GIF, wszystko to w jednym, zoptymalizowanym pakiecie. W 2010 roku Google podj臋艂o to wyzwanie i wprowadzi艂o .
WebP: Rodzina Algorytm贸w w Jednym Kontenerze
Genialno艣膰 WebP polega na tym, 偶e nie jest to pojedynczy algorytm kompresji. Jest to elastyczny format kontenera, oparty na , kt贸ry mo偶e przechowywa膰 dane obrazu skompresowane na kilka r贸偶nych sposob贸w. To czyni go "scyzorykiem szwajcarskim" dla obraz贸w internetowych, pozwalaj膮c programistom wybra膰 najlepsz膮 metod臋 kompresji dla danego obrazu, a nawet 艂膮czy膰 metody w jednym pliku.
Pojedynczy plik mo偶e by膰 jednym z nast臋puj膮cych:
- Obraz Stratny: Ten tryb bezpo艣rednio konkuruje z JPEG, cz臋sto osi膮gaj膮c o 25-34% mniejszy rozmiar pliku przy tej samej jako艣ci wizualnej. U偶ywa zaawansowanej metody kompresji predykcyjnej opartej na kodeku wideo VP8.
- Obraz Bezstratny: Ten tryb konkuruje z PNG. Kompresja bezstratna WebP zazwyczaj jest w stanie osi膮gn膮膰 o 26% mniejszy rozmiar pliku ni偶 PNG. U偶ywa zupe艂nie innego zestawu zaawansowanych technik do idealnego odtwarzania pikseli.
- Obraz z Przezroczysto艣ci膮: WebP obs艂uguje pe艂ny 8-bitowy kana艂 alfa, zapewniaj膮c 256 poziom贸w przezroczysto艣ci, tak jak PNG. Kluczow膮 zalet膮 jest to, 偶e mo偶e 艂膮czy膰 stratnie skompresowany kana艂 kolor贸w (RGB) z idealnie bezstratnym kana艂em alfa, co jest trybem hybrydowym znacznie bardziej wydajnym ni偶 to, co mog膮 zaoferowa膰 starsze formaty.
- Obraz Animowany: WebP obs艂uguje animacje, dzia艂aj膮c jako nowoczesny nast臋pca GIF. Mo偶e 艂膮czy膰 wiele klatek z cechami tryb贸w stratnych i bezstratnych, pozwalaj膮c na animacje z 24-bitowym kolorem i przezroczysto艣ci膮, wszystko to przy u艂amku rozmiaru pliku r贸wnowa偶nego GIFa.
Analiza 1: Stratna Kompresja WebP
Metoda stratnej kompresji WebP wywodzi si臋 z kompresji wewn膮trzklatkowej kodeka wideo VP8, tej samej technologii, kt贸ra nap臋dza wideo WebM. Dzieli podstawow膮 struktur臋 opart膮 na blokach z JPEG, ale u偶ywa bardziej zaawansowanej techniki zwanej kodowaniem predykcyjnym do redukcji danych. Zamiast kodowa膰 surowe dane pikseli bloku, najpierw pr贸buje przewidzie膰, jak ten blok b臋dzie wygl膮da艂 na podstawie jego s膮siad贸w, a nast臋pnie koduje tylko r贸偶nic臋, czyli "b艂膮d", od tego przewidywania.
Predykcja Oparta na Blokach
Koder dzieli obraz na makrobloki, zazwyczaj pikseli. Dla ka偶dego bloku koder pr贸buje przewidzie膰 jego zawarto艣膰, u偶ywaj膮c warto艣ci pikseli z ju偶 zakodowanych blok贸w bezpo艣rednio powy偶ej i po lewej stronie. H.264 by艂 pionierem tej techniki, ale VP8 (a tym samym WebP) u偶ywa w艂asnego, udoskonalonego zestawu tryb贸w predykcji. Koder testuje wiele tryb贸w predykcji dla ka偶dego bloku i wybiera ten, kt贸ry daje najmniejszy b艂膮d, co b臋dzie naj艂atwiejsze do skompresowania.
Dla cz臋艣ci obrazu zwi膮zanej z jasno艣ci膮 (lum膮), makroblok jest dalej dzielony na mniejsze podbloki . Dla ka偶dego z tych ma艂ych blok贸w koder mo偶e wybra膰 jeden z kilku tryb贸w predykcji:
- Predykcja Pionowa: Wype艂nia blok, kopiuj膮c w d贸艂 rz膮d pikseli znajduj膮cy si臋 bezpo艣rednio nad nim. Dzia艂a dobrze dla kraw臋dzi i wzor贸w pionowych.
- Predykcja Pozioma: Wype艂nia blok, kopiuj膮c w poprzek kolumn臋 pikseli znajduj膮c膮 si臋 bezpo艣rednio po jego lewej stronie. Skuteczne dla kraw臋dzi poziomych.
- Predykcja DC: Oblicza 艣redni膮 warto艣膰 pikseli z rz臋du powy偶ej i kolumny po lewej stronie, i wype艂nia ca艂y blok tym jednym 艣rednim kolorem. U偶ywane dla p艂askich, jednolitych obszar贸w.
- Tryb TrueMotion: Bardziej z艂o偶ony tryb, kt贸ry u偶ywa dwuwymiarowego gradientu opartego na g贸rnych i lewych s膮siadach do wype艂nienia bloku, doskona艂y dla p艂ynnych przej艣膰.
- Dost臋pnych jest r贸wnie偶 kilka dodatkowych tryb贸w k膮towych do przewidywania wzor贸w diagonalnych.
Po dokonaniu predykcji koder oblicza rezydualn膮, kt贸ra jest blokiem r贸偶nic piksel po pikselu mi臋dzy oryginalnym blokiem a blokiem przewidywanym. Poniewa偶 przewidywanie jest cz臋sto bardzo dobre, ten blok rezydualny jest w wi臋kszo艣ci wype艂niony warto艣ciami bliskimi zera.
Transformacja, Kwantyzacja i Kodowanie
Blok rezydualny jest nast臋pnie przetwarzany w spos贸b podobny do JPEG:
- Transformacja: Blok rezydualny jest poddawany , kt贸ra przekszta艂ca go we wsp贸艂czynniki cz臋stotliwo艣ci.
- Kwantyzacja: To jest krok stratny. Wsp贸艂czynniki s膮 dzielone przez warto艣ci z tablicy kwantyzacji i zaokr膮glane. Detale o wysokiej cz臋stotliwo艣ci s膮 zaokr膮glane agresywnie, co sprawia, 偶e wiele wsp贸艂czynnik贸w staje si臋 zerami.
- Kodowanie Entropijne: Wynikowy rzadki zbi贸r wsp贸艂czynnik贸w jest nast臋pnie kompresowany bezstratnie w celu utworzenia ostatecznego strumienia danych dla tego bloku. WebP u偶ywa adaptacyjnego schematu kodowania arytmetycznego, kt贸ry jest og贸lnie bardziej wydajny ni偶 kodowanie Huffmana w JPEG.
Analiza 2: Bezstratna Kompresja WebP
Tryb bezstratny WebP to zupe艂nie inna bestia, niezwi膮zana z kodekiem VP8. Zosta艂 zaprojektowany od podstaw, aby by膰 bardziej wydajnym ni偶 PNG. Osi膮ga to, stosuj膮c wi臋kszy zestaw nowoczesnych technik kompresji bezstratnej.
Zaawansowane Transformacje Predykcyjne
Podobnie jak PNG, WebP Lossless u偶ywa filtrowania predykcyjnego. Przetwarza obraz piksel po pikselu i przewiduje warto艣膰 nast臋pnego piksela na podstawie jego s膮siad贸w. Nast臋pnie koduje tylko r贸偶nic臋 (rezydualn膮). Jednak WebP ma szerszy zestaw predyktor贸w i mo偶e nawet u偶ywa膰 r贸偶nych predyktor贸w dla r贸偶nych cz臋艣ci obrazu, dostosowuj膮c si臋 do lokalnej zawarto艣ci.
Pami臋膰 Podr臋czna Kolor贸w i Dopasowywanie Wzorc贸w
Wyr贸偶niaj膮c膮 cech膮 WebP Lossless jest wykorzystanie kilku zaawansowanych technik w celu eksploatacji r贸偶nych rodzaj贸w redundancji:
- Dopasowywanie Wzorc贸w (LZ77): Podobnie jak w algorytmie DEFLATE, wyszukuje on powtarzaj膮ce si臋 sekwencje pikseli w obrazie i zast臋puje je kr贸tszymi odwo艂aniami wstecznymi.
- Pami臋膰 Podr臋czna Kolor贸w: To unikalna cecha. Koder utrzymuje ma艂膮, dynamiczn膮 "pami臋膰 podr臋czn膮" ostatnio u偶ywanych kolor贸w. Je艣li napotka piksel, kt贸rego kolor ju偶 znajduje si臋 w pami臋ci podr臋cznej, mo偶e po prostu zapisa膰 kr贸tki indeks do tego wpisu w pami臋ci podr臋cznej zamiast pe艂nej warto艣ci koloru. Jest to bardzo skuteczne w przypadku obraz贸w o ograniczonej, ale powtarzaj膮cej si臋 palecie kolor贸w, co jest cz臋ste w grafice internetowej.
- Transformacja Przestrzeni Kolor贸w: Mo偶e zastosowa膰 odwracaln膮 transformacj臋, kt贸ra dekoreluje kana艂y R, G i B (np. transformacja "odejmij zielony"). Cz臋sto sprawia to, 偶e dane w ka偶dym kanale staj膮 si臋 bardziej jednolite, a tym samym bardziej kompresowalne.
艁膮cz膮c te liczne strategie, koder WebP Lossless mo偶e analizowa膰 obraz i stosowa膰 najskuteczniejsz膮 kombinacj臋 narz臋dzi, aby osi膮gn膮膰 wy偶sz膮 g臋sto艣膰 kompresji ni偶 bardziej bezpo艣rednie podej艣cie PNG, czyli filtr-potem-DEFLATE.
Lepsza Przezroczysto艣膰 i Animacja
Opr贸cz prostej kompresji, WebP zosta艂 stworzony, aby rozwi膮za膰 praktyczne problemy, z jakimi borykali si臋 programi艣ci internetowi ze starszymi formatami, zw艂aszcza w zakresie przezroczysto艣ci i animacji.
Stratny Kolor, Bezstratna Przezroczysto艣膰
Jedn膮 z najpot臋偶niejszych i unikalnych cech WebP jest jego zdolno艣膰 do 艂膮czenia tryb贸w kompresji. Mo偶e on przechowywa膰 g艂贸wne kana艂y kolor贸w RGB przy u偶yciu wysoce wydajnej kompresji stratnej (opartej na VP8), jednocze艣nie przechowuj膮c za pomoc膮 oddzielnej, wysokiej jako艣ci kompresji bezstratnej.
To zmienia zasady gry. Wcze艣niej, je艣li potrzebowa艂e艣 przezroczysto艣ci, by艂e艣 zmuszony u偶ywa膰 formatu PNG, kt贸ry przechowywa艂 ca艂y obraz (zar贸wno kolor, jak i alf臋) bezstratnie, co cz臋sto skutkowa艂o bardzo du偶ym plikiem dla obrazu fotograficznego. Dzi臋ki WebP otrzymujesz to, co najlepsze z obu 艣wiat贸w: ma艂y rozmiar pliku formatu stratnego dla widocznych cz臋艣ci obrazu i idealnie ostre kraw臋dzie formatu bezstratnego dla maski przezroczysto艣ci. Jest to idealne rozwi膮zanie na przyk艂ad dla zdj臋膰 produkt贸w na stronie e-commerce lub logo z cieniami.
Animacje Nast臋pnej Generacji
Animowany GIF przez d艂ugi czas by艂 standardem dla prostych animacji internetowych, ale by艂 ograniczony przez limit 256 kolor贸w i nieefektywn膮 kompresj臋. Animowany WebP stanowi nowoczesn膮 alternatyw臋 o znacznie lepszych mo偶liwo艣ciach.
- Pe艂en Kolor: Animowany WebP obs艂uguje 24-bitowy kolor, pozwalaj膮c na animacje z milionami kolor贸w zamiast zaledwie 256.
- Przezroczysto艣膰: Obs艂uguje r贸wnie偶 pe艂ny 8-bitowy kana艂 alfa dla animacji z cz臋艣ciow膮 przezroczysto艣ci膮.
- Wydajna Kompresja: Plik animowanego WebP mo偶e zawiera膰 mieszank臋 klatek stratnych i bezstratnych. U偶ywa r贸wnie偶 inteligentnych technik do optymalizacji aktualizacji klatek. Dla ka偶dej klatki mo偶e przechowywa膰 pe艂n膮 now膮 klatk臋 lub tylko prostok膮tny region obrazu, kt贸ry uleg艂 zmianie od poprzedniej klatki. Skutkuje to plikami animacji, kt贸re mog膮 by膰 o 60-70% mniejsze od ich odpowiednik贸w w formacie GIF.