30Aug

Är PNG-formatet Lossless eftersom det har en komprimeringsparameter?

how-är-the-png-format-förlustfri-sedan-det-är-en-kompressions parameter-00

PNG-formatet ska vara ett förlustfritt format, men när du sparar en bild som en PNG-fil, blir du ombedd att välja en komprimeringsnivå.Betyder det att PNG-formatet egentligen inte är förlustfritt trots allt? Dagens SuperUser Q & A-inlägg hjälper till att rensa förvirringen för en nyfiken läsare.

Dagens fråga &Svarssession kommer till oss med tillstånd av SuperUser-en indelning av Stack Exchange, en community-driven gruppering av Q & A-webbplatser.

Frågan

SuperUser-läsare pkout vill veta om kvaliteten på en PNG-bild påverkas av den valda kompressionsnivån:

Som jag förstår, använder PNG-filer förlustfri komprimering. Men när jag använder en bildredigerare som Gimp och försöker spara en bild som en PNG-fil, frågar den om en komprimeringsnivå som sträcker sig mellan 0 och 9.

Om den har en komprimeringsparameter som påverkar den komprimerade visuella precisionenbild, hur är PNG förlustfri då?Kan någon förklara det här för mig? Får jag bara förlustfritt beteende när jag ställer komprimeringsnivån till 9?

Finns det någon skillnad i bildens kvalitet beroende på vilken komprimeringsnivå du väljer?

Svaret

SuperUser-bidragsgivare LordNeckbeard och jjlin har svaret för oss. Först upp, LordNeckbeard:

PNG är komprimerad, men Lossless

Komprimeringsnivån är ett kompromiss mellan filstorlek och kodning / avkodningshastighet. För att alltför generalisera, har även icke-bildformat som FLAC liknande begrepp.

Olika kompressionsnivåer, samma avkodad utgång

Även om filstorlekarna är olika beroende på de olika komprimeringsnivåerna kommer den faktiska avkodade utsignalen att vara identiska. Du kan jämföra MD5-hackarna i de avkodade utgångarna med ffmpeg med MD5-muxern. Detta visas bäst med några exempel.

Skapa PNG-filer

how-är-the-png-format-förlustfri-sedan-det-är-en-kompressions parameter-01

  • Som standard använder ffmpeg -compression_level 100 för PNG-utdata.
  • Ett snabbt, slarvtest visade att 100( den högsta komprimeringsnivån) tog ungefär tre gånger längre tid för att koda och fem gånger längre att avkoda än 0( den lägsta kompressionsnivån) i detta exempel.

Jämför filstorlek

how-är-the-png-format-förlustfri-sedan-det-är-en-kompressions parameter-02

Avkoda PNG-filer och visa MD5 Hashes

how-är-the-png-format-förlustfri-sedan-det-är-en-kompressionsparameter 03

Eftersom båda käften är desamma kan du vara säker på att de avkodade utdata( de okomprimerade råfilerna) är exakt samma.

Följd av svaret från jjlin:

PNG är förlustfri. GIMP använder sannolikt inte det bästa valet av formulering i det här fallet.

Tänk på det som -komprimeringskvalitet eller -komprimeringsnivå .Med lägre komprimering får du en större fil, men det tar mindre tid att producera, medan du med en högre komprimering får en mindre fil som tar längre tid att producera.

Vanligtvis får du avtagande avkastning, det vill säga inte så mycket minskning i storlek jämfört med den ökade tiden det tar när du går upp till högsta komprimeringsnivåer, men det är upp till dig.

Har något att lägga till förklaringen? Ljud av i kommentarerna. Vill du läsa mer svar från andra tech-savvy Stack Exchange-användare? Kolla in hela diskussionsgängan här.