Kodowanie bezstratne i z przejrzystością w WebP

Jyrki Alakuijala, Ph.D., Google, Inc.
Vincent Rabaud, Ph.D., Google, Inc.
Ostatnia aktualizacja: 1 sierpnia 2017 r.

Streszczenie – porównujemy wykorzystanie zasobów przez koder/dekoder WebP z używaniem zasobów przez PNG w trybie bezstratnym i stratnym. Używamy zbioru 12 tys. losowo wybranych przezroczystych obrazów PNG z internetu oraz prostszych pomiarów, aby pokazać różnice w skuteczności. Zarchiwizowaliśmy ponownie pliki PNG w naszym korpusie, aby porównać obrazy WebP z plikami PNG zoptymalizowanymi pod kątem rozmiaru. Z naszych wyników wynika, że WebP jest dobrym zamiennikiem PNG do użytku w internecie, zarówno pod względem rozmiaru, jak i szybkości przetwarzania.

Wprowadzenie

Format WebP obsługuje bezstratne i półprzezroczyste obrazy, dzięki czemu jest alternatywą dla formatu PNG. Wiele podstawowych technik używanych w kompresji PNG, takich jak kodowanie słownikowe, kodowanie Huffmana i transformacja indeksowania kolorów, jest również obsługiwanych w WebP, co w najgorszym przypadku skutkuje podobną szybkością i gęstością kompresji. Jednocześnie wiele nowych funkcji, takich jak osobne kody entropii dla różnych kanałów kolorów, dwuwymiarowa lokalność odwrotnych odległości odniesienia i pamięć podręczna kolorów ostatnio użytych kolorów, pozwala na zwiększenie gęstości kompresji w przypadku większości obrazów.

W tym artykule porównujemy wydajność WebP z plikami PNG, które są mocno skompresowane za pomocą narzędzi pngcrush i ZopfliPNG. Ponownie skompresowaliśmy nasz zbiór referencyjny obrazów internetowych, stosując sprawdzone metody, i porównaliśmy bezstratną i stratną kompresję WebP z tym zbiorem. Oprócz korpusów referencyjnych wybraliśmy dwa większe obrazy: jeden fotograficzny, a drugi graficzny, aby przeprowadzić testy porównawcze szybkości i używania pamięci.

Wykazano, że szybkość dekodowania jest większa niż w przypadku PNG, a kompresja jest o 23% większa niż w przypadku obecnego formatu PNG. Doszliśmy do wniosku, że WebP jest wydajniejszą alternatywą dla obecnego formatu obrazu PNG. Ponadto kompresja obrazu ze stratnym kanałem alfa zapewnia dodatkowe możliwości przyspieszania działania witryn.

Metody

Narzędzia wiersza poleceń

Do pomiaru skuteczności używamy tych narzędzi wiersza poleceń:

  1. cwebp i dwebp. Te narzędzia są częścią biblioteki libwebp (skompilowane z głowy).

  2. konwertować. To narzędzie wiersza poleceń wchodzi w skład oprogramowania ImageMagick (6.7.7-10 2017-07-21).

  3. pngcrush 1.8.12 (30 lipca 2017 r.)

  4. ZopfliPNG (17 lipca 2017 r.)

Używamy narzędzi wiersza poleceń z odpowiednimi flagami sterowania. Jeśli na przykład używamy polecenia cwebp -q 1 -m 0, oznacza to, że narzędzie cwebp zostało wywołane z flagami -q 1 i -m 0.

Korpusy obrazów

Wybrane zostały 3 korpusy:

  1. pojedynczy obraz fotograficzny (ryc. 1),

  2. pojedynczy obraz graficzny z półprzezroczystością (rysunek 2),

  3. Korpus internetowy: 12 000 losowo wybranych obrazów PNG z przezroczystością lub bez, pozyskanych z Internetu. Te obrazy PNG są optymalizowane za pomocą narzędzi convert, pngcrush, ZopfliPNG, a najmniejsza wersja każdego obrazu jest brana pod uwagę w badaniu.

Rysunek 1. Zdjęcie o rozmiarze 1024 x 752 pikseli. Dyszenie ogniem „Jaipur Maharaja Brass Band” Chassepierre Belgia, Autor: Luc Viatour, Zdjęcie na licencji Creative Commons Attribution-Share Alike 3.0 Unported. Witryna autora: tutaj.

Rysunek 2. Grafika o wymiarach 1024 x 752 piksele. kolaży z narzędzi do tworzenia wykresów Google,

Aby sprawdzić pełne możliwości dotychczasowego formatu PNG, ponownie skompresowaliśmy wszystkie oryginalne obrazy PNG za pomocą kilku metod:

  1. Ogranicz do 8 bitów na komponent: convert input.png -depth 8 output.png

  2. ImageMagick(1) bez predyktorów: convert input.png -quality 90 output-candidate.png

  3. ImageMagick z adaptacyjnymi predyktorami: convert input.png -quality 95 output-candidate.png

  4. Pngcrush(2): pngcrush -brute -rem tEXt -rem tIME -rem iTXt -rem zTXt -rem gAMA -rem cHRM -rem iCCP -rem sRGB -rem alla -rem text input.png output-candidate.png

  5. ZopfliPNG(3): zopflipng --lossy_transparent input.png output-candidate.png

  6. ZopfliPNG ze wszystkimi filtrami: zopflipng --iterations=500 --filters=01234mepb --lossy_8bit --lossy_transparent input.png output-candidate.png

Wyniki

Obliczyliśmy gęstość kompresji dla każdego obrazu w korpusie internetowym w porównaniu z optymalnymi rozmiarami obrazów PNG w ramach 3 metod:

  1. WebP bezstratny (ustawienia domyślne)

  2. WebP bezstratny z najmniejszym rozmiarem (-m 6 -q 100)

  3. najlepsze z bezstratnego i stratnego formatu WebP z alfa (ustawienia domyślne).

Posortowaliśmy te współczynniki kompresji i przedstawiliśmy je na rysunku 3.

Rysunek 3. Jako punkt odniesienia służy gęstość kompresji PNG, która wynosi 1,0. Te same obrazy są kompresowane zarówno za pomocą metod bezstratnych, jak i stratnych. Dla każdego obrazu obliczany jest współczynnik rozmiaru w porównaniu ze skompresowanym plikiem PNG, a współczynniki są sortowane i wyświetlane zarówno w przypadku kompresji bezstratnej, jak i stratnej. W przypadku krzywej kompresji stratnej wybierana jest kompresja bezstratna w przypadkach, gdy powoduje ona powstanie mniejszego obrazu WebP.

Format WebP zapewnia większą gęstość kompresji niż PNG zarówno w przypadku libpng przy maksymalnej jakości (konwertowanie), jak i ZopfliPNG (tabela 1). Prędkość kodowania (tabela 2) i dekodowania (tabela 3) jest zbliżona do szybkości PNG.

Tabela 1. Średnia liczba bitów na piksel dla 3 korpusów z użyciem różnych metod kompresji.

Zestaw obrazów convert -quality 95 ZopfliPNG WebP bezstratne -q 0 -m 1 WebP bezstratny (ustawienia domyślne) WebP bezstratny -m 6 -q 100 WebP stratny z alfa
zdjęcie 12.3 12.2 10.5 10.1 9,83 0,81
treści drastyczne 1,36 1,05 0,88 0,71 0,70 0,51
internet 6,85 5,05 4,42 4,04 3,96 1,92

Tabela 2. Średni czas kodowania dla korpusów kompresji i różnych metod kompresji.

Zestaw obrazów convert -quality 95 ZopfliPNG WebP bezstratne -q 0 -m 1 WebP bezstratny (ustawienia domyślne) WebP bezstratny -m 6 -q 100 WebP stratny z alfa
zdjęcie 0,500 s 8,7 s 0,293 s 0,780 s 8,440 s 0,111 s
treści drastyczne 0,179 s 14,0 s 0,065 s 0,140 s 3,510 s 0,184 s
internet 0,040 s 1,55 s 0,017 s 0,072 s 2,454 s 0,020 s

Tabela 3. Średni czas dekodowania dla 3 korpusów plików graficznych skompresowanych za pomocą różnych metod i ustawień.

Zestaw obrazów convert -quality 95 ZopfliPNG WebP bezstratne -q 0 -m 1 WebP bezstratny (ustawienia domyślne) WebP bezstratny -m 6 -q 100 WebP stratny z alfa
zdjęcie 0,027 s 0,026 s 0,027 s 0,026 s 0,027 0,012 s
grafika 0,049 s 0,015 s 0,005 s 0,005 s 0,003 0,010 s
internet 0,007 s 0,005 s 0,003 s 0,003 s 0,003 0,003 s

Profilowanie pamięci

W przypadku profilowania pamięci odnotowaliśmy maksymalny rozmiar zestawu rezydenta, jak podano w programie /usr/bin/time -v.

W przypadku zbioru stron internetowych maksymalne wykorzystanie pamięci określa tylko rozmiar największego obrazu. Aby ułatwić pomiar pamięci, użyliśmy pojedynczego zdjęcia (ryc. 1) w celu ogólnego przedstawienia wykorzystania pamięci. Obraz graficzny daje podobne wyniki.

W przypadku libpng i ZopfliPNG mieliśmy wyniki od 10 do 19 MiB, a w przypadku bezstratnego kodowania WebP przy ustawieniach -q 0 -m 1 i -q 95 (z domyślną wartością -m) – odpowiednio 25 MiB i 32 MiB.

W eksperymencie dotyczącym dekodowania polecenie convert -resize 1x1 używa 10 MiB w przypadku plików PNG wygenerowanych przez libpng i ZopfliPNG. Za pomocą cwebp dekodowanie bezstratne WebP zużywa 7 MiB, a dekodowanie stratne – 3 MiB.

Podsumowanie

Podczas testów okazało się, że zarówno szybkość kodowania, jak i odkodowania jest taka sama jak w przypadku PNG. Podczas fazy kodowania następuje wzrost wykorzystania pamięci, ale faza dekodowania powoduje znaczny spadek, przynajmniej w porównaniu z zachowaniem funkcji cwebp w ImageMagick.

Kompresja jest lepsza w przypadku ponad 99% obrazów internetowych, co oznacza, że można stosunkowo łatwo przejść z formatu PNG na WebP.

Gdy WebP jest używany z domyślnymi ustawieniami, kompresuje o 42% lepiej niż libpng i o 23% lepiej niż ZopfliPNG. Sugeruje to, że WebP może przyspieszyć działanie witryn z wieloma obrazami.

Odniesienia

  1. ImageMagick

  2. Pngcrush

  3. ZopfliPNG

Poniżej znajdują się niezależne badania, które nie są sponsorowane przez Google. Google nie musi być odpowiedzialne za prawidłowość wszystkich ich treści.

  1. Blog Yoava Weissa