Aufbau
Struktur einer PNG-Datei
Signatur |
Chunk 1 |
... |
Chunk n |
Abb. 02a: Aufbau einer PNG-Datei
Eine PNG-Datei besteht hauptsächlich aus 2 Komponenten,
die Signatur und die Chunks :
-
Die 1. Komponente nennt man
Signatur und
dient unter hauptsächlich der Identifikation als PNG-Format.
-
Die 2. Komponente nennt man
Chunk und
in diesen Blöcken werden die
Bildinformationen selbst gespeichert.
Ein Chunk kann in einer PNG-Datei mehrmals vorkommen, muss aber nicht.
Die Signatur
Byte: |
1 | 2 | 3 | 4 |
5 | 6 | 7 | 8 |
Dezimal: |
137 | 80 | 78 | 71 |
13 | 10 | 26 | 10 |
Hexadezimal: |
89 | 50 | 4E | 47 |
0D | 0A | 1A | 0A |
ASCII (C): |
‰ | P | N | G |
(CR) | (LF) | (SUB) | (LF) |
Abb. 03a: Signatur einer PNG-Datei.
Eine PNG-Datei kann anhand der ersten 8 Bytes identifiziert werden.
Die Wahl dieser Zeichenfolge hat sogar eine Bedeutung:
-
Das 1. Byte:
wurde absichtlich als Nicht-ASCII-Zeichen gewählt,
da so verhindert wird, das die PNG als reine Textdatei erkannt wird.
Dies betrifft besonderst Betriebssysteme,
welche Dateitypen nicht anhand der Dateiendung unterscheiden. (Linux, ...)
-
Das 2., 3. und 4. Byte benennen das Format,
also
P , N und G .
-
Das 5. und 6. Byte ist
Carriage Return und Line Feed ,
welches unter DOS den Zeilenumbruch darstellt.
Wird PNG fälschlicherweise als Text-Daten transportiert,
kann es vorkommen das einige Texteditoren/Textbetrachter
das Carriage Return wegkürzen und
somit die Bilddaten ungültig werden.
-
Das 7. Byte ist die sog.
Substitution (Control-Z),
sie führt bei DOS zum Abbruch der Ausgabe,
sofern DOS die Datei roh ausgeben würde.
-
Das 8. Byte schließt die Signatur ab,
in diesem Falle ein einzelnes
Line Feed ,
welches ähnlich wie Byte 5 und 6 die Umwandlung provozieren soll.
Die Chunks
Länge |
Typ |
Daten |
CRC (Prüfsumme) |
Abb. 04a: Aufbau eines Chunks
Chunks enthalten sämtliche Informationen,
die in einer PNG-Datei gespeichert werden können.
Dabei werden unterschiedliche Arten von Informationen auch in
unterschiedlichen Chunks mit
unterschiedlichen Typen gespeichert.
Jeder Chunk besteht aus vier Komponenten.
Es gibt mehrere Arten von Chunks.
Diese wären:
-
bkGD (= Background Color)
Speichert schlicht die Hintergrundfarbe eines Bildes.
-
cHRM (= Primary Chromaticity and Whitepoint)
Speichert die CIE-XYZ-Farb-Koordinaten von Rot, Grün und Blau.
Diese Informationen dienen zur Korrektur der Phosphorfarben zwischen
verschiedenen Monitoren.
-
gAMA (= Image Gamma)
Speichert die Gammakurve eines Bildes.
Beispielsweise können so teuere Grafiksysteme
die Bilder mit angepasster Gammakurve darstellen.
-
hIST (= Image Histogram)
Speichert die Häufigkeiten der Farben eines Bildes.
Da es Ausgabegeräte gibt,
die Bilder nicht in allen Farben darstellen können,
muss PNG eine Möglichkeit bieten,
die Farben anhand der Häufigkeit zu berechnen.
So können die Bilder beispielsweise auf Ausgaben dargestellt werden,
die minderer Qualität sind.
Zudem muss der PNG-Decoder die Bilddaten selber nicht auslesen,
um die Häufigkeit der Farben zu ermitteln.
-
iCCP (= Embedded ICC Profile)
Speichtert ICC-Farbprofile zum Bild.
-
IDAT (= Image Data)
Enthält die eigendlichen Bilddaten.
Die Bilddaten können in mehreren IDAT-Chunks abgelegt werden.
Zudem wird Kompression und das sog. Interlacing unterstützt.
-
IEND (= Image Trailer)
Definiert das Ende einer PNG-Datei.
Alle Daten nach diesem Block werden strikt ignoriert.
Das hat vorallem historische Gründe,
da einige Übertragungsysteme beim transportieren von Dateien
Datenmüll angehangen haben.
-
IHDR (= Image Header)
Speichert Informationen, wie Bildbreite, Bildhöhe, Bittiefe, Farbtyp,
Kompressionsart, ...
-
iTXt (= International Textual Sata)
Ebenfalls ein Textblock,
allerdings werden die Daten in UTF-8 (Unicode) gespeichert.
-
pHYs (= Physical Pixel Dimensions)
Speichert das natürliche Seitenverhältnis (Aspect Ratio),
da beispielsweise Drucker ein anderes Seitenverhältnis verwenden.
-
PLTE (= Palette)
Speichert eine Farbpalette zum Bild in einem ähnlichen
Format wie GIF-Paletten. In Prinzip eine Liste mit RGB-Bytes.
(3 Bytes pro Pixel)
-
sBIT (= Significant Bits)
Speichert Anzahl von Bits der Original-Farbdaten.
Dient als Zusatzinformation für Decoder,
welche das Bild in einer anderen Farbtiefe ausgeben sollen,
als das Bild selber gespeichert ist.
-
sPLT (= Suggested Palette)
Speichert eine reduzierte Palette als Vorschlag, d.h.
wenn die Ausgabe nicht kompatibel ist, wird diese Palette verwendet,
wenn auch
PLTE nicht vorhanden ist?
-
tEXt (= Textual Data)
Speichert Texte, die als Informationen zu den Bild dienen.
Dies können Kommentare, sowohl auch Authorenbeschreibungen, usw. sein.
Jeder
tEXt -Chunk speichert ein Schlüsselbegriff,
unter dem die Textdaten erreichbar sind.
Der Decoder kann per Frage nach dem Schlüsselbegriff die
Textdatern anfordern.
-
tIME (= Image Last-Modification Time)
Speichert die letzte Änderung der Datei.
-
tRNs (= Transparency)
Speichert Transparenzinformationen zum Bild.
Bei Palettenbildern kann jeder Farbe eine Transparenz zugewiesen werden.
Graustufen- und Echtfarbbilder speichern nur eine Farbe als
transparent markiert .
-
zTXt (= Compressed Textual Data)
Wie
tEXt , nur werden die Textdaten selbst komprimiert gespeichert.
Kompression
Wie z.B. JPEG benutzt auch PNG Kompressionen.
Anderst als wie bei JPEG ist die Kompression nicht verlustbehaftet,
d.H. selbst bei der höchsten Kompression,
verliert das Bild weder Qualität noch Informationen.
Als Kompressionsverfahren wird der Deflations-Algorithmus (ZIP, PKZIP)
verwendet.
Da dieses Verfahren nicht direkt für 2 dimensionale Daten geeignet ist,
werden vor der Kompression spezielle Filter angewendet,
die die entgültige Kompression effizienter gestalten.
Diese Filter sind eine Ansammlung simpler, sowie komplexer Funktionen und
Algorithmen, die das Bild so umrechnen,
das es nachhaltig sehr gut mit Deflate komprimiert werden kann.
Interlacing
Auch PNG unterstützt Interlacing.
Als Interlacing bezeichnet man ein Speicherverfahren,
bei dem ein Bild in mehrere Blöcke unterteilt wird.
Beim Lesen der Daten werden somit die größten Blöcke
zuerst geladen, es entsteht ein unscharfes Bild.
Weiterhin wird eine immer kleinere Variante der Blöcke geladen,
das Bild wird immer schärfer.
Das geschieht solange,
bis das Bild in voller Qualität übertragen wurde.
Das Verfahren findet vorallem da Gebrauch,
wo das Medium nur sehr langsam ausgelesen werden kann.
(z.B. analoge Internetverbindung)
So bekommt der Betrachter das Bild kurz nach dem Transfer schon zu sehen,
wobei der Effekt eines immer schärfer werdenden Bildes auftritt.
Der Vorteil der sich daraus ergibt ist klar.
Allerdings müsen zusätzliche Daten gespeichert werden,
also eignet sich die Methode nur bei wirklich großen Bildern.
Beim Interlacing in PNG wird der sog. Adam7-Algorithmus verwendet.
|