Rechnernetze
Home Nach oben

Portable Network Graphics (PNG)

Das Portable Network Graphics (PNG) wurde entwickelt, um das kommerzielle GIF-Format zu verbessern und zu ersetzen. Daher ist PNG für kommerzielle Anwendungen vollständig frei einsetzbar.

PNG unterstützt drei Modi:

Grauwerte: Die Pixel bestimmen 16 Bit-Helligkeitswerte (0: schwarz, 216-1: weiß).
True Color: Die Pixel bestimmen 24 Bit-RGB-Werte. Jede Komponente benutzt 8 Bits, um ihren Einfluss auf die Pixelfarbe zu spezifizieren.
Palettenbasiert: Die Pixel bestimmen die Indizes einer Farbpalette.

Struktur eine PNG-Datei

Die ersten 8 Bits sind immer: 137 80 78 71 12 10 26 10. Dieses bedeutet, dass die Daten ein PNG-Bild enthalten in Form eines Felds von Datensätzen (chunks), welches mit IHDR beginnt und mit IEND endet. Chunks beschreiben die Bildeigenschaften.

Jedes Chunk besteht aus vier Teilen:

Länge: 4 Byte Ganzzahl, welche die Länge des Chunks-Datenfeld beschreibt.
Typ: 4 Byte Code, der den Typ eines Chunks beschreibt.
Datenfeld: Sämtliche Daten, welche von dem Chunk benötigt werden.
CRC: 4 Byte-Prüfsummenfeld, welches aus den vorhergehenden Daten berechnet wird.

Kritische Chunks

Jede PNG-Datei besteht aus einem IHDR-, zumindest einem Datensatz IDAT- sowie ein IEND-Chunk.

IHDR-Chunk

Dieses enthält die folgenden Daten:

IHDR-Chunk
Breite 4 Bytes Breite und Höhe beschreiben die Größe des Bilds in Pixeln.
Höhe 4 Bytes
Bittiefe 1 Byte Die Bittiefe beschreibt die Tiefe eines Bildes in Bits: 1, 2, 3, 8 und 16
Farbtyp 1 Byte Der Farbtyp beschreibt die  Interpretation der Bilddaten. Der Wert ist die Summe aus den folgenden Optionen
Die Palette wird verwendet (1),
Die Pixel werden durch Farbwerte repräsentiert (2),
Der Alpha-Kanal wird verwendet (4).
Kompressionsmethode 1 Byte Kompressionsmethode muss stets auf null gesetzt sein.
Filtermethode 1 Byte Filtermethode muss stets auf null gesetzt sein.
Interlacemethode 1 Byte Interlacemethode spezifiziert, ob Interlace verwendet wird (1) oder nicht (0).

PLTE-Chunk

Dieses Chunk enthält bis zu 256 Farb-Deskriptoren, wobei jeder Deskriptor 3 Bytes RGB-Farbe enthält. Die Anzahl der Deskriptoren wird durch die Länge des Chunkgs bestimmt: N=Größe des Chunks / 3.

IDAT-Chunk 

Dieses Chunk enthält die tatsächlich komprimierten Bilddaten. Um IDAT zu erzeugen, müssen die Bilddimensionen bekannt sein, die Bilder gefiltert und die Daten komprimiert. Die Daten können auf mehrere IDAT-Chunks verteilt werden, um die Wahrscheinlichkeit zu vergrößern, zerstörte Dateien zu restaurieren.

IEND-Chunk

Dieses muss das letzte Chunk in einer PNG-Datei sein und wird benutzt, um das Ende der Datei anzuzeigen. Dieses Chunk enthält keine Daten.

Ancillary-Chunks

Dieses Chunk (ancillary=untergeordnet) ist optional. Es kann von PNG-Dateilesern ignoriert werden und braucht von PNG-Dateischreibern nicht ausgegeben zu werden. Allerdings muss diese Option unterstützt werden, da sonst viele PNG-Bilder nicht korrekt gelesen werden können.

Kritische und untergeordnete Chunks werden in der PNG-Spezifikation als Standardchunks bezeichnet. Es gibt darüber hinaus spezielle öffentliche Chunks, die seltener implementiert werden aber für einige Applikationen wichtig sind, sowie private Chunks, die Anwendungen für ihre eigenen Zwecke definieren können, wenn sie Daten speichern wollen, die nicht von anderen Anwendungen interpretiert werden sollen.

Die folgenden Standard- und Spezialchunks werden von Version 1.0 der PNG-Spezifikation definiert:

Chunk Type Multiple Optional Position
IHDR No No First chunk
cHRM No Yes Before PLTE and IDAT
gAMA No Yes Before PLTE and IDAT
sBIT No Yes Before PLTE and IDAT
PLTE No Yes Before IDAT
bKGD No Yes After PLTE and before IDAT
hIST No Yes After PLTE and before IDAT
tRNS No Yes After PLTE and before IDAT
oFFs No Yes Before IDAT
pHYs No Yes Before IDAT
sCAL No Yes Before IDAT
IDAT Yes No Contiguous with other IDATs
tIME No Yes Any
tEXt Yes Yes Any
zTXt Yes Yes Any
fRAc Yes Yes Any
gIFg Yes Yes Any
gIFt Yes Yes Any
gIFx Yes Yes Any
IEND No No Last chunk

KOMPRESSION

PNG verwendet die verlustfreie LZ77-Kompression, wie sie auch in zip, gzip und pkzip und ähnlichen Programmen benutzt wird.