WebP'de Kayıpsız ve Şeffaflık Kodlaması

Jyrki Alakuijala, Ph.D., Google, Inc.
Vincent Rabaud, Ph.D., Google, Inc.
Son güncelleme tarihi: 01.08.2017

Özet: WebP kodlayıcı/kod çözücünün kaynak kullanımını hem kayıpsız hem de kayıplı modlarda PNG'nin kaynak kullanımıyla karşılaştırıyoruz. Web'den rastgele seçilmiş 12.000 yarı şeffaf PNG resminden oluşan bir derleme ve performanstaki değişimi göstermek için daha basit ölçümler kullanıyoruz. WebP resimlerini boyut açısından optimize edilmiş PNG'lerle karşılaştırmak için kitaplığımızdaki PNG'leri yeniden sıkıştırdık. Elde ettiğimiz sonuçlar, WebP'nin hem boyut hem de işlem hızı açısından web'de PNG kullanımı için iyi bir alternatif olduğunu gösteriyor.

Giriş

WebP, kayıpsız ve yarı saydam resimleri desteklediği için PNG biçimine alternatiftir. PNG sıkıştırmasında kullanılan sözlük kodlaması, Huffman kodlaması ve renk dizine ekleme dönüştürme gibi birçok temel teknik WebP'de de desteklenir. Bu da en kötü durumda benzer bir hız ve sıkıştırma yoğunluğuyla sonuçlanır. Aynı zamanda, farklı renk kanalları için ayrı entropi kodları, geriye dönük referans mesafelerinin 2D konumu ve son kullanılan renklerin renk önbelleği gibi bir dizi yeni özellik, çoğu resimde daha iyi bir sıkıştırma yoğunluğuna olanak tanır.

Bu çalışmada, WebP'nin performansını pngcrush ve ZopfliPNG kullanılarak yüksek düzeyde sıkıştırılmış PNG'lerle karşılaştırdık. En iyi uygulamaları kullanarak web resimleri referans kitaplığımızı yeniden sıkıştırdık ve hem kayıpsız hem de kayıplı WebP sıkıştırmasını bu toplulukla karşılaştırdık. Referans kitaplığına ek olarak, hız ve bellek kullanımı karşılaştırması için biri fotoğraf diğeri grafik olmak üzere iki daha büyük resim seçtik.

PNG'den daha hızlı kod çözme işleminin yanı sıra günümüzün PNG biçimini kullanarak mümkün olandan %23 daha yoğun bir sıkıştırma işlemi gerçekleştirilmiştir. WebP'nin günümüzün PNG resim biçimi için daha verimli bir alternatif olduğu sonucuna varıldı. Ayrıca kayıpsız alfa desteğiyle kayıplı resim sıkıştırma, web sitelerini hızlandırmada daha fazla olasılık sunar.

Yöntemler

Komut satırı araçları

Performansı ölçmek için aşağıdaki komut satırı araçlarını kullanırız:

  1. cwebp ve dwebp. libwebp kitaplığının bir parçası olan bu araçlar (head'den derlenmiş).

  2. sağlar. Bu, ImageMagick yazılımının bir komut satırı aracı parçasıdır (6.7.7-10 2017-07-21).

  3. pngcrush 1.8.12 (30 Temmuz 2017)

  4. ZopfliPNG (17 Temmuz 2017)

Komut satırı araçlarını ilgili kontrol işaretleriyle kullanırız. Örneğin, cwebp -q 1 -m 0 ifadesini kastedersek bu, cwebp aracının -q 1 ve -m 0 işaretleriyle çağrıldığı anlamına gelir.

Görsel Topluluk

Üç topluluk seçildi:

  1. Tek bir fotoğraf görüntüsü (Şekil 1),

  2. Saydamlığa sahip tek bir grafik resim (Şekil 2) ve

  3. Bir web kitaplığı: İnternet'ten taranan ve saydamlığa sahip olup rastgele seçilmiş 12.000 PNG resmi. Bu PNG resimleri, dönüştürme (pngcrush, ZopfliPNG) ile optimize edilir ve çalışma için her resmin en küçük versiyonu dikkate alınır.

Şekil 1. Fotoğraf resmi, 1024 x 752 piksel. Ateş püskürtme "Jaipur Maharaja Pirinç Bandı" Chassepierre Belçika, Yazar: Luc Viatur, Fotoğraf Creative Commons ile lisanslanmıştır Atıf-Aynen Paylaşım 3.0 Taşınmamış lisansı. Yazarın web sitesini burada bulabilirsiniz.

Şekil 2. Grafik resim, 1024 x 752 piksel. Google Chart Tools'dan kolaj resimler

Mevcut biçimin (PNG) tüm özelliklerini ölçmek için tüm bu orijinal PNG resimlerini çeşitli yöntemler kullanarak yeniden sıkıştırdık:

  1. Bileşen başına 8 bite bağlı: enter.png - deep 8 exit.png

  2. Tahmin içermeyen ImageMagick(1):convertinput.png -quality 90 out-candidate.png

  3. Uyarlanabilir önleyicilerle ImageMagick: convertinput.png -quality 95 exit-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-can text giriş.png

  5. ZopfliPNG(3): zopflipng --lossy_transparent girdi.png çıktı-candidate.png

  6. Tüm filtrelerle birlikte ZopfliPNG: zopflipng --iterations=500 --filters=01234mepb --lossy_8bit --lossy_transparent girdi.png çıkış-candidate.png

Sonuçlar

Web kitaplığındaki her bir resim için sıkıştırma yoğunluğunu, üç yöntemde optimize edilmiş PNG resim boyutlarına kıyasla hesapladık:

  1. WebP kayıpsız (varsayılan ayarlar)

  2. En küçük boyutta kayıpsız WebP (-m 6 -q 100)

  3. WebP'nin en iyi kayıpsız ve alfa sürümüyle kayıplı WebP (varsayılan ayarlar).

Bu sıkıştırma faktörlerini sıraladık ve Şekil 3'te çizdik.

3. Şekil. PNG sıkıştırma yoğunluğu, 1,0'da referans olarak kullanılır. Aynı resimler hem kayıpsız hem de kayıplı yöntemlerle sıkıştırılır. Her bir resim için boyutunun sıkıştırılmış PNG'ye oranı hesaplanır, boyut oranları sıralanır ve hem kayıpsız hem de kayıplı sıkıştırma için gösterilir. Kayıplı sıkıştırma eğrisi için daha küçük bir WebP görüntüsü ürettiği durumlarda kayıpsız sıkıştırma seçilir.

WebP, hem maksimum kalitede (dönüştürülen) libpng için hem de ZopfliPNG (Tablo 1) için PNG sıkıştırma yoğunluğunun ötesine geçer. Kodlama (Tablo 2) ve kod çözme hızı (Tablo 3) PNG'ninkiyle hemen hemen karşılaştırılabilir.

Tablo 1. Farklı sıkıştırma yöntemleri kullanılarak üç şirket için piksel başına ortalama bit sayısı.

Resim Grubu dönüştürme - kalite 95 ZopfliPNG WebP kayıpsız -q 0 -m 1 WebP kayıpsız (varsayılan ayarlar) WebP kayıpsız -m 6 -q 100 Alfa ile kayıplı WebP
fotoğraf 12.3 12.2 10.5 10.1 9.83 0.81
sansürsüz 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

Tablo 2. Sıkıştırma derlemesi ve farklı sıkıştırma yöntemleri için ortalama kodlama süresi.

Resim Grubu dönüştürme - kalite 95 ZopfliPNG WebP kayıpsız -q 0 -m 1 WebP kayıpsız (varsayılan ayarlar) WebP kayıpsız -m 6 -q 100 Alfa ile kayıplı WebP
fotoğraf 0,500 sn. 8,7 sn. 0,293 sn 0,780 sn 8,440 sn 0,111 sn.
sansürsüz 0,179 sn 14,0 sn 0,065 sn. 0,140 sn. 3,510 sn. 0,184 sn.
web 0,040 sn. 1,55 sn. 0,017 sn. 0,072 sn 2,454 sn. 0,020 sn.

Tablo 3. Farklı yöntem ve ayarlarla sıkıştırılan resim dosyaları için üç derlemenin ortalama kod çözme süresi.

Resim Grubu dönüştürme - kalite 95 ZopfliPNG WebP kayıpsız -q 0 -m 1 WebP kayıpsız (varsayılan ayarlar) WebP kayıpsız -m 6 -q 100 Alfa ile kayıplı WebP
fotoğraf 0,027 sn. 0,026 sn. 0,027 sn. 0,026 sn. 0,027 0,012 sn.
grafikler 0,049 sn. 0,015 sn. 0,005 sn. 0,005 sn. 0.003 0,010 sn.
web 0,007 sn. 0,005 sn. 0,003 sn. 0,003 sn. 0.003 0,003 sn.

Bellek Profili Oluşturma

Bellek profili oluşturmak için /usr/bin/time -v ile bildirilen maksimum yerleşik küme boyutunu kaydettik

Web derlemesi için maksimum bellek kullanımını yalnızca en büyük görüntünün boyutu tanımlar. Bellek ölçümünü daha iyi tanımlamak için bellek kullanımına genel bir bakış sunan tek bir fotoğraf resmi (Şekil 1) kullanırız. Grafikteki resim de benzer sonuçlar verir.

libpng ve ZopfliPNG için 10 ila 19 MiB, WebP kayıpsız kodlama için sırasıyla -q 0 -m 1 ve -q 95 (varsayılan değeri -m) ayarlarında 25 MiB ve 32 MiB ölçtük.

Kod çözme denemesinde, "yeniden boyutlandırma 1x1" boyutu, hem libpng hem de ZopfliPNG tarafından oluşturulan PNG dosyaları için 10 MiB kullanır. cwebp'den yararlanan WebP kayıpsız kod çözme işlemi 7 MiB ve kayıplı kod çözme işlemi için 3 MiB'ı kullanır.

Sonuçlar

Hem kodlama hem de kod çözme hızlarının PNG'nin hızıyla aynı alanda olduğunu gösterdik. Kodlama aşamasında bellek kullanımında artış olur ancak kod çözme aşamasında, en azından cwebp'nin davranışıyla ImageMagick'in dönüşümü arasındaki fark karşılaştırılırken sağlıklı bir düşüş görülür.

Sıkıştırma yoğunluğu, web resimlerinin% 99'undan fazlası için daha iyidir. Bu da PNG'den WebP'ye göreceli olarak kolay bir değişim olabileceğini gösterir.

WebP, varsayılan ayarlarla çalıştırıldığında libpng'den% 42 daha iyi ve ZopfliPNG'den% 23 daha iyi sıkıştırır. Bu durum, WebP'nin çok fazla görsel içeren web sitelerini hızlandırma umut vaat ettiğine işaret ediyor.

Referanslar

  1. ImageMagick

  2. Pngcrush

  3. ZopfliPNG

Aşağıda, Google tarafından desteklenmeyen bağımsız çalışmalar yer almaktadır. Bu çalışmaların hepsinde Google'ın her zaman doğru olduğu söylenemez.

  1. Yoav Weiss Blogu