If-Koubou

Este PNG Format Lossless deoarece are un parametru de compresie?

Este PNG Format Lossless deoarece are un parametru de compresie? (Cum să)

Formatul PNG trebuie să fie un format fără pierderi, dar când salvați o imagine ca fișier PNG, vi se cere să alegeți un nivel de compresie. Acest lucru înseamnă că formatul PNG nu este de fapt, fără pierderi, la urma urmei? Postul de astăzi SuperUser Q & A ajută la clarificarea confuziei pentru un cititor curios.

Sesiunea de întrebări și răspunsuri din ziua de astăzi vine de la amabilitatea SuperUser - o subdiviziune a Stack Exchange, o grupare bazată pe comunitate a site-urilor Q & A.

Intrebarea

Aplicația de citire a super-utilizatorului pkout dorește să știe dacă calitatea imaginii PNG este afectată de nivelul de compresie ales:

După cum am înțeles, fișierele PNG utilizează compresie fără pierderi. Cu toate acestea, când folosesc un editor de imagini, cum ar fi Gimp, și încerc să salvez o imagine ca fișier PNG, acesta cere un nivel de compresie cuprins între 0 și 9.

Dacă are un parametru de comprimare care afectează precizia vizuală a imaginii comprimate, cum este PNG fără pierderi atunci? Poate cineva să-mi explice asta? Nu am comportament fără pierderi decât atunci când am setat nivelul de compresie la 9?

Există o diferență în calitatea imaginii în funcție de nivelul de compresie pe care îl alegeți?

Răspunsul

Contribuabili SuperUser LordNeckbeard și jjlin au răspunsul pentru noi. În primul rând, LordNeckbeard:

PNG este comprimat, dar fără pierderi

Nivelul de compresie este un compromis între dimensiunea fișierului și viteza de codare / decodare. Pentru a generaliza prea mult, formatele non-imagine, cum ar fi FLAC, au concepte similare.

Diferite niveluri de compresie, aceeași ieșire decodificată

Deși dimensiunile fișierelor sunt diferite datorită diferitelor niveluri de compresie, ieșirea reală decodificată va fi identică. Puteți compara machetele MD5 ale ieșirilor decodate cu ffmpeg folosind muxerul MD5. Acest lucru este indicat cel mai bine cu câteva exemple.

Creați fișiere PNG

  • În mod implicit, ffmpeg va folosi -compression_level 100 pentru ieșirea PNG.
  • Un test rapid și necorespunzător a arătat că 100 (cel mai mare nivel de compresie) a durat aproximativ 3 ori mai mult pentru a codifica și de cinci ori mai mult pentru a decoda decât 0 (cel mai mic nivel de compresie) din acest exemplu.

Comparați dimensiunea fișierului

Decodificați fișierele PNG și afișați hash-urile MD5

Deoarece ambele hashes sunt aceleași, puteți fi siguri că ieșirile decodate (fișierele brute necomprimate) sunt exact aceleași.

Urmat de răspunsul de la jjlin:

PNG este fără pierderi. GIMP, cel mai probabil, nu folosește cea mai bună alegere de formulare în acest caz.

Gândiți-vă la asta calitatea compresiei sau nivel de compresie. Cu o compresie mai mică, obțineți un fișier mai mare, dar este nevoie de mai puțin timp pentru a produce, în timp ce cu o compresie mai mare obțineți un fișier mai mic care durează mai mult timp pentru a fi produs.

De obicei, obțineți randamente reduse, adică nu atât diminuarea dimensiunilor, cât și creșterea timpului necesar pentru a ajunge la cele mai ridicate niveluri de compresie, dar depinde de dvs.

Aveți ceva de adăugat la explicație? Sunați în comentarii. Doriți să citiți mai multe răspunsuri de la alți utilizatori de tehnologie Stack Exchange? Check out discuția completă aici.