Je li PNG format bez gubitaka budući da ima parametar kompresije?

PNG format trebao bi biti format bez gubitaka, ali kad sliku spremite kao PNG datoteku, tražit ćete da odaberete razinu kompresije. Znači li to da PNG format zapravo zapravo nije bez gubitaka? Današnja objava pitanja o SuperUser pomaže razjasniti zbunjenost znatiželjnog čitatelja.

Današnja sesija Pitanja i odgovori dolazi nam zahvaljujući SuperUser-u - pododjelu Stack Exchange-a, grupiranju web stranica s pitanjima i odgovorima koje vodi zajednica.

Pitanje

Čitač SuperUser pkout želi znati utječe li na kvalitetu PNG slike odabrana razina kompresije:

Koliko sam shvatio, PNG datoteke koriste kompresiju bez gubitaka. Međutim, kada koristim uređivač slika, poput Gimpa, i pokušam spremiti sliku kao PNG datoteku, traži se razina kompresije u rasponu od 0 do 9.

Ako ima parametar kompresije koji utječe na vizualnu preciznost komprimirane slike, kako je onda PNG bez gubitaka? Može li mi netko objasniti ovo? Dobivam li ponašanje bez gubitaka samo kad razinu kompresije postavim na 9?

Postoji li razlika u kvaliteti slike ovisno o odabranoj razini kompresije?

Odgovor

Suradnici SuperUser-a LordNeckbeard i jjlin imaju odgovor za nas. Prvo, LordNeckbeard:

PNG je komprimiran, ali bez gubitaka

Razina kompresije predstavlja kompromis između veličine datoteke i brzine kodiranja / dekodiranja. Da bismo pretjerano generalizirali, čak i formati koji nisu slike, poput FLAC-a, imaju slične koncepte.

Različite razine kompresije, isti dekodirani izlaz

Iako su veličine datoteka različite zbog različitih razina kompresije, stvarni dekodirani izlaz bit će identičan. Možete usporediti MD5 hasheve dekodiranih izlaza s ffmpeg koristeći MD5 muxer. To najbolje pokazuje nekoliko primjera.

Stvorite PNG datoteke

  • Prema zadanim postavkama, ffmpeg će koristiti -compression_level 100 za PNG izlaz.
  • Brzi, traljavi test pokazao je da je za kodiranje 100 (najviša razina kompresije) trebalo otprilike tri puta više vremena, a za dekodiranje pet puta duže od 0 (najniža razina kompresije) u ovom primjeru.

Usporedite veličinu datoteke

Dekodirajte PNG datoteke i prikažite MD5 hashove

Budući da su oba hasha ista, možete biti sigurni da su dekodirani izlazi (nekomprimirane sirove datoteke) potpuno jednaki.

Slijedi odgovor jjlina:

PNG je bez gubitaka. GIMP u ovom slučaju najvjerojatnije ne koristi najbolji izbor riječi.

Shvatite to kao kvalitetu kompresije ili razinu kompresije . S nižom kompresijom dobivate veću datoteku, no potrebno je manje vremena za izradu, dok s većom kompresijom dobivate manju datoteku kojoj treba više vremena za izradu.

Tipično dobivate opadajuće prinose, tj. Ne toliko smanjenje veličine u usporedbi s povećanjem vremena potrebno za dolazak na najvišu razinu kompresije, ali to ovisi o vama.

Imate li što dodati u objašnjenje? Zvuk u komentarima. Želite li pročitati više odgovora drugih tehnološki pametnih korisnika Stack Exchangea? Ovdje pogledajte cijelu nit rasprave.