Encoding lossless dan Transparansi dalam WebP

Jyrki Alakuijala, Ph.D., Google, Inc.
Vincent Rabaud, Ph.D., Google, Inc.
Terakhir diperbarui: 01-08-2017

Abstrak -- Kami membandingkan penggunaan resource WebP encoder/decoder dengan PNG dalam mode lossless dan lossy. Kami menggunakan korpus berisi 12.000 gambar PNG transparan yang dipilih secara acak dari web, dan pengukuran yang lebih sederhana untuk menunjukkan variasi performa. Kami telah mengompresi ulang PNG dalam korpus untuk membandingkan gambar WebP dengan PNG yang ukurannya dioptimalkan. Dalam hasil ini, kami menunjukkan bahwa WebP adalah pengganti PNG yang baik untuk digunakan di web terkait ukuran dan kecepatan pemrosesan.

Pengantar

WebP mendukung gambar lossless dan transparan, yang menjadikannya alternatif untuk format PNG. Banyak teknik dasar yang digunakan dalam kompresi PNG, seperti coding kamus, coding Huffman, dan transformasi pengindeksan warna juga didukung di WebP, yang pada kasus terburuk menghasilkan kecepatan dan kepadatan kompresi yang serupa. Pada saat yang sama, sejumlah fitur baru -- seperti kode entropi terpisah untuk saluran warna yang berbeda, lokalitas 2D jarak referensi mundur, dan cache warna dari warna yang baru-baru ini digunakan -- memungkinkan peningkatan kepadatan kompresi pada sebagian besar gambar.

Dalam karya ini, kami membandingkan performa WebP dengan PNG yang sangat dikompresi menggunakan pngcrush dan ZopfliPNG. Kami mengompresi ulang korpus referensi gambar web menggunakan praktik terbaik, dan membandingkan kompresi WebP lossy dan lossy terhadap korpus ini. Selain korpus referensi, kami memilih dua gambar yang lebih besar, satu fotografi dan grafis lainnya, untuk tolok ukur penggunaan kecepatan dan memori.

Telah terbukti kecepatan decoding lebih cepat daripada PNG, serta kompresi yang lebih kuat 23% daripada yang dapat dicapai menggunakan format PNG saat ini. Kami menyimpulkan bahwa WebP adalah pengganti yang lebih efisien untuk format gambar PNG saat ini. Selain itu, kompresi gambar lossy dengan dukungan alfa lossless memberikan kemungkinan lebih besar dalam mempercepat situs.

Metode

Alat command line

Kami menggunakan alat command line berikut untuk mengukur performa:

  1. cwebp dan dwebp. Alat ini merupakan bagian dari library libwebp (dikompilasi dari head).

  2. konversi. Ini adalah bagian alat command line dari software ImageMagick (6.7.7-10 2017-07-21).

  3. pngcrush 1.8.12 (30 Juli 2017)

  4. ZopfliPNG (17 Juli 2017)

Kami menggunakan alat command line dengan tanda kontrolnya masing-masing. Misalnya, jika kita merujuk ke cwebp -q 1 -m 0, artinya alat cwebp telah diaktifkan dengan tanda -q 1 dan -m 0.

Gambar Korpora

Tiga korpora dipilih:

  1. Satu gambar fotografi (Gambar 1),

  2. Satu gambar grafis dengan transparansi (Gambar 2), dan

  3. Korpus web: 12000 gambar PNG yang dipilih secara acak dengan transparansi atau tidak, yang di-crawl dari Internet. Gambar PNG ini dioptimalkan melalui fungsi konversi, pngcrush, ZopfliPNG, dan versi terkecil dari setiap gambar untuk penelitian ini.

Gambar 1. Gambar fotografi, 1024 x 752 piksel. Pernapasan api "Jaipur Maharaja Brass Band" Chassepierre Belgia, Penulis: Luc Viatur, Foto yang dilisensikan berdasarkan lisensi Creative Commons Attribution-Share Alike 3.0 Unported. Situs penulis ada di sini.

Gambar 2. Gambar grafis, 1024 x 752 piksel. Gambar kolase dari Google Chart Tools

Untuk mengukur kemampuan penuh format yang ada, PNG, kami telah mengompresi ulang semua gambar PNG asli ini menggunakan beberapa metode:

  1. Tetapkan ke 8 bit per komponen: konversi input.png -depth 8 output.png

  2. ImageMagick(1) tanpa prediktor: konversi input.png -kualitas 90 output-candidate.png

  3. ImageMagick dengan prediktor adaptif: mengonversi input.png -kualitas 95 output-candidate.png

  4. PNG

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

  6. ZopfliPNG dengan semua filter: zopflipng --iterations=500 --filters=01234mepb --lossy_8bit --lossy_transparency input.png output-candidate.png

Hasil

Kami menghitung kepadatan kompresi untuk setiap gambar di korpus web, relatif terhadap ukuran gambar PNG yang dioptimalkan untuk tiga metode:

  1. WebP lossless (setelan default)

  2. WebP lossless dengan ukuran terkecil (-m 6 -q 100)

  3. terbaik dari WebP lossless dan WebP lossy dengan alfa (setelan default).

Kami mengurutkan faktor kompresi ini, dan memetakannya pada Gambar 3.

Gambar 3. Kepadatan kompresi PNG digunakan sebagai referensi, pada 1,0. Gambar yang sama dikompresi menggunakan metode lossless dan lossy. Untuk setiap gambar, rasio ukuran ke PNG yang dikompresi akan dihitung, dan rasio ukurannya akan diurutkan, serta ditampilkan untuk kompresi lossless dan lossy. Untuk kurva kompresi lossy, kompresi lossless dipilih dalam kasus yang menghasilkan gambar WebP yang lebih kecil.

WebP lebih dari sekadar kepadatan kompresi PNG untuk libpng pada kualitas maksimum (konversi) serta ZopfliPNG (Tabel 1), dengan kecepatan encoding (Tabel 2), dan decoding (Tabel 3) yang kurang lebih dapat dibandingkan dengan PNG.

Tabel 1. Rata-rata bit per piksel untuk ketiga korpora menggunakan metode kompresi yang berbeda.

Gambar Disetel konversi -kualitas 95 ZopfliPNG WebP lossless -q 0 -m 1 WebP lossless (setelan default) WebP lossless -m 6 -q 100 WebP lossy dengan alfa
foto 12.3 12.2 10.5 10.1 9.83 0.81
vulgar 1.36 1,05 0.88 0.71 0,70 0,51
web 6.85 5.05 4.42 4.04 3.96 1.92

Tabel 2. Waktu encoding rata-rata untuk korporasi kompresi dan untuk berbagai metode kompresi.

Gambar Disetel konversi -kualitas 95 ZopfliPNG WebP lossless -q 0 -m 1 WebP lossless (setelan default) WebP lossless -m 6 -q 100 WebP lossy dengan alfa
foto 0,500 d 8,7 d 0,293 d 0,780 d 8,440 d 0,111 d
vulgar 0,179 d 14,0 d 0,065 d 0,140 d 3,510 d 0,184 d
web 0,040 d 1,55 d 0,017 d 0,072 d 2,454 d 0,020 dtk

Tabel 3. Waktu decoding rata-rata untuk ketiga korpora untuk file gambar yang dikompresi dengan metode dan setelan yang berbeda.

Gambar Disetel konversi -kualitas 95 ZopfliPNG WebP lossless -q 0 -m 1 WebP lossless (setelan default) WebP lossless -m 6 -q 100 WebP lossy dengan alfa
foto 0,027 d 0,026 d 0,027 d 0,026 d 0,027 0,012 d
grafis 0,049 d 0,015 d 0,005 d 0,005 d 0.003 0,010 d
web 0,007 d 0,005 d 0,003 d 0,003 d 0.003 0,003 d

Pembuatan Profil Memori

Untuk profiling memori, kami mencatat ukuran set resident maksimum seperti yang dilaporkan oleh /usr/bin/time -v

Untuk korpus web, ukuran gambar terbesar saja yang menentukan penggunaan memori maksimal. Agar pengukuran memori tetap dapat didefinisikan dengan lebih baik, kami menggunakan satu gambar fotografis (Gambar 1) untuk memberikan ringkasan tentang penggunaan memori. Gambar grafis memberikan hasil yang serupa.

Kami mengukur 10 hingga 19 MiB untuk libpng dan ZopfliPNG, serta 25 MiB dan 32 MiB untuk encoding lossless WebP pada setelan -q 0 -m 1, dan -q 95 (dengan nilai default -m).

Dalam eksperimen decoding, fungsi konversi -resize 1x1 menggunakan 10 MiB untuk file PNG yang dihasilkan libpng dan ZopfliPNG. Dengan menggunakan cwebp, decoding lossless WebP menggunakan 7 MiB, dan decoding lossy 3 MiB.

Kesimpulan

Kami telah menunjukkan bahwa kecepatan encoding dan decoding berada di domain yang sama dengan PNG. Ada peningkatan penggunaan memori selama fase encoding, tetapi fase decoding menunjukkan penurunan yang sehat, setidaknya saat membandingkan perilaku cwebp dengan konversi ImageMagick.

Kepadatan kompresi lebih baik untuk lebih dari 99% gambar web, menunjukkan bahwa gambar dapat secara relatif mudah diubah dari PNG ke WebP.

Jika dijalankan dengan setelan default, WebP mengompresi 42% lebih baik daripada libpng, dan 23% lebih baik daripada ZopfliPNG. Hal ini menunjukkan bahwa WebP menjanjikan untuk mempercepat situs dengan banyak gambar.

Referensi

  1. ImageMagick

  2. Pngcrush

  3. ZopfliPNG

Berikut adalah studi independen yang tidak disponsori oleh Google, dan Google tidak selalu menjamin kebenaran semua kontennya.

  1. Blog Yoav Weiss