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

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

    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 faktiskt inte är förlustfritt trots allt? Dagens SuperUser Q & A-tjänst hjälper till att rensa förvirringen för en nyfiken läsare.

    Dagens Question & Answer-session 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äsaren 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 det har en komprimeringsparameter som påverkar den visuella precisionen för den komprimerade bilden, hur är det då PNG förlustfritt? 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 en 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 förlustfri

    Kompressionsnivån är en avvägning 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 beror 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

    • Som standard använder ffmpeg -compression_level 100 för PNG-utdata.
    • Ett snabbt, slarvtest visade att 100 (den högsta kompressionsnivån) tog ungefär tre gånger längre 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

    Avkoda PNG-filerna och visa MD5-hashes

    Eftersom båda käftarna är desamma kan du vara säker på att de avkodade utsignalerna (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 kompressionsnivå. Med lägre komprimering får du en större fil, men det tar mindre tid att producera, medan med högre komprimering får du en mindre fil som tar längre tid att producera.

    Vanligtvis får du minskande avkastning, det vill säga inte så mycket minskning i storlek jämfört med den ökning av tid det tar när du går upp till högsta kompressionsnivåer, men det är upp till dig.


    Har du 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.