Wie kann man die Komprimierungsstufe einer PNG-Datei ermitteln und wissen, ob sie verlustbehaftet ist?

1996
TecMan

Kann ich wissen, ob eine PNG-Datei komprimiert wurde und wie (zumindest, ob es sich um eine verlustfreie Komprimierung handelt) in Windows? Wenn ich das Standarddateieigenschaften-Dialogfeld über den Windows-Explorer öffne, sehe ich dazu keine Eigenschaften.

3

2 Antworten auf die Frage

8
Agent_L

PNG wird immer durch den DEFLATE-Algorithmus komprimiert, wie von der PNG-Spezifikation vorgegeben. Dies ist derselbe Algorithmus, der unter anderem vom zip-Kompressor verwendet wird.

Es gibt keine verlustbehafteten Kompressionsalgorithmen für PNGs. PNG ist immer los.

Haftungsausschluss: Es gibt Methoden zum "Optimieren" der PNG-Größe, indem die Qualität (Farbtiefe) eines Bildes verringert wird, bevor es als PNG gespeichert wird. Dies hat nichts mit PNG selbst zu tun und kann weder in PNG noch in der Originaldatei zuverlässig erkannt werden.

In vielen Apps zum Bearbeiten von Bildern können Sie beim Speichern Ihrer Arbeit als PNG einige zusätzliche Parameter angeben. In paint.net sehen wir zum Beispiel die Option 'Dithering Level'. Bei der ZIP-Komprimierung können Sie die Komprimierungsstufe auch mit Archiven wie 7-Zip angeben. Was ist das? Gibt es eine Möglichkeit, diese Informationen aus dem PNG-Header zu lesen, wenn dies überhaupt möglich ist? TecMan vor 8 Jahren 0
@TecMan "Dithering Level" ist eine Option, um das Bild auf 8-Bit-Farben zu reduzieren, ohne PNG zu speichern. Beachten Sie, dass dies für jeden 8-Bit-Speicher gilt, nicht nur für PNGs. Es ist völlig unabhängig vom Dateibetrieb und zeigt, dass es nur Bequemlichkeit gibt. In anderen Editoren machen Sie zuerst "convert-> 8bit" und dann "save as". Bei der Auswahl der ZIP-Komprimierungsstufe habe ich nicht darüber nachgedacht. Aber (da es nicht vorhanden ist) wirkt sich dies nicht auf das Image aus, sondern wirkt sich nur auf die Speicherauslastung beim Komprimieren und Dekomprimieren aus (in 7-zip können Sie den Schätzwert sehen). Agent_L vor 8 Jahren 2
Wenn wir über paint.net sprechen, sind "Dithering Level" und "Bit Depth" zwei verschiedene Optionen, die beim Speichern eines Bildes als PNG eingestellt werden können. Mit jeder Option können wir verschiedene Effekte und Bilder in verschiedenen Größen haben. TecMan vor 8 Jahren 0
@TecMan: Wenn Sie den Komprimierungsgrad mit 7-Zip oder einem anderen Archivierer einstellen, kann er aus einer ZIP-Datei abgerufen werden? Ähnlich scheint es auch nicht im PNG-Header gespeichert zu sein. Was [Dithering] (http://en.wikipedia.org/wiki/Dither#Digital_photography_and_image_processing) betrifft, so hat dies mit der Reduzierung der Streifenbildung im Bild zu tun. Es ist in keiner Weise direkt mit der PNG-Komprimierung verbunden. Der Punkt ist, * warum * möchten Sie diese Details überhaupt wissen? Karan vor 8 Jahren 1
@Karan, in einigen Fällen muss ich wissen, ob ich PNG-Screenshots mit reduzierter Qualität ansehe oder dass sie das Bildschirmbild genau so wiedergeben, wie es war. Wie ich sehen kann, erlaubt es das PNG-Format nicht, diese Informationen zu speichern und einfach abzurufen. TecMan vor 8 Jahren 0
@TecMan Qualitätsminderungen kommen vor dem Speichern als PNG. Es gibt keine Möglichkeit, Informationen über den gesamten Verarbeitungsverlauf eines Bildes in einem beliebigen Dateiformat abzurufen. Agent_L vor 8 Jahren 0
@TecMan: Ich kann mir keine Instanz vorstellen, bei der die Kenntnis der Komprimierungsstufe beim Anzeigen von Screenshots einen Unterschied ausmacht, aber vielleicht ist es Ihnen aus irgendeinem Grund wichtig. Egal, Sie haben Ihre Antwort. Karan vor 8 Jahren 1
2
pvc

Das Schätzen der Komprimierungsrate einer Bilddatei ist eigentlich ziemlich einfach. Sie müssen die Breite, Höhe und Bittiefe des Bildes kennen. Um zu berechnen, wie viel Daten würden von unkomprimierten RAW - Bilddaten benötigt werden, müssen Sie diese einfache Sache tun: raw data size = image width * image heigth * (bits per pixel / 8). Dann teilen raw data sizeSie einfach durch die Dateigröße Ihres PNGs nach und Sie haben die geschätzte Komprimierungsrate (nicht den genauen Wert aufgrund der Kopfzeilen usw.). Für ein 640x480x32-Image wäre beispielsweise 640 * 480 * (32 / 8)1 273 800 Byte erforderlich . Nehmen wir jetzt an, dass Ihr PNG 200kB hat. Sie teilen (200 * 1024) / 1273800. Das ergibt ein Kompressionsverhältnis von etwa 0,16.

Und erinnere dich an eine Tatsache. Manchmal werden 24-Bit-Bilder tatsächlich als 32-Bit-Wert gespeichert. Das muss man berücksichtigen.

Es ist eine manuelle und etwas grobe Berechnung. Die Frage war, wie man das automatisch erkennt. Wie auch immer, +1 auf deine Antwort. TecMan vor 8 Jahren 0