Er PNG-formatet tapsfritt siden det har en komprimeringsparameter?

PNG-formatet skal være et tapsfritt format, men når du lagrer et bilde som en PNG-fil, blir du bedt om å velge et kompresjonsnivå. Betyr dette at PNG-formatet ikke er tapsfritt tross alt? Dagens SuperUser Q & A-innlegg hjelper til med å fjerne forvirringen for en nysgjerrig leser.

Dagens spørsmål og svar-økt kommer til oss med tillatelse fra SuperUser - en underavdeling av Stack Exchange, en samfunnsdrevet gruppe av spørsmål og svar-nettsteder.

Spørsmålet

SuperUser-leser-pkout vil vite om kvaliteten på et PNG-bilde påvirkes av kompresjonsnivået som er valgt:

Slik jeg forstår det, bruker PNG-filer tapsfri komprimering. Men når jeg bruker et bilderedigeringsprogram som Gimp og prøver å lagre et bilde som en PNG-fil, ber det om et kompresjonsnivå som varierer mellom 0 og 9.

Hvis den har en komprimeringsparameter som påvirker den visuelle presisjonen til det komprimerte bildet, hvordan er PNG tapsfri da? Kan noen forklare meg dette? Får jeg bare tapsfri oppførsel når jeg setter kompresjonsnivået til 9?

Er det en forskjell i kvaliteten på bildet, avhengig av kompresjonsnivået du velger?

Svaret

SuperUser-bidragsytere LordNeckbeard og jjlin har svaret for oss. Først opp, LordNeckbeard:

PNG er komprimert, men uten tap

Kompresjonsnivået er en avveining mellom filstørrelse og koding / dekoding hastighet. For å generalisere altfor har selv ikke-bildeformater som FLAC lignende konsepter.

Ulike kompresjonsnivåer, samme dekodede utgang

Selv om filstørrelsene er forskjellige på grunn av de forskjellige kompresjonsnivåene, vil den faktiske dekodede utgangen være identisk. Du kan sammenligne MD5-hashes av de dekodede utgangene med ffmpeg ved hjelp av MD5-muxeren. Dette vises best med noen eksempler.

Opprett PNG-filer

  • Som standard vil ffmpeg bruke -compression_level 100 for PNG-utgang.
  • En rask, slurvet test viste at 100 (det høyeste kompresjonsnivået) tok omtrent tre ganger lengre tid å kode og fem ganger lenger tid å dekode enn 0 (det laveste kompresjonsnivået) i dette eksemplet.

Sammenlign filstørrelse

Dekod PNG-filene og vis MD5 Hashes

Siden begge hasjene er de samme, kan du være trygg på at de dekodede utgangene (de ukomprimerte råfilene) er nøyaktig de samme.

Etterfulgt av svaret fra jjlin:

PNG er tapsfri. GIMP bruker mest sannsynlig ikke det beste formuleringsvalget i dette tilfellet.

Tenk på det som kvalitet på komprimering eller kompresjonsnivå . Med lavere komprimering får du en større fil, men det tar kortere tid å produsere, mens med høyere komprimering får du en mindre fil som tar lengre tid å produsere.

Vanligvis får du avtagende avkastning, dvs. ikke så mye nedgang i størrelse sammenlignet med økningen i tid det tar når du går opp til de høyeste kompresjonsnivåene, men det er opp til deg.

Har du noe å legge til forklaringen? Lyd av i kommentarene. Vil du lese flere svar fra andre teknologikyndige Stack Exchange-brukere? Sjekk ut hele diskusjonstråden her.