Er PNG-formatet tabt, da det har en kompressionsparameter?

PNG-formatet formodes at være et tabsfrit format, men når du gemmer et billede som en PNG-fil, bliver du bedt om at vælge et komprimeringsniveau. Betyder dette, at PNG-formatet alligevel ikke er tabsløst? Dagens SuperUser Q & A-indlæg hjælper med at rydde forvirringen for en nysgerrig læser.

Dagens spørgsmål og svar-session kommer til os med tilladelse fra SuperUser - en underafdeling af Stack Exchange, en community-driven gruppe af Q & A-websteder.

Spørgsmålet

SuperUser-læser-pkout vil vide, om kvaliteten af ​​et PNG-billede påvirkes af det valgte kompressionsniveau:

Som jeg forstår det, bruger PNG-filer tabsfri komprimering. Men når jeg bruger en billededitor som Gimp og prøver at gemme et billede som en PNG-fil, beder det om et komprimeringsniveau, der spænder mellem 0 og 9.

Hvis det har en komprimeringsparameter, der påvirker den visuelle præcision af det komprimerede billede, hvordan er PNG tabsfri da? Kan nogen venligst forklare dette for mig? Får jeg kun tabsfri opførsel, når jeg indstiller kompressionsniveauet til 9?

Er der en forskel i billedets kvalitet afhængigt af det komprimeringsniveau, du vælger?

Svaret

SuperUser-bidragydere LordNeckbeard og jjlin har svaret til os. Først op, LordNeckbeard:

PNG er komprimeret, men tabsfri

Komprimeringsniveauet er en afvejning mellem filstørrelse og kodningshastighed. For at generalisere alt for har selv ikke-billedformater som FLAC lignende koncepter.

Forskellige kompressionsniveauer, samme dekodede output

Selvom filstørrelserne er forskellige på grund af de forskellige komprimeringsniveauer, vil den faktiske dekodede output være identisk. Du kan sammenligne MD5-hashes af de dekodede output med ffmpeg ved hjælp af MD5 muxer. Dette vises bedst med nogle eksempler.

Opret PNG-filer

  • Som standard bruger ffmpeg -compression_level 100 til PNG-output.
  • En hurtig, sjusketest viste, at 100 (det højeste kompressionsniveau) tog cirka tre gange længere tid at kode og fem gange længere tid at afkode end 0 (det laveste kompressionsniveau) i dette eksempel.

Sammenlign filstørrelse

Afkod PNG-filerne, og vis MD5-bindestreg

Da begge hashes er de samme, kan du være sikker på, at de dekodede output (de ukomprimerede rå filer) er nøjagtigt de samme.

Efterfulgt af svaret fra jjlin:

PNG er tabsfri. GIMP bruger sandsynligvis ikke det bedste valg af ordlyd i dette tilfælde.

Tænk på det som kompressionskvalitet eller kompressionsniveau . Med lavere kompression får du en større fil, men det tager kortere tid at producere, mens med højere kompression får du en mindre fil, der tager længere tid at producere.

Typisk får du faldende afkast, dvs. ikke så meget fald i størrelse sammenlignet med den stigning i tid, det tager, når man går op til de højeste kompressionsniveauer, men det er op til dig.

Har du noget at tilføje til forklaringen? Lyd fra i kommentarerne. Vil du læse flere svar fra andre teknologisk kyndige Stack Exchange-brugere? Tjek den fulde diskussionstråd her.