Datenstruktur

Eine PNG-Datei enthält eine acht Byte lange "Identification Signature", gefolgt von drei oder auch mehr Datenblöcken, die als "Chunks" bezeichnet werden. Ein "Chunk" ist ein unabhängiger Datenblock mit einer definierten Struktur. Bei "Chunks" unterscheidet man Critical Chunks (müssen von jedem PNG-verarbeitenden Programm verstanden werden) und Ancillary Chunks (diese Blöcken können von einem PNG-verarbeitenden Programm ignoriert werden).


Datenstruktur einer PNG-Datei

Allgemeine Struktur eines Chunks
Jeder Chunk hat die gleiche Struktur:


Allgemeine Struktur eines Chunks

length
Das length-Feld (4 Byte) gibt die Länge des data-Feldes an. Die Länge bezieht sich nur auf das data-Feld und kann daher auch 0 sein.

typ
Jedes der 4 Bytes ist ein dezimaler Wert zwischen 65 und 90 bzw. 97 und 122. Diese Werte sind die Buchstaben (A bis Z bzw. a bis z) des ISO 646-Codes. Die Groß- bzw. Kleinschreibung der einzelnen Bytes bestimmt die Eigenschaften des Chunks.

data
Das Data-Feld kann eine Länge von 0 bis 232 Bytes haben.

cyclic redundancy check (CRC)
Das CRC-Feld (4 Bytes) nimmt das typ-Feld und das data-Feld als Basis für die Berechnung. Es ist auch vorhanden wenn es kein data-Feld gibt.
Das CRC-Feld wird gemeinsam mit dem length-Feld zur Überprüfung der Integrität verwendet.

Idenfication Signature
Streng genommen handelt es sich bei der "Identification Signature" um keinen Chunk, da die Länge der "Identification Signature" bereits vordefiniert ist und sie auch nicht die typische Chunk-Struktur besitzt. Die "Identification Signature" dient zur Identifizierung und zur Vermeidung von fehlerhaften Einstellungen bei der Übertragung (zB verhindert sie eine Übertragung im 7-Bit-Modus).

Critical Chunks
Für das PNG-Format wurden vier Standard-Blöcke ("Critical Chunks") definiert, die jedes PNG-verarbeitende Programm verstehen muss.

Header Chunk (IHDR)
Der Header Chunk enthält die Basisinformationen über die Datei und muss als erster Block angeordnet sein. In jeder PNG-Datei muss genau ein Header Chunk enthalten sein. Der Header Chunk beinhaltet:

  • Breite des Bildes (in Pixel)
  • Höhe des Bildes (in Pixel)
  • Bittiefe
  • Farbtyp
  • Kompressionsmethode; derzeit ist nur Kompressionsmethode 0 (deflate/inflate Kompression) spezifiziert
  • Filtermethode; derzeit existiert nur die Methode 0 (adaptive Filterung mit 5 Standard-Filter-Typen)
  • Interlacing-Methode (0 für nicht Interlaced und 1 für Adam7 Interlaced)

Palette Chunk (PLTE)
Der Palette Chunk enthält die Farbtabelle, sofern sie für die Bilddaten notwenig ist. Dieser Chunk muss vor dem Bilddatenblock platziert sein. Der Palette Chunk ist der einzige "Critical Chunk" dessen Verwendung in einer Datei optional ist.

Image Data Chunk (IDAT)
Der Image Data Chunk enthält die eigentlichen komprimierten Bilddaten und muss in jeder Datei enthalten sein. Der Image Data Chunk kann auch aus mehreren Blöcken bestehen.

Image Trailer Chunk (IEND)
Der Image Trailer Chunk markiert das Ende des Datenstroms und muss am Ende der Datei platziert sein. Der Image Trailer Chunk ist zwingend vorgeschrieben. Das data-Feld des Image Trainer Chunks ist leer.

Ancillary Chunks
Ancillary Chunks können von einem PNG-lesenden Programm ignoriert werden. Ancillary Chunks beinhaltet zusätzliche Informationen wie z.B. Informationen über den Autor oder das Copyright.

Insgesamt enthält die Spezifikation ua. folgende ergänzende Blöcke:

  • Transparency (tRNS)
  • Significant bits (sBIT)
  • Image gamma (gAMA)
  • Primary chromaticities (cHRM)
  • Image histogram (hIST)
  • Background color (bKGD)
  • Physical pixel dimensions (pHYS)
  • Image last-modification time (tIME)
  • Textual data (tEXt)

Ergänzende und vertiefende Module