Je formát PNG bezztrátový, protože má parametr komprese?

Formát PNG má být bezztrátový formát, ale když uložíte obrázek jako soubor PNG, budete vyzváni k výběru úrovně komprese. Znamená to, že formát PNG vlastně nakonec není bezztrátový? Dnešní příspěvek Otázky a odpovědi SuperUser pomáhá vyčistit zmatek pro zvědavého čtenáře.

Dnešní relace Otázky a odpovědi k nám přichází s laskavým svolením SuperUser - subdivize Stack Exchange, komunitní skupiny webových stránek s otázkami a odpověďmi.

Otázka

Čtení SuperUser čtenáře chce vědět, jestli je kvalita obrázku PNG ovlivněna zvolenou úrovní komprese:

Jak jsem pochopil, soubory PNG používají bezztrátovou kompresi. Když však používám editor obrázků, jako je Gimp, a pokusím se uložit obrázek jako soubor PNG, požádá o úroveň komprese v rozmezí od 0 do 9.

Pokud má parametr komprese, který ovlivňuje vizuální přesnost komprimovaného obrazu, jak je pak PNG bezztrátový? Může mi to někdo vysvětlit? Dostanu bezztrátové chování, pouze když nastavím úroveň komprese na 9?

Existuje rozdíl v kvalitě obrazu v závislosti na zvolené úrovni komprese?

Odpověď

Odpovědi pro nás mají přispěvatelé SuperUser LordNeckbeard a jjlin. Nejprve, LordNeckbeard:

PNG je komprimovaný, ale bezztrátový

Úroveň komprese je kompromisem mezi velikostí souboru a rychlostí kódování / dekódování. Příliš zobecnit, dokonce i jiné než obrazové formáty jako FLAC mají podobné koncepty.

Různé úrovně komprese, stejný dekódovaný výstup

Ačkoli se velikosti souborů liší kvůli různým úrovním komprese, skutečný dekódovaný výstup bude identický. Můžete porovnat hash MD5 dekódovaných výstupů s ffmpeg pomocí muxeru MD5. To je nejlépe vidět na několika příkladech.

Vytvářejte soubory PNG

  • Ve výchozím nastavení použije ffmpeg pro výstup PNG hodnotu -compression_level 100.
  • Rychlý nedbalý test ukázal, že kódování 100 (nejvyšší úroveň komprese) trvalo v tomto příkladu zhruba třikrát déle a dekódování pětkrát déle než 0 (nejnižší úroveň komprese).

Porovnat velikost souboru

Dekódujte soubory PNG a zobrazte hash MD5

Jelikož jsou oba hashe stejné, můžete si být jisti, že dekódované výstupy (nekomprimované raw soubory) jsou přesně stejné.

Následovala odpověď od jjlin:

PNG je bezztrátový. GIMP v tomto případě s největší pravděpodobností nepoužívá nejlepší výběr formulace.

Představte si to jako kvalitu komprese nebo úroveň komprese . S nižší kompresí získáte větší soubor, ale jeho výroba trvá méně času, zatímco při vyšší kompresi získáte menší soubor, jehož výroba trvá déle.

Obvykle získáte klesající výnosy, tj. Ne tak velké zmenšení velikosti ve srovnání s nárůstem času, který je potřeba při přechodu na nejvyšší úrovně komprese, ale je to na vás.

Máte co dodat k vysvětlení? Zvuk v komentářích. Chcete si přečíst další odpovědi od ostatních technicky zdatných uživatelů Stack Exchange? Podívejte se na celé diskusní vlákno zde.