PNG

Dies ist ein binäres Format in Big-Endian Anordnung. Folgende Datentypen kommen zur Anwendung:

char String mit 8-Bit Kodierung
uint8 vorzeichenlose 8-Bit Zahl
uint32 vorzeichenlose 32-Bit Zahl

Die Datei beginnt mit der Signatur. Danach folgen die einzelnen Blocks direkt aufeinander.

Signatur

Details Signatur

Jede PNG Datei beginnt mit folgender Signatur:

<89 50 4E 47 0D 0A 1A 0A>

Auf die Signatur folgt direkt der erste Block.

Blockaufbau

Details Blockaufbau

Position Grösse Typ Wert
04 Byte uint32 Blockgrösse
44 Byte char Blocktyp
8Blockgrösse * Blockdaten
Blockgrösse + 8 4 Byte uint32 Prüfsumme

Die Prüfsumme ist eine normale CRC-32 Prüfsumme über Blocktyp und Blockdaten.

"IHDR" Block

Details "IHDR" Block

Position Grösse Typ Wert
04 Byte uint32 Blockgrösse
44 Byte char Blocktyp
84 Byte uint32 Bildbreite
124 Byte uint32 Bildhöhe
161 Byte uint8 Bittiefe
171 Byte uint8 Farbmodell
181 Byte uint8 Kompression
191 Byte uint8 Prediktor
201 Byte uint8 Interlacing
214 Byte uint32 Prüfsumme

Für das Farbmodell sind folgende Werte möglich:

Wert Modell
0Graustufen
2RGB
3RGB indexiert
4Graustufen mit Alphakanal
6RGB mit Alphakanal

Kompression ist immer 0 (Deflate).

Prediktor ist immer 0 (PNG Prediktor).

Interlacing kann die Werte 0 (kein Interlacing) und 1 (Adam7) haben.

"PLTE" Block

Details "PLTE" Block

Dieser Block kommt nur im indexierten Farbraum vor, ist dann aber zwingend notwendig.

Position Grösse Typ Wert
04 Byte uint32 Blockgrösse
44 Byte char Blocktyp
8Blockgrösse uint8 Palette
Blockgrösse + 8 4 Byte uint32 Prüfsumme

Die Palette hat einen Eintrag für jede verwendete Farbe, welcher wiederum aus drei uint8 für den Rot-, Grün- und Blauanteil der Farbe besteht.

"IDAT" Block

Details "IDAT" Block

Position Grösse Typ Wert
04 Byte uint32 Blockgrösse
44 Byte char Blocktyp
8Blockgrösse * Bilddaten
Blockgrösse + 8 4 Byte uint32 Prüfsumme

Falls mehrere IDAT Blöcke existieren, müssen die Bilddaten der einzelnen Blöcke in der Reihenfolge des Auftretens in der Datei zusammengesetzt werden.

"sRGB" Block

Details "sRGB" Block

Position Grösse Typ Wert
04 Byte uint32 Blockgrösse
44 Byte char Blocktyp
81 Byte uint8 Umrechnungspriorität
94 Byte uint32 Prüfsumme

Ist dieser Block enthalten, so sind die Bilddaten im sRGB Farbraum.

Für die Umrechnungspriorität sind folgende Werte möglich:

0/Perceptual
1/RelativeColorimetric
2/Saturation
3/AbsoluteColorimetric

"iCCP" Block

Details "iCCP" Block

Position Grösse Typ Wert
04 Byte uint32 Blockgrösse
44 Byte char Blocktyp
8* char Profilname
*1 Byte uint8 0
*1 Byte uint8 Kompression
** * ICC-Profildaten
*4 Byte uint32 Prüfsumme

Der Profilname ist in ISO Latin-1, und kann im Namen selbst kein 0-Byte enthalten.

Kompression ist immer 0 (Deflate).

"gAMA" Block

Details "gAMA" Block

Position Grösse Typ Wert
04 Byte uint32 Blockgrösse
44 Byte char Blocktyp
84 Byte uint32 Gammawert (invers)
124 Byte uint32 Prüfsumme

Der inverse Gammawert ist auf einer Skala von 0 - 100'000.

Formel zur Umrechnung in den Wert für PDF:

gamma = 100000.0 / gamma

"cHRM" Block

Details "cHRM" Block

Position Grösse Typ Wert
04 Byte uint32 Blockgrösse
44 Byte char Blocktyp
84 Byte uint32 xw
124 Byte uint32 yw
164 Byte uint32 xr
204 Byte uint32 yr
244 Byte uint32 xg
284 Byte uint32 yg
324 Byte uint32 xb
364 Byte uint32 yb
404 Byte uint32 Prüfsumme

Die x und y Werte sind auf einer Skala von 0 - 100'000.

Formelsatz für die Umrechnung in PDF-Werte:

xw = xw / 100000.0
yw = yw / 100000.0
xr = xr / 100000.0
yr = yr / 100000.0
xg = xg / 100000.0
yg = yg / 100000.0
xb = xb / 100000.0
yb = yb / 100000.0

Xw = xw / yw
Yw = 1
Zw = (1 - xw - yw) / yw

zr = 1 - xr - yr
zg = 1 - xg - yg
zb = 1 - xb - yb
mxr = yg * zb - zg * yb
mxg = zr * yb - yr * zb
mxb = yr * zg - zr * yg
d = mxr * xr + mxg * xg + mxb * xb
Sr = (mxr * Xw + (yb * Zw - zb) * xg + (zg - yg * Zw) * xb) / d
Sg = (mxg * Xw + (yr * Zw - zr) * xb + (zb - yb * Zw) * xr) / d
Sb = (mxb * Xw + (yg * Zw - zg) * xr + (zr - yr * Zw) * xg) / d
Xr = xr * Sr
Yr = yr * Sr
Zr = zr * Sr
Xg = xg * Sg
Yg = yg * Sg
Zg = zg * Sg
Xb = xb * Sb
Yb = yb * Sb
Zb = zb * Sb

/WhitePoint [Xw Yw Zw]
/Matrix [Xr Yr Zr Xg Yg Zg Xb Yb Zb]

"IEND" Block

Details "IEND" Block

Position Grösse Typ Wert
04 Byte uint32 Blockgrösse
44 Byte char Blocktyp
84 Byte uint32 Prüfsumme

Dieser Block enthält keine Blockdaten. Er markiert lediglich das Dateiende.

Diskussion

Geben Sie Ihren Kommentar ein. Wiki-Syntax ist zugelassen:
Q O D W K
 
referenz/png.txt · Zuletzt geändert: 2013/02/18 08:58 (Externe Bearbeitung)
 
Falls nicht anders bezeichnet, ist der Inhalt dieses Wikis unter der folgenden Lizenz veröffentlicht: CC0 1.0 Universal
Recent changes RSS feed Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki