# Portable Network Graphics

Portable Network Graphics (PNG, englisch für „portable Netzwerkgrafik“, als Akronym auch silbisch ausgesprochen [pɪŋ]) ist ein Grafikformat für Rastergrafiken mit verlustfreier Datenkompression. Es ist vom World Wide Web Consortium (W3C) anerkannt und das meistverwendete verlustfreie Grafikformat im Internet.
PNG wurde als freier Ersatz für das ältere, bis zum Jahr 2006 mit Patentforderungen belastete Graphics Interchange Format (GIF) entworfen und ist weniger komplex als das Tagged Image File Format (TIFF). PNG unterstützt neben unterschiedlichen Farbtiefen auch Transparenz per Alphakanal. PNG-Fotos sind in der Regel wesentlich größer als JPEG. Das PNG-Format konnte lange Zeit nicht ohne Weiteres in Browsern dargestellt werden, so dass es sich erst nach Jahren neben JPEG und GIF behaupten konnte.

## Geschichte

Die Entwicklung des PNG-Formats begann Ende 1994, verglichen mit anderen Grafikformaten wie TIFF, GIF und JFIF (JPEG) also recht spät. Auslöser waren Lizenzforderungen der Softwarefirma Unisys für den von GIF verwendeten Lempel-Ziv-Welch-Algorithmus (LZW).
Am 4. Januar 1995 legte Thomas Boutell einen frühen Entwurf (PBF Draft 1) vor. Die erste richtige PNG-Spezifikation (Version 1.0) von Thomas Boutell und Tom Lane wurde bereits am 1. Oktober 1996 offizielle Empfehlung des World Wide Web Consortium (W3C). Am 14. Oktober 1996 erhielt PNG von der Internet Assigned Numbers Authority (IANA) den MIME-Typ image/png zugewiesen. Am 15. Januar 1997 wurde PNG von der Internet Engineering Task Force (IETF) als RFC 2083 verabschiedet. Am 31. Dezember 1998 erschien die von Adam Costello und Glenn Randers-Pehrson überarbeitete PNG-Spezifikation Version 1.1. Am 11. August 1999 veröffentlichte Glenn Randers-Pehrson schließlich die bisher letzte Version 1.2. Diese wurde am 10. November 2003 zum ISO-Standard ISO/IEC 15948:2003 erhoben und gleichzeitig zur zweiten Ausgabe der W3C-Empfehlung.
Mittlerweile ist das PNG-Format weit verbreitet; es hat vor allem GIF ersetzt bei verlustfrei stark komprimierbaren Grafiken wie beispielsweise Buttons, Icons und Logos. Für Fotos wird es meist nur dann verwendet, wenn deren verlustfreie Speicherung Vorrang hat vor einer geringen Datengröße, da verlustbehaftete Kompression (wie z. B. durch JPEG) Fotos i. A. noch deutlich stärker komprimieren kann, ohne dass für das menschliche Auge signifikante Qualitätsverluste auftreten.

## Eigenschaften
### Farbmodi und Präzision

Das PNG-Format ermöglicht Graustufen-, Vollfarb- und Farbpaletten-Modus, sowie einen Graustufen- und einen Farbmodus mit Alpha-Kanal (Farb-Typen 0, 2, 3, 4 und 6).

#### Farbtiefen

Bei Graustufenbildern kann die Auflösung 1, 2, 4, 8 oder 16 Bit pro Pixel betragen, bei Farbbildern 8 (RGB8) oder 16 Bit (RGB16) pro Farbkanal. Farbbilder können alternativ mit dem Farbpalettenmodus mit bis zu 256 indizierten Farben gespeichert werden. Die indizierten Farben sind aus dem vollen RGB8-Spektrum frei wählbar.

#### Transparenz

PNG-Dateien können Transparenzinformationen enthalten, entweder in Form eines Alphakanals, als einzelne transparente Farbe oder als ergänzende Transparenzpalette zu einer vorhandenen Farbpalette, die zu jeder Palettenfarbe einen Transparenzwert enthält.
PNG unterstützt Alphakanäle mit 8 Bit oder 16 Bit Tiefe. Es handelt sich um einen Kanal mit einer zusätzlichen Information für jedes Pixel. Diese gibt in unterschiedlichen Abstufungen die Deckkraft an, wie viel vom Hintergrund eines Bildes durchscheinen soll. Ist dieser Wert 0, so scheint der Hintergrund vollständig zu 100 % durch. Wird bei einer Tiefe von 8 Bit der Maximalwert von 255 angegeben (beziehungsweise 65535 bei 16 Bit), entspricht dies einer vollständigen Deckung. Der Hintergrund ist in diesem Fall nicht sichtbar.
Das PNG-Format erlaubt somit unabhängig vom Hintergrund die Kanten von Text und Bildern zu glätten. Man kann echte Schlagschatten verwenden, die im Hintergrund ausblenden.

### Metadaten und Datenblöcke

PNG-Dateien sind aus verschiedenen Datenblöcken (englisch „chunks“) mit jeweils unterschiedlichen Funktionen aufgebaut, die durch eine Zeichenkette aus vier Buchstaben gekennzeichnet werden (beispielsweise tEXt für textuelle Informationen). Neben den Pflicht-Blocktypen IHDR, IDAT, PLTE und IEND, die jede Implementierung unterstützen muss, sind weitere optionale Datenblöcke standardisiert. Diese können Metadaten zu den Bildinhalten und andere Zusatzinformationen enthalten, etwa zur Farbkorrektur. Diese können mit Programmen wie TweakPNG bearbeitet werden. Anwendungen können auch private Datenblöcke für eigene Zwecke definieren. Adobe Fireworks verwendet PNG als Anwendungsformat und nutzt private Datenblöcke, um darin verschiedene weitere Informationen abzulegen. Dabei besteht allerdings auch Verwechslungsgefahr mit den wesentlich kleineren, normalen PNG-Dateien.

## Technische Details
### Dateikopf

Eine PNG-Datei beginnt immer mit der folgenden, acht Byte langen Signatur (Magische Zahl):
| Byte(s) (hex) | Bemerkung |
| 89 | Tabulator mit gesetztem Bit 7 |
| 50 4E 47 | ASCII-Zeichenkette „PNG“; ermöglicht das leichte Identifizieren des Dateiformats bei Textansicht oder in einem Texteditor. |
| 0D 0A | CR und LF (MS-DOS-typisches Zeilenende) |
| 1A | Das Zeichen End of File. Dieses Byte würde die Ausgabe abbrechen, falls die Datei zum Beispiel mit dem MS-DOS-Befehl TYPE ausgegeben würde. |
| 0A | Zeilenvorschub |

### Komprimierung

Die verlustfreie Datenkompression in PNG basiert auf mehreren, teils optionalen Verarbeitungsschritten. Zuerst können mit einem Vorfilter die Werte benachbarter Bildpunkte dekorreliert werden, um sie besser komprimierbar über eine Differenz zu Nachbarwerten beschreiben zu können. Dann kann mit einer Substitutionskompressionsmethode versucht werden, wiederkehrende Bildmuster zu erkennen und durch kürzere Rückverweise auf ein vorheriges Auftreten zu ersetzen. Abschließend wird eine Entropiekodierung angewendet, die Auftrittswahrscheinlichkeiten einzelner Werte ausnutzt, indem sie die Werte nach Wahrscheinlichkeit sortiert durch Codes variabler Länge ersetzt.
Das nebenstehende „Bananenbild“ zeigt, welche Bildbereiche wie effizient komprimiert werden können.

#### Dekorrelation

In der Regel korreliert der Farbwert eines Bildpunktes mit Werten von Nachbarpunkten, das heißt, es besteht eine Abhängigkeit oder Ähnlichkeit. Um diese Korrelationen auszunutzen, unterstützt PNG Vorfilter, die die Ausgangsdaten zunächst dekorrelieren. Dadurch werden Bildpunkte über die Differenz zu Nachbarpunkten beschrieben (Delta-Kodierung). Zu jeder Bildzeile kann eine von 5 Filtermöglichkeiten bestimmt werden (siehe unten). Die Auswahl erfolgt aus Geschwindigkeitsgründen oft heuristisch. Diese Filter ersetzen auf umkehrbare Weise die Farbwerte der Bildpunkte durch (ebenso viele, ebenso große) Differenzwerte. Dieses Differenzsignal hat in der Regel eine wesentlich geringere Dynamik, also Werte mit im Schnitt kleineren Beträgen. Diese sind von der abschließenden Entropiekodierung effektiver zu komprimieren. Je uniformer die Bildinhalte ausfallen, desto gewinnbringender funktioniert dieser Mechanismus. Bei der Dekodierung werden nach der Dekomprimierung der Daten umgekehrte Versionen der Filter angewandt, um die eigentlichen Bilddaten wiederherzustellen.
Diese Möglichkeit ist einer der Gründe für die geringe Größe von PNG-Dateien.
PNG definiert in der derzeitigen Version fünf verschiedene Filtertypen:
| Nummer | Name | Beschreibung |
| 0 | None | Keine Vorfilterung. Es wird auf den originalen Pixeldaten gearbeitet. |
| 1 | Sub | Es werden die Differenzen zu dem jeweils links benachbarten Pixel verarbeitet. |
| 2 | Up | Es werden die Differenzen zu dem jeweils darüber liegenden Pixel verarbeitet. |
| 3 | Average | Es wird die Differenz zu dem Mittelwert aus dem darüber liegenden und dem links benachbarten Pixel gebildet. |
| 4 | Paeth | Es wird aus dem links benachbarten, dem darüber liegenden und dem schräg links oben benachbarten Pixel ein sogenannter Paeth-Predictor-Wert berechnet, welcher das Pixel für die Differenzbildung bestimmt. |
Manche Kodierer probieren zur Verbesserung der Kompression mehrere Filter durch. Dies ist besonders bei den zahlreichen Werkzeugen zur Optimierung der PNG-Kompression eine gängige Technik.
In vielen Fällen bietet der nach seinem Erfinder Alan W. Paeth benannte Paeth-Predictor die besten Ergebnisse. Mit diesem wird versucht, aus den links, oben und linksoben benachbarten Bildpunkten automatisch den ähnlichsten für die Differenzbildung zu nutzen. Die Funktion wählt den Bildpunkt, der links+oben−linksoben am nächsten kommt.

#### Substitutionskompression und Entropiekodierung

Substitutionskompression und Entropiekodierung erfolgen nach dem populären Deflate-Verfahren, da dieses ohne Belastung durch Softwarepatente frei verwendbar ist. Es umfasst Substitutionskompression nach Storer, Szymanski, Lempel und Ziv (LZSS-Algorithmus) und Entropiekodierung nach Huffman.
Viele Programme binden für die Deflate-Kodierung und -Dekodierung (Codec) die freie Deflate-Bibliothek zlib ein, welche ursprünglich extra für PNG geschaffen wurde. Die Deflate-Komprimierung kann üblicherweise (wie auch in anderen Anwendungen – beispielsweise bei der ZIP-Kompression) im Ausgabeprogramm in 10 Stufen von 0 (keine) bis 9 (beste) eingestellt werden.
Bislang ist Deflate die einzige unterstützte Methode. Es ist aber absichtlich Raum für Erweiterungen gelassen worden, um in zukünftigen PNG-Versionen auch andere, effizientere oder schnellere Algorithmen zu unterstützen. Um Abwärtskompatibilität zu existierenden PNG-fähigen Programmen zu gewährleisten, ist derzeit eine Aufnahme anderer Verfahren in den Standard jedoch nicht geplant.

### Pixelformat

Erlaubte Kombinationen aus Farbtyp und Bittiefe
| Farbtyp | Kanäle | Bits pro Kanal | Bits pro Kanal | Bits pro Kanal | Bits pro Kanal | Bits pro Kanal |
| Farbtyp | Kanäle | 1 | 2 | 4 | 8 | 16 |
| Indiziert | 1 | 1 | 2 | 4 | 8 | |
| Graustufen | 1 | 1 | 2 | 4 | 8 | 16 |
| Graustufen und Alpha | 2 | | | | 16 | 32 |
| True Color | 3 | | | | 24 | 48 |
| True Color und Alpha | 4 | | | | 32 | 64 |
Pixel in PNG-Bildern sind Zahlen, die entweder Indexe von Beispieldaten in der Palette oder die Beispieldaten selbst sein können. Die Palette ist eine separate Tabelle, die im PLTE-Block enthalten ist. Beispieldaten für ein einzelnes Pixel bestehen aus einem Tupel von eins bis vier Zahlen. Die Zahlen werden als Kanäle bezeichnet und jede Zahl im Bild wird in einem identischen Format codiert. Die zulässigen Formate codieren jede Zahl als Integerwert ohne Vorzeichen mit einer festen Anzahl von Bits, die in der PNG-Spezifikation als Bittiefe bezeichnet wird. Das ist nicht dasselbe wie die Farbtiefe, die üblicherweise verwendet wird, um sich auf die Gesamtzahl der Bits in jedem Pixel und nicht in jedem Kanal zu beziehen. Die zulässigen Bittiefen sind in der Tabelle zusammen mit der Gesamtzahl der für jedes Pixel verwendeten Bits zusammengefasst. Die Anzahl der Kanäle hängt davon ab, ob das Bild in Graustufen oder Farbe vorliegt und ob es einen Alphakanal hat. PNG erlaubt die folgenden Kanalkombinationen, die als Farbtyp bezeichnet werden.
Der Farbtyp wird als 8-Bit-Wert angegeben, allerdings werden nur die unteren drei Bits verwendet und selbst dann sind nur die fünf oben aufgeführten Kombinationen zulässig. Solange der Farbtyp gültig ist, kann er als Bitfeld betrachtet werden, wie in der folgenden Tabelle zusammengefasst:
| Farbtyp | Name | Binärwerte | Binärwerte | Binärwerte | Binärwerte | Masken |
| Farbtyp | Name | | A | C | P | Masken |
| 0 | Graustufen | 0 | 0 | 0 | 0 | |
| 2 | True Color | 0 | 0 | 1 | 0 | Farbe |
| 3 | Indiziert | 0 | 0 | 1 | 1 | Farbe, Palette |
| 4 | Graustufen und Alpha | 0 | 1 | 0 | 0 | Alpha |
| 6 | True Color und Alpha | 0 | 1 | 1 | 0 | Alpha, Farbe |

## Kompatibilität
### Farbprofile

Bis auf Safari und Firefox (nach Aktivierung) unterstützt bisher (2022) kein Browser eingebettete Farbprofile (iCCP-Blöcke). Sie bieten daher kein vollständiges Farbmanagement. Dadurch, dass Safari als einziger Browser auch vollständige Farbprofile wiedergibt, ist eine einheitliche und plattformübergreifende Darstellung bei Bildern im PNG-Format mit eingebettetem Farbprofil zurzeit (2022) nicht möglich. Zumindest für den Browser Firefox ist diese Funktion aber für die nächsten Jahre geplant. Eingebettete Gammakorrekturwerte (gAMA-Blöcke) hingegen werden von den meisten aktuellen Browsern fehlerfrei erkannt und verarbeitet.

## Rechtliches

Das PNG-Format unterliegt keiner Patentbeschränkung. Jeder Softwarehersteller kann daher ohne Zahlung von Lizenzgebühren Programme veröffentlichen, die PNG lesen und schreiben können.

## Vergleich
### Vorteile

* Die Kompression ist verlustfrei und dabei meist kompakter als vergleichbare Formate.
* Unterstützung von Alpha-Transparenz (bis zu 16 Bit, also 65.536 Stufen; gebräuchlich sind 8 Bit).
* Unterstützung von Farb- und Helligkeitskorrekturmechanismen, um sicherzustellen, dass ein Bild auf verschiedenen Systemen annähernd gleich aussieht.
* Das Format unterliegt einem festen Standard und ist erweiterbar, so dass theoretisch jedes Programm bestimmte Mindestanforderungen erfüllen muss. Außerdem ist PNG sowohl aufwärts-, als auch abwärtskompatibel, was Inkompatibilitäten zwischen verschiedenen Versionen reduziert.
* Durch integrierte Prüfsummen wird ermöglicht, Fehler in der Datei frühzeitig zu erkennen.
* PNG-Dateien sind streambar, das heißt zur Interpretation des Dateiinhalts ist kein wahlfreier Zugriff wie etwa bei vielen TIFF-Dateien notwendig.
* Es ist ein optionales Interlacing mit 7 Durchläufen nach Adam M. Costello („Adam7“) verfügbar, also der allmähliche Bildaufbau bei der Übertragung über langsame Datenleitungen. Schon bei sehr geringer Übertragung ist bereits eine relativ brauchbare Darstellung möglich.
* Die Unterstützung durch alle graphischen Webbrowser ist vorhanden.

### Nachteile

* Die offizielle Möglichkeit, Animationen darzustellen, ist das MNG-Format, welches von keinem Browser unterstützt wird. Für animierte PNG hat sich stattdessen das APNG-Format durchgesetzt. Auch über verschiedene Web-Techniken können PNG als Spritesheets animiert werden, wie es zum Beispiel von Facebook unterstützt wird, im Gegensatz zu animiertem GIF.
* PNG unterstützt das CMYK-Farbmodell nicht und ist deshalb nicht als vollständiger TIFF-Ersatz geeignet.
* Eingebettete Metainformationen werden zwar unterstützt, sie entsprechen aber weder dem Exif- noch dem IPTC-Standard.
* PNG ermöglicht nicht das einfache Laden von Bildteilen. Wer nur einen Ausschnitt des Bildes laden möchte, muss alle Bildzeilen davor mitladen. Im Falle von PNG-Dateien, die nicht sequentiell, sondern interlaced gespeichert wurden, muss sogar noch mehr geladen werden.
* Das Format erreicht bei bestimmten Bildarten (zum Beispiel Fotos) prinzipbedingt nicht die Kompressionsraten verlustbehafteter Algorithmen, wie etwa JPEG. Auch Algorithmen, die auf bestimmte Klassen von Bilddaten spezialisiert sind, komprimieren bei solchen Inhalten besser als PNG (Beispiel: JBIG2 für gerasterte Binärbilder).

### Vergleich mit Graphics Interchange Format (GIF)

Mangels Animationsmöglichkeit stellt PNG für sich eine unvollständige Alternative zum GIF-Format dar. Animationsmöglichkeiten sind bei PNG in ein eigenes Format ausgelagert. Die beiden Formate sollten zusammen GIF vollständig ersetzen; dazu kam es bis heute nicht.
Neben dem Farbpaletten-Modus unterstützt PNG zusätzlich Vollfarb- und Graustufenbilder mit einer Präzision von bis zu 16 Bit pro Farbkanal. Bei GIF ist es nur möglich, einen einzigen der Paletteneinträge als vollständig transparent zu deklarieren.
Die Kompressionsrate von PNG ist meistens besser als bei GIF. Die Vorfilter sind der Grund für den meist geringeren Platzbedarf von PNG-Dateien. Dagegen ist jedoch auch die Komplexität des Formats höher.
Bei PNGs progressivem Bildaufbau mit dem Adam7-Interlacing treten deutlich weniger Bildverzerrungen auf als bei GIF.
Bis 2004 war die Nutzung des GIF durch die Verwendung des patentbelasteten LZW-Algorithmus beschränkt, wovon PNG von Anfang an frei war. (GIF war bis Oktober 2006 noch von weiteren Patenten beschränkt.)

### Beispieldatei

Das rechts gezeigte Bild im PNG-Format hat in der Originaldatei die Bildauflösung 800 × 600 Pixel mit 32 Bit Farbtiefe (24 Bit Farbe + 8 Bit Alpha) und verwendet die RGBA-Erweiterung im RGB-Farbraum. Die Datei hat die Größe 224566 Byte. Würde jedes Pixel mit 32 Bit gespeichert, dann hätte die Datei die Größe 800 × 600 × 32 Bit = 800 × 600 × 4 Byte = 1920000 Byte. Daraus ergibt sich die Kompressionsrate 1920000 / 224566 = 8,55.

## Verwandte Formate

* Animated Portable Network Graphics (APNG) unterstützt Animation. Es ist zu PNG abwärtskompatibel, reine PNG-Dekoder zeigen nur das erste Bild der Animation.
* Multiple-Image Network Graphics (MNG) speichert Animationen.
* JPEG Network Graphics (JNG), ein Unterformat von MNG, unterstützt den verlustbehafteten Teil von JPEG als Kompressionsverfahren.
* PNG+ (PNG plus) ist ein von Microsoft in Picture It! verwendetes Dateiformat, das zusätzlich Ebenen und Mehrseiten-Layouts abspeichern kann. Es ist inkompatibel mit PNG und wird von nahezu keinem anderen Programm als Picture It! unterstützt.
Weder MNG, JNG, noch APNG oder PNG+ sind W3C-Empfehlungen.

## Software

Die offizielle Referenzimplementierung für das PNG-Format ist die Programmbibliothek libpng. Sie unterliegt einer Freie-Software-Lizenz und findet sich daher üblicherweise auch als wichtige Systembibliothek in freien Betriebssystemen. PNGOUT und ZopfliPNG sind bekannte auf kompakteste Komprimierung optimierte PNG-Kodierer. Es existiert eine Reihe von Hilfsprogrammen zur Dateigrößenoptimierung für PNG-Dateien, die maßgeblich wegen ihres Einsatzes für die Optimierung von Webseiten-Ladezeiten bekannt sind und oft unter anderem auf diesen beiden Spezialkodierern basieren. Viele Programme speichern PNG-Bilder nicht optimal ab, was zu unnötig großen Dateien führt. Verschiedene Programme wie beispielsweise pngcrush, OptiPNG oder andere ermöglichen eine verlustfreie Neukomprimierung und oft wesentlich kleinere Dateien.
Mittlerweile unterstützen alle modernen Webbrowser das Format. Wichtige Bildbearbeitungsprogramme unterstützen es üblicherweise lesend wie auch schreibend.