Kodowanie bezstratne i z przejrzystością w WebP

dr Jyrki Alakuijala, Google LLC
Vincent Rabaud, dr Vincent Rabaud, Google, Inc.
Ostatnia aktualizacja: 1.08.2017

Streszczenie – porównujemy wykorzystanie zasobów przez koder/dekoder WebP z wykorzystaniem zasobów PNG w trybie bezstratnym i stratnym. Używamy korpusu zawierającego 12 tys. losowo wybranych, półprzezroczystych obrazów PNG z internetu. Stosujemy też prostsze pomiary w celu uwidocznienia zmian skuteczności. Ponownie skompresowaliśmy pliki PNG w naszym korpusie, aby porównać obrazy WebP z plikami PNG o zoptymalizowanym rozmiarze. W naszych wynikach pokazujemy, że WebP dobrze nadaje się do pliku PNG, jeśli chodzi o rozmiar i szybkość przetwarzania.

Wstęp

WebP obsługuje obrazy bezstratne i przezroczyste, dlatego stanowi alternatywę dla formatu PNG. Wiele podstawowych technik stosowanych przy kompresji PNG, takich jak kodowanie słownikowe, kodowanie Huffmana i transformacja indeksowania kolorów, jest również obsługiwanych w WebP, co w najgorszym razie skutkuje podobną szybkością i gęstością kompresji. Jednocześnie szereg nowych funkcji – takich jak oddzielne kody entropii dla różnych kanałów kolorów, lokalizacja 2D odległości odniesień oraz pamięć podręczna ostatnio używanych kolorów – pozwalają na większą gęstość kompresji większości obrazów.

W tym projekcie porównujemy wydajność plików WebP z plikami PNG, które są mocno skompresowane za pomocą programów pngcrush i ZopfliPNG. Ponownie skompresowaliśmy referencyjny korpus obrazów internetowych, korzystając ze sprawdzonych metod, i porównaliśmy z korpusem zarówno bezstratną, jak i stratną kompresję WebP. Oprócz korpusu referencyjnego wybraliśmy 2 większe obrazy – fotograficzny, a drugie graficzne – do porównania szybkości i pamięci.

Szybkość dekodowania jest większa niż w przypadku PNG, a także o 23% gęstsza w porównaniu z dostępnym obecnie formatem PNG. Uznaliśmy, że WebP to wydajniejszy zamiennik obecnego formatu obrazów PNG. Poza tym stratna kompresja obrazu z bezstratną obsługą wersji alfa daje większe możliwości przyspieszania stron internetowych.

Metody

Narzędzia wiersza poleceń

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

  1. cwebp i dwebp. Te narzędzia, które są częścią biblioteki libwebp (skompilowanej na podstawie nagłówka).

  2. dokonać konwersji. Jest to narzędzie wiersza poleceń będące częścią 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ń wraz z odpowiadającymi im flagami sterującymi. Na przykład odwołanie do cwebp -q 1 -m 0 oznacza, że narzędzie cwebp zostało wywołane z flagami -q 1 i -m 0.

Korpusy obrazów

Wybrano trzy korpusy:

  1. Pojedyncze zdjęcie (ilustracja 1)

  2. Pojedynczy obraz graficzny z przezroczystością (Rys. 2) oraz

  3. Korpus internetowy: 12 000 losowo wybranych obrazów PNG z przezroczystością lub nie, zindeksowanych z internetu. Te obrazy PNG są optymalizowane przy użyciu konwersji, pngcrush, ZopfliPNG. W badaniu brana jest pod uwagę najmniejsza wersja każdego obrazu.

Rysunek 1. Obraz fotograficzny o wymiarach 1024 x 752 piksele. Oddychanie ogniem „Jaipur Maharaja Brass Band” Chassepierre Belgium, Autor: Luc Viatour, zdjęcie na licencji Creative Commons Uznanie autorstwa–Na tych samych warunkach 3.0 Unported. Witryna autora znajduje się tutaj.

Rysunek 2. Obraz graficzny o wymiarach 1024 x 752 piksele. Kolaż obrazów z Narzędzi Google do tworzenia wykresów

Aby zmierzyć wszystkie możliwości istniejącego formatu, PNG, ponownie skompresowaliśmy wszystkie oryginalne obrazy PNG za pomocą kilku metod:

  1. Ogranicz do 8 bitów na komponent: przekonwertuj plikinput.png – głębokość 8.png

  2. ObrazMagick(1) bez funkcji prognozowania: przekonwertuj plikinput.png -quality 90 output-candidate.png

  3. ObrazMagick z prognozami adaptacyjnymi: przekonwertuj plikinput.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 tekst insert.png wyjściowy-candi

  5. ZopfliPNG(3): zopflipng --lossy_transparent input.png wyjściowy-candidate.png

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

Wyniki

Obliczyliśmy gęstość kompresji każdego obrazu w korpusie internetowym w odniesieniu do zoptymalizowanych rozmiarów obrazów PNG na 3 sposoby:

  1. Bezstratny WebP (ustawienia domyślne)

  2. Bezstratny WebP o najmniejszym rozmiarze (-M 6–q 100)

  3. najlepsze są funkcje bezstratne WebP i WebP Losy z wersją alfa (ustawienia domyślne).

Posortowaliśmy współczynniki kompresji i umieściliśmy je na Rysunku 3.

Rysunek 3. Gęstość kompresji PNG jest używana jako wartość referencyjna na poziomie 1, 0. Te same obrazy są kompresowane zarówno przy użyciu metod bezstratnych, jak i stratnych. W przypadku każdego obrazu obliczany jest stosunek rozmiaru do skompresowanego pliku PNG, a współczynniki rozmiaru są sortowane i wyświetlane zarówno w przypadku kompresji bezstratnej, jak i stratnej. W przypadku krzywej stratnej kompresji kompresja bezstratna jest wybierana w tych przypadkach, gdy obraz WebP jest mniejszy.

WebP wykracza poza gęstość kompresji PNG w przypadku plików libpng zarówno w przypadku maksymalnej jakości (konwersji), jak i ZopfliPNG (tabela 1), przy czym szybkości kodowania (tabela 2) i dekodowania (Tabela 3) są mniej więcej porównywalne do szybkości kodowania PNG.

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

Zestaw obrazów jakość - przekonwertuj 95 ZopfliPNG Bezstratny WebP – kw. 0 – m 1 Bezstratny WebP (ustawienia domyślne) Bezstratny WebP – M 6 – 100 Stratna WebP z wersją 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 korpusów kompresji i różnych metod kompresji.

Zestaw obrazów jakość - przekonwertuj 95 ZopfliPNG Bezstratny WebP – kw. 0 – m 1 Bezstratny WebP (ustawienia domyślne) Bezstratny WebP – M 6 – 100 Stratna WebP z wersją 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 3 korpusów w przypadku plików graficznych skompresowanych za pomocą różnych metod i ustawień.

Zestaw obrazów jakość - przekonwertuj 95 ZopfliPNG Bezstratny WebP – kw. 0 – m 1 Bezstratny WebP (ustawienia domyślne) Bezstratny WebP – M 6 – 100 Stratna WebP z wersją 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

Na potrzeby profilowania pamięci zarejestrowaliśmy maksymalny rozmiar zbioru rezydentnego podany przez /usr/bin/time -v

W przypadku korpusu internetowego rozmiar największego obrazu określa maksymalne wykorzystanie pamięci. Aby dokładniej określić pomiar pamięci, używamy pojedynczego obrazu (ilustracja 1) w celu opisania użycia pamięci. Obraz graficzny daje podobne wyniki.

Zmierzyliśmy 10–19 MiB w przypadku libpng i ZopfliPNG oraz 25 MiB i 32 MiB w przypadku bezstratnego kodowania WebP przy ustawieniach -q 0–m 1 i -q 95 (przy wartości domyślnej -m).

W eksperymencie z dekodowaniem funkcja konwertuj na zmianę rozmiaru 1 x 1 wykorzystuje 10 MiB zarówno w przypadku plików PNG wygenerowanych przez libpng, jak i ZopfliPNG. W przypadku cwebp bezstratne dekodowanie WebP wykorzystuje 7 MiB, a dekodowanie stratne 3 MiB.

Podsumowanie

Wykazaliśmy, że szybkość kodowania i dekodowania znajduje się w tej samej domenie co w przypadku formatu PNG. Podczas fazy kodowania zauważa się wzrost wykorzystania pamięci, ale faza dekodowania wykazuje znaczący spadek, przynajmniej w przypadku porównania zachowania cwebp z konwersją ImageMagick.

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

Gdy WebP działa z ustawieniami domyślnymi, kompresuje o 42% lepiej niż libpng i o 23% lepiej niż ZopfliPNG. To sugeruje, że WebP przyspiesza działanie witryn z dużą ilością obrazów.

Odniesienia

  1. ImageMagick

  2. Pngcrush

  3. ZopfliPNG

Poniżej znajdziesz niezależne badania, które nie są sponsorowane przez Google. Niekoniecznie to Google twierdzi, że wszystkie zawarte w nich treści są prawidłowe.

  1. Blog Yoav Weissa