Ist das PNG-Format verlustfrei, da es einen Komprimierungsparameter hat?

Das PNG-Format soll ein verlustfreies Format sein. Wenn Sie jedoch ein Bild als PNG-Datei speichern, werden Sie aufgefordert, eine Komprimierungsstufe auszuwählen. Bedeutet das, dass das PNG-Format eigentlich doch nicht verlustfrei ist? Der heutige SuperUser Q & A-Beitrag hilft einem neugierigen Leser, die Verwirrung zu beseitigen.

Die heutige Frage-Antwort-Sitzung wird uns mit freundlicher Genehmigung von SuperUser zur Verfügung gestellt - einer Unterteilung von Stack Exchange, einer Community-gesteuerten Gruppierung von Q & A-Websites.

Die Frage

SuperUser Reader pkout möchte wissen, ob die Qualität eines PNG-Bildes von der gewählten Komprimierungsstufe beeinflusst wird:

Soweit ich weiß, verwenden PNG-Dateien verlustfreie Komprimierung. Wenn ich jedoch einen Bildeditor wie Gimp verwende und versuche, ein Bild als PNG-Datei zu speichern, wird eine Komprimierungsstufe zwischen 0 und 9 angefordert.

Wie ist PNG verlustfrei, wenn es einen Komprimierungsparameter hat, der die visuelle Genauigkeit des komprimierten Bildes beeinflusst? Kann mir bitte jemand das erklären? Bekomme ich nur dann verlustfreies Verhalten, wenn ich die Komprimierungsstufe auf 9 stelle?

Gibt es je nach gewählter Komprimierungsstufe einen Unterschied in der Bildqualität?

Die Antwort

Die SuperUser-Mitwirkenden LordNeckbeard und jjlin haben die Antwort für uns. Zuerst LordNeckbeard:

PNG ist komprimiert, aber verlustfrei

Die Komprimierungsstufe ist ein Kompromiss zwischen Dateigröße und Codierungs- / Decodierungsgeschwindigkeit. Um es zu verallgemeinern, haben auch Nicht-Bildformate wie FLAC ähnliche Konzepte.

Unterschiedliche Komprimierungsstufen, gleiche dekodierte Ausgabe

Obwohl die Dateigrößen aufgrund der unterschiedlichen Komprimierungsstufen unterschiedlich sind, ist die tatsächlich decodierte Ausgabe identisch. Mit dem MD5-Muxer können Sie die MD5-Hashes der decodierten Ausgänge mit ffmpeg vergleichen. Dies wird am besten anhand einiger Beispiele gezeigt.

Erstellen Sie PNG-Dateien

  • Standardmäßig verwendet ffmpeg -compression_level 100 für die PNG-Ausgabe.
  • Ein schneller, schlampiger Test ergab, dass 100 (die höchste Komprimierungsstufe) in diesem Beispiel ungefähr dreimal länger zum Codieren und fünfmal länger zum Dekodieren als 0 (die niedrigste Komprimierungsstufe) benötigte.

Vergleichen Sie die Dateigröße

Dekodieren Sie die PNG-Dateien und zeigen Sie MD5-Hashes an

Da beide Hashes gleich sind, können Sie sicher sein, dass die decodierten Ausgaben (die unkomprimierten Rohdateien) genau gleich sind.

Gefolgt von der Antwort von jjlin:

PNG ist verlustfrei. GIMP verwendet in diesem Fall höchstwahrscheinlich nicht die beste Wortwahl.

Stellen Sie sich das als Komprimierungsqualität oder Komprimierungsgrad vor . Bei geringerer Komprimierung erhalten Sie eine größere Datei, deren Erstellung jedoch weniger Zeit in Anspruch nimmt. Bei höherer Komprimierung erhalten Sie eine kleinere Datei, deren Erstellung länger dauert.

In der Regel erzielen Sie sinkende Renditen, dh nicht so viel Größe im Vergleich zu der Zeit, die erforderlich ist, um die höchsten Komprimierungsstufen zu erreichen, aber es liegt an Ihnen.

Haben Sie der Erklärung etwas hinzuzufügen? Ton aus in den Kommentaren. Möchten Sie weitere Antworten von anderen technisch versierten Stack Exchange-Benutzern lesen? Den vollständigen Diskussionsthread finden Sie hier.