JPEG

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
uint16vorzeichenlose 16-Bit Zahl

Die Daten sind in Blocks organisiert. Zunächst folgen mehrere Metadatenblocks, danach ein oder mehrere Bilddatenblocks. Die Metadatenblocks beginnen mit Blockmarkern, aus welchen sich die Länge des Blocks ableiten lässt.

Blockaufbau

Alle Metadatenblocks beginnen folgendermassen:

PositionGrösseTyp Wert
01 Byteuint80xFF
11 Byteuint8Blocktyp

Blocks mit Blocktyp 0xD0 - 0xD9 bestehen nur aus diesen beiden Bytes. Bei allen anderen Blocks geht es folgendermassen weiter:

PositionGrösse Typ Wert
22 Byte uint16Blockgrösse
4Blockgrösse - 2* Blockdaten

Frame Header

Details Frame Header

Der Frame Header hat einen der Typen 0xC0 - 0xCF ohne die Typen 0xC4, 0xC8 und 0xCC.

PositionGrösseTyp Wert
01 Byteuint8 0xFF
11 Byteuint8 Blocktyp
22 Byteuint16Blockgrösse
41 Byteuint8 Bittiefe
52 Byteuint16Bildhöhe
72 Byteuint16Bildbreite
91 Byteuint8 Farbraum

Der Farbraum ist 1 für Graustufen, 3 für RGB, 4 für CMYK.

ICC-Profil

Details ICC-Profil

Die Blöcke mit dem ICC-Profil haben den Typ 0xE2.

PositionGrösse Typ Wert
01 Byte uint8 0xFF
11 Byte uint8 0xE2
22 Byte uint16Blockgrösse
411 Byte char ASCII-String ICC-PROFILE
151 Byte uint8 0
161 Byte uint8 Blocknummer
171 Byte uint8 Blockanzahl
18Blockgrösse - 16* ICC-Profildaten

Es können noch andere Blöcke mit Typ 0xE2 vorhanden sein. Darum sollte man auch auf den String ICC-PROFILE prüfen.

Ist die Blockanzahl nicht 1, so ist das Profil über mehrere Blöcke verteilt. Der Inhalt der Blöcke muss in der durch die Blocknummer vorgegebene Reihenfolge aneinandergehängt werden.

unnötige Blöcke

Details unnötige Blöcke

Blöcke mit Typ 0xE0 - 0xFE sind für die Dekompression selbst unnötig, und müssen nicht in das Bildobjekt des PDF übernommen werden.

letzter Block

Der Start of Scan Block hat den Typ 0xDA. Dies ist immer der letzte Metadatenblock. Auf ihn folgen die komprimierten Bilddaten.