Zusammenfassung vorab: PNG ist deshalb eine verlustfreie Komprimierung, weil es den DEFLATE-Algorithmus verwendet — LZ77-Wörterbuchkomprimierung und Huffman-Codierung sind beide vollständig reversible mathematische Operationen, sodass die dekomprimierten Daten mit den Originaldaten bytegenau übereinstimmen. Der PNG-Komprimierungsablauf: Pixeldaten werden zuerst durch Filterzeilen-Vorhersage von Redundanzen zwischen benachbarten Pixeln befreit, dann mit dem DEFLATE-Algorithmus komprimiert. Ein 3000x2000-UI-Screenshot wird durch PNG von ursprünglich 17,2 MB auf 0,35 MB komprimiert — eine Reduktion von 97,9%, wobei jeder Pixelwert unverändert bleibt. Im Folgenden wird dies aus zwei Perspektiven erläutert: PNG-Dateistruktur und DEFLATE-Algorithmus-Prinzip.
Wenn Sie mit der Gesamtmethodik der Bildkomprimierung noch nicht vertraut sind, empfehlen wir, zunächst den Leitfaden zur Bildkomprimierung: JPG/PNG/WebP-Formatvergleich zu lesen.
1. PNG-Dateistruktur: Wie sind die Daten organisiert
Eine PNG-Datei besteht aus einer Reihe von Datenblöcken (Chunks), von denen jeder einen Typ, eine Länge, Daten und eine Prüfsumme enthält. Das Verständnis der Funktion dieser Chunks ist der Schlüssel zum Verständnis der internen Struktur von PNG-Dateien.
| Datenblock | Vollständiger Name | Funktion | Erforderlich? | Typische Größe |
|---|---|---|---|---|
| Signatur | PNG Signature | 8-Byte-Dateikennung (89 50 4E 47 0D 0A 1A 0A) | erforderlich | 8 Byte |
| IHDR | Image Header | Bildgrundinformationen (Breite/Höhe/Farbtiefe/Farbtyp) | erforderlich | 25 Byte |
| IDAT | Image Data | Komprimierte Pixeldaten (DEFLATE-codiert) | erforderlich | variabel (Hauptteil) |
| IEND | Image End | Dateiende-Markierung | erforderlich | 12 Byte |
| PLTE | Palette | Farbpalette (Indiziertfarben-Modus) | für Indiziertfarben erforderlich | ≤768 Byte |
| tRNS | Transparency | Transparenzinformationen | optional | variabel |
| tEXt | Text | Text-Metadaten (Autor/Beschreibung etc.) | optional | variabel |
| gAMA | Image Gamma | Gamma-Korrektur-Informationen | optional | 16 Byte |
Der wichtigste Chunk einer PNG-Datei ist IDAT, der die durch Filterzeilen-Vorhersage und DEFLATE-Komprimierung verarbeiteten Pixeldaten speichert. Ein 3000x2000-24-Bit-RGB-Bild hat ursprüngliche Pixeldaten von ca. 17,2 MB (3000x2000x3 Byte); nach der PNG-Komprimierung kann der IDAT-Abschnitt nur 0,3–0,5 MB betragen. Der Komprimierungseffekt hängt hauptsächlich von der Wiederholbarkeit des Bildinhalts ab — großflächige einfarbige Bereiche erreichen die höchste Komprimierungsrate, rauschintensive Fotos die niedrigste.
2. DEFLATE-Algorithmus-Prinzip: LZ77 + Huffman zweistufige Komprimierung
Die Kern-Komprimierungs-Engine von PNG ist der DEFLATE-Algorithmus, der aus zwei Schritten besteht: Im ersten Schritt eliminiert die LZ77-Wörterbuchkomprimierung wiederholte Sequenzen, im zweiten Schritt eliminiert die Huffman-Codierung Codierungsredundanz. Beide Schritte sind verlustfreie, reversible Operationen — das ist die grundlegende Ursache für die Verlustfreiheit der PNG-Komprimierung.
| Schritt | Algorithmus | Prinzip | Eliminierte Redundanz | Reversibilität |
|---|---|---|---|---|
| Schritt 1 | LZ77 | Sucht wiederholte Byte-Sequenzen und ersetzt sie durch (Distanz, Länge)-Referenzen | Wiederholte Sequenz-Redundanz | vollständig reversibel |
| Schritt 2 | Huffman-Codierung | Hochfrequente Daten erhalten kurze Codes, niederfrequente lange | Codierungsredundanz | vollständig reversibel |
1. LZ77-Wörterbuchkomprimierung
LZ77 ist ein „Sliding-Window"-Wörterbuch-Komprimierungsalgorithmus. Er unterhält ein Sliding Window (typischerweise 32 KB) und sucht innerhalb des Fensters nach der längsten Byte-Sequenz, die mit der aktuellen Position übereinstimmt. Wenn eine Übereinstimmung gefunden wird, wird diese Byte-Sequenz durch eine (Distanz, Länge)-Referenz ersetzt; wenn keine Übereinstimmung gefunden wird, werden die Originalbytes ausgegeben.
Beispiel: Angenommen, die Bilddaten enthalten aufeinanderfolgende weiße Pixel (RGB 255,255,255), die 1000-mal wiederholt werden. LZ77 findet dieses Wiederholungsmuster im Fenster — nach dem ersten Tripel werden die folgenden 999 Tripel durch eine Referenz „3 Byte zurück, 3 Byte kopieren, 999-mal wiederholen" ersetzt. 3000 Byte Originaldaten werden zu einer Referenzsequenz von wenigen Bytes komprimiert — eine Komprimierungsrate von über 99%.
| Datenmerkmal | LZ77-Komprimierungseffekt | Typische Komprimierungsrate | Grund |
|---|---|---|---|
| Großflächig einfarbig | ausgezeichnet | 95%+ | Lange Wiederholungssequenzen, hohe Referenz-Effizienz |
| Horizontaler Verlauf | gut | 70%–85% | Verlaufsmuster können gematcht werden |
| Regelmäßige Textur | gut | 60%–80% | Texturwiederholung referenzierbar |
| Zufälliges Rauschen | schlecht | 0%–10% | Keine Wiederholungssequenzen matchbar |
| Naturfoto | schlecht | 5%–20% | Große Pixelunterschiede, wenige Matches |
2. Huffman-Codierung
Die von LZ77 ausgegebenen Daten (Mix aus Referenzen und Originalbytes) werden dann Huffman-codiert. Das Kernprinzip der Huffman-Codierung: Häufig vorkommende Symbole erhalten kurze Codes, selten vorkommende lange, wodurch die durchschnittliche Codelänge reduziert wird.
Beispiel: Wenn in der LZ77-Ausgabe „Referenzmarkierungen" 60% der Häufigkeit ausmachen, der Originalbytewert 255 20% und andere Werte jeweils einen geringen Anteil haben, würde Huffman der „Referenzmarkierung" einen 2-Bit-Code, dem Wert 255 einen 3-Bit-Code und niederfrequenten Werten 8–12-Bit-Codes zuweisen. So sinkt die durchschnittliche Codelänge pro Symbol von fixen 8 Bit auf 3–4 Bit, was eine weitere Komprimierung von ca. 50% bewirkt.
DEFLATE verwendet zwei Huffman-Codierungsmodi: festes Huffman-Baum (vorgegebene Codierungstabelle, schnell aber mittlere Komprimierungsrate) und dynamisches Huffman-Baum (auf Basis tatsächlicher Datenfrequenzen optimaler Codierungsbaum, höhere Komprimierungsrate aber zusätzliche Speicherung der Codierungstabelle). Der PNG-Standard erfordert die dynamische Huffman-Codierung für optimale Komprimierung.
3. Verlustfreier Komprimierungsmechanismus: Filterzeilen-Vorhersage + DEFLATE
Die verlustfreie Komprimierung von PNG beruht nicht nur auf dem DEFLATE-Algorithmus, sondern auch auf einem entscheidenden Vorverarbeitungsschritt — der Filterzeilen-Vorhersage (Filter). Dieser Schritt wird vor DEFLATE ausgeführt und bezweckt, die Pixeldaten für die LZ77-Komprimierung besser vorzubereiten.
Benachbarte Pixel in einem Bild haben üblicherweise ähnliche Werte (z. B. in einem Himmelbereich sind die Pixelwerte ähnlich). Die Filterzeilen-Vorhersage subtrahiert von jedem Pixelwert den Wert seines linken oder oberen Nachbarn und wandelt so absolute Werte in Differenzwerte um — diese sind typischerweise klein oder null, ein Datenmuster, das besser für LZ77- und Huffman-Komprimierung geeignet ist.
| Filtertyp | Name | Vorhersageformel | Anwendungsszenario |
|---|---|---|---|
| 0 | None | Keine Vorhersage, Originalwerte | Unregelmäßige Rauschdaten |
| 1 | Sub | Aktueller Wert - linker Wert | Horizontale Verlaufsbilder |
| 2 | Up | Aktueller Wert - oberer Wert | Vertikale Verlaufsbilder |
| 3 | Average | Aktueller Wert - (links+oben)/2 | Gleichmäßige Übergangsbilder |
| 4 | Paeth | Aktueller Wert - Paeth-Vorhersagewert | Universell (optimal für die meisten Bilder) |
Der PNG-Encoder kann für jede Zeile unabhängig einen Filtertyp wählen. SmartSlim probiert auf Basis der selbstentwickelten Rust-Komprimierungs-Engine für jede Zeile alle 5 Filtermethoden und wählt die mit dem besten Komprimierungsergebnis — dies reduziert die Größe um zusätzliche 10%–20% gegenüber der Verwendung eines einzigen Filters.
Vollständiger Komprimierungsablauf:
Originalpixel -> Filterzeilen-Vorhersage (optimaler Filter) -> LZ77-Wörterbuchkomprimierung -> Huffman-Codierung -> IDAT-Datenblock
Dekomprimierungsablauf (vollständig umgekehrt):
IDAT-Datenblock -> Huffman-Decodierung -> LZ77-Dekomprimierung -> inverse Filterung -> Originalpixel
Beide Schritte sind exakte mathematische Inverse Operationen. Die dekomprimierten Pixeldaten sind mit den Originaldaten byteidentisch — das ist die grundlegende Garantie für die Verlustfreiheit von PNG.
4. Praxisvergleich: PNG vs JPEG vs WebP Dateigrößen
Wir haben denselben Satz von Testbildern verwendet, um die Komprimierungseffekte der drei Formate zu vergleichen, abdeckend verschiedene Bildinhaltstypen.
| Bildtyp | Größe | Original BMP | PNG | JPEG (q80) | WebP (q80) | PNG-Komprimierungsrate |
|---|---|---|---|---|---|---|
| UI-Screenshot | 1920x1080 | 5,93 MB | 0,35 MB | 0,82 MB | 0,28 MB | 94,1% |
| Drahtgittermodell | 2000x1500 | 8,58 MB | 0,42 MB | 1,15 MB | 0,35 MB | 95,1% |
| Naturfoto | 3000x2000 | 17,16 MB | 12,50 MB | 1,80 MB | 1,42 MB | 27,2% |
| Porträtfoto | 4000x3000 | 34,33 MB | 28,80 MB | 3,50 MB | 2,80 MB | 16,1% |
| Icon-Set | 1024x1024 | 3,00 MB | 0,08 MB | 0,45 MB | 0,06 MB | 97,3% |
| Scan-Dokument | 2480x3508 | 24,80 MB | 1,20 MB | 0,85 MB | 0,72 MB | 95,2% |
Die Praxisdaten zeigen eine Schlüsselerkenntnis: Der PNG-Komprimierungseffekt hängt stark vom Bildtyp ab. Für UI-Screenshots, Drahtgittermodelle, Icons und andere Bilder mit großen einfarbigen Flächen erreicht PNG Komprimierungsraten von 94%–97% und übertrifft JPEG deutlich. Für Naturfotos und Porträtfotos mit großen Pixelunterschieden liegt die PNG-Komprimierungsrate bei nur 16%–27%, weit hinter JPEGs 89%–90%.
Vergleich von Standard-PNG und optimiertem PNG:
| Bildtyp | Standard-PNG | Optimiertes PNG | Reduktion | Optimierungsmethode |
|---|---|---|---|---|
| UI-Screenshot | 0,42 MB | 0,35 MB | 16,7% | Paeth-Filter + zlib höchste Stufe |
| Drahtgittermodell | 0,52 MB | 0,42 MB | 19,2% | Zeilenweise optimale Filterung + Metadaten gelöscht |
| Icon-Set | 0,12 MB | 0,08 MB | 33,3% | Konvertierung zu 8-Bit-Indiziert + optimierte Filterung |
| Scan-Dokument | 1,50 MB | 1,20 MB | 20,0% | Zeilenweise optimale Filterung + gAMA gelöscht |
SmartSlims PNG-Optimierung kann die Größe um weitere 15%–33% gegenüber Standard-PNG reduzieren. Der Kern ist die Kombination aus zeilenweiser optimaler Filterauswahl und der höchsten zlib-Komprimierungsstufe.
Weitere Formatvergleiche finden Sie unter Verlustfreie vs. verlustbehaftete Komprimierung: Kernunterschiede und WebP vs PNG vs JPG Formatvergleich.
5. Häufig gestellte Fragen (FAQ)
F1: Warum ist die PNG-Komprimierung verlustfrei?
PNG verwendet den DEFLATE-Algorithmus zur Datenkomprimierung, der aus zwei Schritten besteht: LZ77-Wörterbuchkomprimierung und Huffman-Codierung. LZ77 sucht nach wiederholten Byte-Sequenzen und ersetzt diese durch Distanz+Länge-Referenzen. Huffman verwendet variable Codierung, sodass hochfrequente Daten kurze Codes erhalten. Beide Schritte sind reversible Operationen — beim Dekomprimieren stellt die Huffman-Decodierung die variablen Codes wieder her und LZ77 regeneriert die Originalbytes anhand der Referenzen. Die Daten sind vollständig identisch und gehen nicht verloren, daher ist PNG eine verlustfreie Komprimierung.
F2: Welches Format hat eine höhere Komprimierungsrate: PNG oder JPEG?
Bei fotoähnlichen Bildern ist die JPEG-Komprimierungsrate deutlich höher als bei PNG. Ein 3000x2000-Foto: PNG ca. 12,5 MB, JPEG Qualität 80 ca. 1,8 MB — ein Faktor von 7. Denn JPEG verwendet die verlustbehaftete DCT-Transformation, die hochfrequente Details verwirft, während PNG jeden Pixel verlustfrei erhalten muss. Für Drahtgittermodelle, Screenshots, Icons und andere Bilder mit großen einfarbigen Flächen ist PNG jedoch kleiner — ein UI-Screenshot als PNG 0,3 MB, als JPEG Qualität 80 ca. 0,8 MB. Die Formatwahl hängt vom Inhaltstyp ab.
F3: Wie hoch ist die maximale PNG-Komprimierungsrate?
Abhängig vom Bildinhalt. Bei Bildern mit großen einfarbigen Flächen oder Verläufen kann die Komprimierungsrate über 90% liegen (z. B. UI-Screenshot von 5 MB auf 0,3 MB). Bei rauschintensiven Fotos liegt die Komprimierungsrate meist nur bei 10%–30%, da die Pixelunterschiede groß sind und LZ77 keine wiederholten Sequenzen findet. Die theoretische Grenze des DEFLATE-Algorithmus von PNG liegt etwa auf dem Niveau der ZIP-Komprimierung und kann nicht wie JPEG durch Informationsverlust extrem hohe Komprimierungsraten erreichen.
F4: Was ist der Unterschied zwischen PNG-Optimierung und PNG-Komprimierung?
PNG-Komprimierung bezeichnet die Codierung der originalen Pixeldaten mit DEFLATE in das PNG-Format — ein Standardprozess. PNG-Optimierung geht darüber hinaus und reduziert die Größe zusätzlich, einschließlich: Ausprobieren aller 5 Filterzeilen-Vorhersagen zur Auswahl der optimalen, Verwendung der höchsten zlib-Komprimierungsstufe, Löschen von Metadaten-Chunks (wie tEXt/gAMA) und Konvertierung von 24-Bit-RGBA in 8-Bit-Indiziertfarben (falls ≤256 Farben). SmartSlims PNG-Optimierung kann die Größe um weitere 15%–30% gegenüber Standard-PNG reduzieren.
Zusammenfassung
Dass PNG verlustfreie Komprimierung erreicht, beruht auf der Tatsache, dass die beiden Schritte des DEFLATE-Algorithmus — LZ77 und Huffman — vollständig reversible mathematische Operationen sind, ergänzt durch die Filterzeilen-Vorhersage als Vorverarbeitung zur Verbesserung der Datenkomprimierbarkeit. PNG erreicht hervorragende Komprimierungseffekte bei UI-Screenshots, Drahtgittermodellen, Icons und anderen Bildern mit großen einfarbigen Flächen (Komprimierungsrate 94%–97%), hat jedoch eine begrenzte Komprimierungsrate bei Fotos (16%–27%) — in diesen Fällen sollte JPEG oder WebP gewählt werden.
Wenn Sie die Größe von PNG-Bildern optimieren müssen, bietet SmartSlim auf Basis der Rust-Komprimierungs-Engine zeilenweise optimale Filterung und zlib-Komprimierung auf höchster Stufe, was die Größe um weitere 15%–33% gegenüber Standard-PNG reduziert. Unterstützung für png/jpg/jpeg/webp/bmp/tiff und 9 Bildformate, lokale Komprimierung ohne Datenexport.
Verwandte Artikel
Dateien komprimieren? Probieren Sie SmartSlim
Basierend auf einer selbstentwickelten Rust-Komprimierungs-Engine, unterstützt 10 Kategorien und über 40 Formate, darunter PDF, Bilder, Video, Office und OFD, mit lokaler Komprimierung, die Ihre Daten vor Ort behält.