PicScrub logoPicScrub
Zurück zu den Formaten

JPEG

verrät am meisten

Eine JPEG-Datei speichert ihre Metadaten in APPn-Segmenten, zwischen Dateikopf und Bilddaten. Hier siehst du, was wo liegt und was PicScrub mit jedem Teil macht.

Farbprofil, bleibt auf Wunsch
SOIStart
APP0JFIF
APP1EXIF
APP1XMP
APP2ICC
APP13IPTC
COMKommentar
SOS …dein eigentliches Foto, unangetastet
EOIEnde
GPS + Kamera verstecken sich hier, entfernt
Byte für Byte identisch

Was entfernt wird

  • EXIF GPS-Koordinaten, Kameramarke und -modell, Zeitstempel, Belichtungseinstellungen
  • XMP Bearbeitungsverlauf, verwendete Software, Bewertungen
  • IPTC / Photoshop Bildunterschriften, Credits, Schlagwörter
  • Kommentare und eingebettete Vorschaubilder eine winzige Kopie des Originals, die deine Zuschnitte überleben kann

Was du behalten kannst

  • Bilddaten immer unangetastet, nie neu kodiert
  • ICC-Farbprofil optional, damit die Farben stimmen
  • Ausrichtung optional, damit Porträts aufrecht bleiben
  • Copyright-Hinweis optional, für Fotografen, die Credit ohne Koordinaten wollen

Überblick über die Dateistruktur

Wer schon einmal ein JPEG in einem Hex-Editor geöffnet hat, weiß: Die Datei besteht aus Segmenten, die durch Marker getrennt sind. Jeder Marker beginnt mit 0xFF, gefolgt von einem Byte, das den Segmenttyp angibt. Dieser Aufbau macht JPEGs vergleichsweise leicht auswertbar. Du suchst einfach nach FF-Bytes und schaust, was darauf folgt.

Für den Datenschutz ist entscheidend, dass sämtliche Metadaten (EXIF, GPS, Zeitstempel) in diesen Segmenten liegen, vollständig getrennt von den eigentlichen Bilddaten. Genau deshalb können wir Metadaten entfernen, ohne die Pixel anzufassen oder irgendetwas neu zu komprimieren.

Struktur einer JPEG-Datei

SOI
APP0-15
DQT
SOF
DHT
SOS + Data
EOI
SOI
2 Bytes
Bildanfang (FF D8)
APP0-15
100 Bytes
Application-Marker (Metadaten)
DQT
130 Bytes
Quantisierungstabellen
SOF
20 Bytes
Beginn des Frames
DHT
420 Bytes
Huffman-Tabellen
SOS + Data
Variable Länge
Scan-Daten (Bild)
EOI
2 Bytes
Bildende (FF D9)

Beispiel für einen JPEG-Header

SOI (Bildanfang)
APP0-Marker
APP0-Länge
JFIF-Kennung
JFIF-Daten
APP1-Marker
APP1-Länge
Exif-Kennung
OffsetHexASCII
0000
FFD8FFE000104A464946000101000048
......JFIF.....H
0010
00480000FFE112344578696600000000
.H.....4Exif..

Aufbau eines Markers

  • FF xx:Marker (xx gibt den Typ an)
  • LL LL:Länge (2 Bytes, Big-Endian, inklusive sich selbst)
  • Data...:Segmentdaten (Länge - 2 Bytes)

Vollständige JPEG-Marker-Referenz

MarkerNameBeschreibung
FF D8SOIBildanfang
FF D9EOIBildende
FF C0SOF0Beginn des Frames (Baseline DCT)
FF C2SOF2Beginn des Frames (Progressive DCT)
FF C4DHTHuffman-Tabelle definieren
FF DBDQTQuantisierungstabelle definieren
FF DDDRIRestart-Intervall definieren
FF DASOSBeginn des Scans (danach folgen die Bilddaten)
FF FECOMKommentar (Metadaten)
FF E0APP0JFIF-Marker
FF E1APP1EXIF-/XMP-Marker
FF E2APP2ICC-Profil / MPF
FF EDAPP13IPTC / Photoshop
FF EEAPP14Adobe-Farbtransformation

Gold = Metadaten (werden entfernt), ohne Markierung = Struktur, die erhalten bleibt

JFIF und EXIF im Vergleich

Etwas, das viele überrascht: JPEG-Dateien enthalten oft zwei verschiedene Metadatenstandards gleichzeitig. JFIF kam zuerst und regelt Grundlegendes wie die Auflösung. Später begannen Kameras, EXIF-Daten mit allen Details zur Aufnahme zu ergänzen. Die meisten modernen JPEGs enthalten beides, weshalb du am Dateianfang sowohl APP0- als auch APP1-Marker findest.

APP0:JFIF

JPEG File Interchange Format. Grundlegende Bildinformationen.

  • • Versionsnummer
  • • Pixeldichte (DPI)
  • • Seitenverhältnis
  • • Optionales Vorschaubild

APP1:EXIF

Exchangeable Image File Format. Metadaten der Kamera.

  • • Kamerahersteller/-modell
  • • GPS-Koordinaten
  • • Zeitstempel
  • • Belichtungseinstellungen

APP-Marker im Detail

Die JPEG-Spezifikation hat 16 „Application“-Marker (APP0 bis APP15) reserviert, die Hersteller frei nutzen dürfen. Im Lauf der Jahre haben verschiedene Organisationen einzelne Marker für ihre Metadatenformate belegt. Das Ergebnis ist ein ziemliches Durcheinander, immerhin aber ein gut dokumentiertes.

Knifflig ist, dass derselbe Marker je nach Inhalt etwas anderes bedeuten kann. APP1 kann zum Beispiel EXIF- oder XMP-Daten enthalten. Erst die Kennung im Inneren verrät dir, womit du es zu tun hast.

APP0 (0xFFE0):JFIF

Kennung: JFIF\0. Enthält Version, Einheit der Pixeldichte, X-/Y-Dichte und optional ein eingebettetes Vorschaubild. In der Regel unbedenklich.

APP1 (0xFFE1):EXIF

Kennung: Exif\0\0. Enthält eine vollständige TIFF-Struktur mit IFD-Einträgen für Kamerainfos, GPS-Daten, Zeitstempel, Vorschaubilder und Maker Notes. Das größte Datenschutzrisiko.

APP1 (0xFFE1):XMP

Kennung: http://ns.adobe.com/xap/1.0/\0. XML-basierter Metadatenstandard von Adobe. Kann Bearbeitungsverlauf, Software-Infos und erweiterte EXIF-Daten enthalten.

XMP-Namespaces
xmp: http://ns.adobe.com/xap/1.0/
xmpMM: http://ns.adobe.com/xap/1.0/mm/
dc: http://purl.org/dc/elements/1.1/
photoshop: http://ns.adobe.com/photoshop/1.0/
tiff: http://ns.adobe.com/tiff/1.0/
exif: http://ns.adobe.com/exif/1.0/

APP1 (0xFFE1):Extended XMP

Kennung: http://ns.adobe.com/xmp/extension/\0. Für XMP-Daten über 65 KB, aufgeteilt auf mehrere APP1-Segmente.

APP2 (0xFFE2):MPF

Kennung: MPF\0. Multi-Picture Format für stereoskopische Bilder und Panoramen.

APP2 (0xFFE2):ICC-Profil

Kennung: ICC_PROFILE\0. Daten zum Farbmanagement. Können auf mehrere APP2-Marker aufgeteilt sein. Meist unbedenklich und erhaltenswert.

APP13 (0xFFED):IPTC/Photoshop

Kennung: Photoshop 3.0\0. Enthält IPTC-IIM-Daten mit Bildunterschriften, Schlagwörtern, Copyright und Angaben zum Urheber. Kann personenbezogene Informationen enthalten.

APP14 (0xFFEE):Adobe

Kennung: Adobe\0. Enthält Flags zur Farbtransformation (RGB/CMYK). Wichtig für die korrekte Farbdarstellung.

Der Aufbau von EXIF

Jetzt wird es interessant (und ein bisschen kurios): EXIF-Daten sind tatsächlich eine winzige TIFF-Datei, eingebettet in dein JPEG. Ja, wirklich. Sie hat einen eigenen Header, eine eigene Byte-Reihenfolge und nutzt die IFD-Struktur (Image File Directory) von TIFF, um Tags zu speichern.

Direkt nach der Kennung „Exif“ folgt ein TIFF-Header, der angibt, ob die Daten Little-Endian (Intel, „II“) oder Big-Endian (Motorola, „MM“) vorliegen. Wer das falsch interpretiert, erhält nur Zahlensalat. Deshalb prüft jeder Parser das als Allererstes.

TIFF-Header (8 Bytes)

Byte-Reihenfolge (II = Little Endian)
Magic Number (42)
IFD0-Offset
OffsetHexASCII
0000
49492A0008000000
II*.....

II = Intel (Little-Endian), MM = Motorola (Big-Endian)

Aufbau eines IFD-Eintrags (12 Bytes)

Tag-IDTypAnzahlWert/Offset
2 Bytes2 Bytes4 Bytes4 Bytes

Wichtige IFD-Einträge

0x010F:Make
0x0110:Model
0x0132:DateTime
0x8769:ExifIFDPointer
0x8825:GPSInfoIFDPointer
0x927C:MakerNote

So verarbeitet PicScrub JPEG

Das Vorgehen ist ziemlich geradlinig: Wir lesen die Datei Marker für Marker, behalten alles, was zur Darstellung des Bildes nötig ist, und überspringen alles, was Metadaten enthält. Da wir die komprimierten Bilddaten nie anfassen, entsteht kein Qualitätsverlust.

Entscheidend ist, dass die markerbasierte Struktur von JPEG das leicht macht. Wir müssen weder DCT-Koeffizienten noch Huffman-Tabellen verstehen. Wir müssen nur erkennen, welche Segmente Metadaten sind und welche nicht.

1

Header prüfen

SOI-Marker (FF D8) am Dateianfang verifizieren

2

Marker auslesen

Jeden Marker der Reihe nach lesen und Typ sowie Länge ermitteln

3

Metadaten identifizieren

Kennungen in den APP-Segmenten prüfen (EXIF, XMP, IPTC usw.)

4

Selektiv kopieren

Segmente ohne Metadaten in die Ausgabe kopieren, Metadaten-Segmente überspringen

Was erhalten bleibt

  • • SOI-/EOI-Marker (erforderlich)
  • • DQT (Quantisierungstabellen)
  • • SOF (Frame-Header)
  • • DHT (Huffman-Tabellen)
  • • SOS und Scan-Daten (das eigentliche Bild)
  • • Optional: ICC-Farbprofil (einstellbar)

Was entfernt wird

  • • APP1 EXIF (Kamera, GPS, Zeitstempel)
  • • APP1 XMP (Bearbeitungs-Metadaten)
  • • APP13 IPTC (Bildunterschriften, Urheber)
  • • COM-Marker (Kommentare)
  • • EXIF-Vorschaubilder

EXIF-Tag-Referenz

Nicht alle EXIF-Tags sind aus Datenschutzsicht gleich heikel. Manche, etwa die Belichtungseinstellungen, sind harmlos. Andere, etwa Seriennummern und Besitzernamen, können dich oder deine Ausrüstung eindeutig identifizieren. Diese Tags stufen wir als besonders riskant ein:

Tag-IDNameDatenschutzrisiko
0x9003DateTimeOriginalHoch
0x9004DateTimeDigitizedHoch
0x9010OffsetTimeMittel
0x9286UserCommentHoch
0x927CMakerNoteHoch
0xA420ImageUniqueIDHoch
0xA430CameraOwnerNameHoch
0xA431BodySerialNumberHoch
0xA434LensModelMittel
0xA435LensSerialNumberHoch
0xFDE8OwnerNameHoch
0xFDE9SerialNumberHoch
Alle Tags zu Kameraeinstellungen anzeigen (nicht identifizierend)
0x829A ExposureTime
0x829D FNumber
0x8822 ExposureProgram
0x8827 ISOSpeedRatings
0x9201 ShutterSpeedValue
0x9202 ApertureValue
0x9203 BrightnessValue
0x9204 ExposureBiasValue
0x9207 MeteringMode
0x9208 LightSource
0x9209 Flash
0x920A FocalLength
0xA001 ColorSpace
0xA002 PixelXDimension
0xA003 PixelYDimension
0xA402 ExposureMode
0xA403 WhiteBalance
0xA405 FocalLengthIn35mmFilm
0xA406 SceneCaptureType

GPS-Tag-Referenz

GPS-Daten liegen in einem eigenen Sub-IFD, auf das das Tag 0x8825 im Haupt-IFD verweist. Existiert dieser Zeiger, enthält dein Bild Standortdaten. Besonders Smartphones betten das sehr bereitwillig ein, oft so präzise, dass sich exakt bestimmen lässt, wo du gestanden hast.

Tag-IDNameBeschreibung
0x0000GPSVersionIDVersion der GPS-Tags
0x0001GPSLatitudeRefN oder S
0x0002GPSLatitudeGrad, Minuten, Sekunden
0x0003GPSLongitudeRefE oder W
0x0004GPSLongitudeGrad, Minuten, Sekunden
0x0005GPSAltitudeRefÜber/unter dem Meeresspiegel
0x0006GPSAltitudeMeter
0x0007GPSTimeStampUTC-Uhrzeit
0x001DGPSDateStampUTC-Datum
0x0012GPSMapDatumGeodätisches Bezugssystem
0x001BGPSProcessingMethodGPS/CELLID/WLAN/MANUAL
0x001CGPSAreaInformationName des Ortes

IPTC-Tag-Referenz

IPTC wurde für Nachrichtenagenturen entwickelt, um Bildunterschriften, Credits und Copyright-Angaben einzubetten. Die Daten liegen in APP13 mit der Kennung „Photoshop 3.0“ (ja, Adobe hat den Standard übernommen). Wenn du jemals Copyright-Angaben oder Schlagwörter in Lightroom oder Photoshop gesetzt hast, landen sie genau hier.

0x0250 By-line (Urheber)
0x0255 By-line Title
0x025A City (Ort)
0x025C Sub-location
0x025F Province/State
0x0265 Country Name
0x0274 Copyright Notice
0x0276 Contact
0x0237 Date Created
0x023C Time Created
0x0278 Caption/Abstract
0x0219 Keywords