Hlavní obsah
Internet, technologie a elektronika

Stejná fotka: JPEG 120 kB, WebP 91 kB, AVIF 60 kB. PNG měl přes 1,2 MB

Foto: Pexels

Vzala se jediná fotografie a čtyři formáty. Při téměř stejném SSIM měly JPEG, WebP a AVIF dramaticky rozdílnou velikost.

Článek

Původně jsem chtěl udělat jiný test: jednu fotografii poslat přes WhatsApp, Messenger, e-mail a cloud a pak porovnat, co s ní jednotlivé služby provedou. Jenže takový článek má smysl pouze tehdy, když se opravdu provede živý test ve všech čtyřech službách. Bez něj by byl výsledek jen odhad převlečený za experiment.

Proto jsem tentokrát udělal něco kontrolovatelnějšího. Vzal jsem jedinou referenční fotografii, sjednotil ji na 1024 × 1024 pixelů a uložil ji čtyřmi způsoby: bezeztrátově jako PNG a ztrátově jako JPEG, WebP a AVIF. U tří ztrátových formátů jsem nastavil kompresi tak, aby jejich měřená strukturální podobnost vyšla téměř stejně.

Výsledek je překvapivě výrazný. JPEG měl 120,3 kB. WebP 90,9 kB. AVIF jen 60,1 kB. Přitom SSIM všech tří variant ležel kolem 0,966. Bezeztrátové PNG stejného obrazu zabralo přes 1,2 MB.

Nejdřív metodika: žádné „vypadá to stejně“, ale čísla

Jako zdroj jsem použil standardní testovací fotografii astronautky Eileen Collins z knihovny scikit-image. Původní snímek pochází z databáze NASA a dokumentace scikit-image ho uvádí jako obrázek bez známých autorských omezení, uvolněný do public domain. Pro test jsem ho převzorkoval na 1024 × 1024 pixelů, aby všechny varianty začínaly přesně ze stejného obrazového pole.

PNG jsem uložil bezeztrátově. U JPEG jsem použil kvalitu 80, u WebP 87 a u AVIF 65. Ta čísla se nesmějí mezi formáty přímo porovnávat: „80“ v JPEG není totéž co „80“ ve WebP a každý enkodér si škálu vykládá jinak. Nastavení jsem proto neposuzoval podle čísla v dialogu, ale podle výsledné strukturální podobnosti.

Pro ni jsem použil SSIM, tedy Structural Similarity Index. Ten nepočítá jen rozdíl jednotlivých pixelů, ale snaží se zachytit podobnost struktury obrazu. Hodnota 1 znamená v tomto testu totožný obraz; nižší číslo znamená větší odchylku. Není to náhrada lidského oka, ale je to mnohem lepší kontrola než věta „mně to připadá stejné“.

PNG vyhrálo kvalitu. Pro fotografii ale zaplatilo desetinásobnou velikostí

PNG mělo jedinou absolutní výhodu: po dekódování bylo pixelově totožné s referenčním obrazem, takže SSIM vyšel přesně 1. Jenže soubor měl 1 243 769 bajtů, tedy přibližně 1,19 MiB.

Proti JPEG to bylo zhruba desetkrát víc dat, proti AVIFu více než dvacetkrát. To ale neznamená, že PNG je „špatný formát“. Jen se pro fotografie často používá na úkol, pro který nebyl nejefektivnější.

PNG dává velký smysl tam, kde potřebujeme bezeztrátovou grafiku, ostré hrany, průhlednost nebo opakované úpravy bez další ztrátové komprese. U běžné fotografie s milionem barevných přechodů platí za bezeztrátovost velkým souborem.

WebP ušetřilo zhruba čtvrtinu, AVIF zhruba polovinu

Když vezmu JPEG jako známý základ, WebP v tomto testu zmenšilo soubor přibližně o 24,5 procenta. AVIF přibližně o 50,1 procenta. A přitom se SSIM lišilo jen ve čtvrtém desetinném místě.

Tady je ale potřeba velmi silný counter-check: z jednoho obrázku se nesmí udělat univerzální žebříček. Výsledek závisí na obsahu fotografie, rozlišení, implementaci enkodéru, nastavení chroma subsamplingu, metadatech i tom, zda obraz obsahuje jemné textury, šum, text nebo velké hladké plochy.

Jiná fotografie může pořadí velikostí zachovat, ale procenta budou jiná. A některé typy obsahu mohou preferovat jiné nastavení. Tento experiment proto neříká „AVIF je vždy přesně dvakrát menší“. Říká něco užšího a poctivějšího: na jednom kontrolovaném snímku dokázal při téměř stejném SSIM vytvořit výrazně menší soubor.

Proč jsem netestoval „quality 80“ u všech

Bylo by lákavé uložit všechny tři formáty na hodnotu 80 a prostě porovnat bajty. To by ale nebyl férový závod. Pillow samo dokumentuje, že parametr quality má pro jednotlivé formáty vlastní význam a vlastní výchozí chování. Číslo je ovladač enkodéru, ne standardizované procento zachované kvality.

Proto jsem nastavení ručně srovnal podle výsledného SSIM. JPEG 80, WebP 87 a AVIF 65 skončily přibližně ve stejném pásmu 0,966. A teprve potom dává smysl ptát se, kolik dat který formát potřeboval.

A co to znamená pro běžného člověka?

Když fotku jen uložíte do telefonu, nemusíte nic řešit. Formát často zvolí zařízení samo. Rozdíl začne být zajímavý při webu, cloudu, zálohách nebo velké galerii, kde se stovky kilobajtů násobí tisíci souborů.

Tisíc obrázků o 120 kB zabere přibližně 120 MB. Tisíc obrázků o 60 kB přibližně 60 MB. U reálných fotografií z telefonu budou absolutní soubory mnohem větší, ale princip škálování zůstává stejný.

Současně není rozumné převádět celý archiv jen kvůli jednomu laboratornímu výsledku. Kompatibilita, možnost editace, metadata a dlouhodobá čitelnost mohou být důležitější než posledních dvacet procent úspory. JPEG má obrovskou výhodu v tom, že ho otevře prakticky cokoli. Modernější formáty musí tuto univerzálnost teprve dohánět v některých starších pracovních postupech.

Co jsem si z testu odnesl

Nečekal jsem, že mezi třemi ztrátovými variantami bude při téměř stejném SSIM tak velký rozdíl. JPEG byl pořád překvapivě efektivní. WebP mu ukrojilo zhruba čtvrtinu. AVIF polovinu.

A zároveň test pěkně připomněl, proč není bezpečné řídit se jen příponou souboru. Formát je jedna věc, konkrétní enkodér a nastavení druhá. „JPEG je velký“ nebo „AVIF je malý“ jsou bez dalších parametrů stejně nepřesné věty jako tvrdit, že každá fotka z mobilu má pět megabajtů.

Původní experiment s messengery si tedy nechávám na den, kdy půjde opravdu poslat identický originál přes všechny služby a stáhnout skutečné výstupy. Tentokrát jsem místo odhadu raději udělal menší laboratorní test, který lze zopakovat do posledního bajtu.

Metodika a omezení

• Referenční obraz: skimage.data.astronaut(), veřejně dostupná fotografie Eileen Collins z NASA, v dokumentaci označená jako public domain.

• Zdrojový obraz byl převzorkován na 1024 × 1024 px stejným postupem pro všechny varianty.

• PNG: optimize=True. JPEG: quality 80 + optimize=True. WebP: quality 87 + method 6. AVIF: quality 65.

• SSIM a PSNR byly spočítány proti stejnému nekomprimovanému RGB referenčnímu obrazu po dekódování každé varianty.

• SSIM není subjektivní lidské hodnocení. Slouží jen jako společná číselná kontrola podobnosti.

• Jeden snímek není reprezentativní vzorek všech fotografií. Absolutní velikosti i rozdíly se u jiného obsahu změní.

• Experiment netestuje WhatsApp, Messenger, e-mail ani cloud a netvrdí nic o jejich aktuální kompresi.

Máte na tohle téma jiný názor? Napište o něm vlastní článek.

Texty jsou tvořeny uživateli a nepodléhají procesu korektury. Pokud najdete chybu nebo nepřesnost, prosíme, pošlete nám ji na medium.chyby@firma.seznam.cz.

Sdílejte s lidmi své příběhy

Stačí mít účet na Seznamu a můžete začít publikovat svůj obsah. To nejlepší se může zobrazit i na hlavní stránce Seznam.cz