Was ist PNG?
Portable Network Graphics (PNG) ist ein Rasterbildformat mit verlustfreier Kompression. Es speichert Bilder mit indizierten Farben (Palette), Graustufen oder RGB mit 1 bis 16 Bit pro Abtastwert, jeweils optional mit Alphatransparenz, und hat keinen CMYK-Farbtyp.
So funktioniert PNG
Ein PNG-Datenstrom besteht aus einer acht Byte langen Signatur, gefolgt von Chunks, die jeweils eine Länge, einen Typ aus vier Buchstaben, Daten und eine CRC enthalten. Vier Chunk-Typen sind kritisch: IHDR (Abmessungen, Bittiefe und Farbtyp), PLTE (die Palette eines Bildes mit indizierten Farben), IDAT (die komprimierten Pixel) und IEND. Vor der Kompression stellt der Encoder jeder Bildzeile ein Filtertyp-Byte voran. Es wählt entweder keine Filterung oder einen von vier Filtern, die jedes Byte als Differenz zu einer Vorhersage anhand benachbarter Bytes speichern. Der gefilterte Datenstrom wird anschließend mit DEFLATE komprimiert, dem einzigen Kompressionsverfahren, das die Spezifikation definiert. Beide Schritte sind umkehrbar, sodass das Decodieren exakt die Abtastwerte zurückliefert, die codiert wurden. Ergänzende Chunks enthalten optionale Informationen wie Farbraum (sRGB, iCCP, cICP), Pixeldichte (pHYs), Text und Exif-Metadaten (eXIf). Ein Decoder darf einen ergänzenden Chunk ignorieren, den er nicht erkennt. Einen unbekannten kritischen Chunk muss er dagegen melden, statt ihn stillschweigend zu überspringen.
Wichtige Fakten
- PNG-Kompression ist verlustfrei. Die Filterauswahl und die DEFLATE-Einstellungen wägen daher Encoding-Zeit gegen Dateigröße ab und verändern niemals die decodierten Pixel. Ein verlustfreier Optimierer kann eine Datei auch verkleinern, indem er Metadaten-Chunks entfernt oder dieselben Pixel kompakter darstellt, etwa durch Entfernen eines vollständig deckenden Alphakanals. Eine kleinere Datei allein zeigt daher nicht, dass sich Pixel verändert haben. Palettenquantisierer wie pngquant oder Encoder-Optionen wie
palettevon sharp erzeugen ein gültiges PNG mit indizierten Farben und höchstens 256 Farben, dessen Pixel von der Quelle abweichen können. - Für Farbbilder mit 256 oder weniger Farben empfiehlt die PNG-Spezifikation fast immer indizierte Farben, da Echtfarben voraussichtlich deutlich größere Dateien ergeben. Die Umwandlung ist exakt, wenn das Bild unter Einbeziehung von Alpha höchstens 256 unterschiedliche Pixelwerte bei 8 Bit pro Abtastwert oder weniger hat. Für Fotografien bietet das Format keinen verlustbehafteten Modus als Ausweichmöglichkeit: Der Formatleitfaden von MDN empfiehlt PNG für Screenshots, Diagramme und Liniengrafiken sowie ein verlustbehaftetes Format für Fotografien. Ein öffentlicher Fehlerbericht zu sharp beschreibt zudem ein PNG, das nach dem Verkleinern größer ausfiel als seine JPEG-Quelldatei.
- Transparenz gibt es in drei Formen. Die Farbtypen 4 und 6 enthalten einen vollständigen Alphakanal mit 8 oder 16 Bit pro Abtastwert. Ein Bild mit indizierten Farben kann in einem Chunk namens
tRNSeinen Alphawert pro Paletteneintrag auflisten. Ein Paletten-PNG kann daher teilweise transparent sein. Bei Graustufenbildern und Echtfarbenbildern ohne Alphakanal kanntRNSnur einen einzigen Farbwert als vollständig transparent markieren. Die gespeicherten Farbwerte sind nicht mit Alpha vormultipliziert. - PNG kann keine CMYK-Daten enthalten. Farbbilder sind RGB- oder palettenbasiert. Ein eingebettetes ICC-Profil muss ein RGB-Profil sein, bei Graustufenbildern ein Graustufenprofil. Die Spezifikation weist Autoren von Erweiterungen an, keine Chunks hinzuzufügen, die RGB als CMYK umdeuten. Die Farbraum-Chunks (
sRGB,iCCP,cICPodergAMAmitcHRM) sind optional. Ohne sie behandelt die Spezifikation die Abtastwerte als unkalibrierte, geräteabhängige Farben. Prüfen Sie daher, ob ein Werkzeug, das ergänzende Chunks entfernt, diejenigen beibehält, von denen Ihre Farben abhängen.
Wann PNG relevant ist
Wählen Sie PNG für Screenshots, Diagramme, Liniengrafiken und andere Grafiken mit scharfen Kanten oder für Dateien, deren Transparenz und exakte Pixel beim Encoding erhalten bleiben müssen. Fotografien und andere Halbtonbilder vertragen üblicherweise verlustbehaftete Kompression, daher ist dort meist ein verlustbehaftetes Format die erste Wahl. PNG bewahrt jeden Abtastwert, was bei solchen Bildern oft zu größeren Dateien führt.
So hilft Transloadit bei PNG
Transloadits Bildformattabelle führt PNG als Format auf, das die ImageMagick-basierten Robots lesen und schreiben können. Außerdem nennt /image/resize das Format png unter seinen Ausgabeformaten. /image/optimize verkleinert PNG-Dateien standardmäßig mit verlustfreien Kompressoren. Wird lossy: true gesetzt, kann auch pngquant am Vergleich teilnehmen und das Bild auf eine Palette mit 256 Farben reduzieren.
Mit lossy: true gewinnt das kleinste der verlustfreien und verlustbehafteten Ergebnisse. Die Ausgabe bleibt somit eine PNG-Datei, ist aber nicht mehr garantiert pixelidentisch mit der Eingabe. Die Dokumentation des Robots warnt vor möglichen Farbverschiebungen.
Entdecken Sie Transloadits Möglichkeiten für Dateiformate & Komprimierung
Quellen
- W3C-PNG-Spezifikation (dritte Ausgabe): Chunk-Aufbau (Abschnitt 5.3), Filterung (9), IHDR-Farbtypen und Bittiefen (11.2.1), tRNS (11.3.1.1), iCCP (11.3.2.3), Filterauswahl (Abschnitt 12.7)
- MDN: Leitfaden zu Bilddateitypen und Bildformaten (PNG-Abschnitt und Empfehlungen zu Fotografien gegenüber Liniengrafiken)
- Ausgabeoptionen von sharp: Kompressionsstufe, adaptive Filterung und Palettenquantisierung bei png()
- sharp-Fehlerbericht #2213: PNG-Ausgabe ist nach dem Verkleinern größer als die JPEG-Quelle