Dateiformat: jpg ed
JPEG ist eigentlich nur das Komprimier-Verfahren, das Dateiformat heißt JFIF
Die Datei ist eine reine Aneinanderreihung von Segmenten, die jeweils mit einer 2byte langen ID beginnen.
Die Bilddaten werden in 8x8-Pixel Blöcke zerlegt, die jeweils per diskreter Cosinus-Transformation umgerechnet und dann "quantisiert" werden. Durch Sub-Sampling können für die Farbwerte größere Bereiche (mit trotzdem der selben Pixelzahl) gewählt werden. Anschließend wird der Datenstrom noch durch das Huffman-Verfahren komprimiert.
Table of Contents
Segmente ed
Wenn eine Segment-Länge in der Datei gespeichert ist, wird die ID (2byte) nicht mitgerechnet, dafür aber die Längenangabe selbst (2byte)!
Der Typ inv_short stellt eine 2byte große Ganzzahl dar, aber in umgekehrter Byte-Reihenfolge:
n = byte[0] * 256 + byte[1];
Start Of Image ed
ff.d8
Markiert den Dateianfang (hat selbst keinen Inhalt)
End Of Image ed
ff.d9
Enthält Bildinformationen (Größe,...)
Offset Typ Länge Bedeutung
0 inv_short 2 Segment-Länge
2 byte 1 Bit pro Farbkanal
3 inv_short 2 Bild-Höhe (Pixel)
5 inv_short 2 Bild-Breite (Pixel)
7 byte 1 Anzahl der Farbkanäle
{
7+i*3 byte 1 Farbkanal ( 1=Y=Helligkeit, 2=Cb, 3=Cr )
8+i*3 byte 1 Sub-Sampling ( hohe 4 bits: horizontal, niedere 4 bits: vertikal )
9+i*3 byte 1 Quantisierungstabelle (Index)
} [Farbkanäle]Markiert das Dateiende (ohne Inhalt)
Baseline DCT ed
ff.c0
Quantisierungstabelle ed
ff.db
Die Tabelle, die von Ganzzahlen (aus der Datei) in Fließkomma-Zahlen (Koeffizienten für die Cosinus-Transformation) umrechnet.