PicScrub logoPicScrub
Retour aux formats

JPEG

le plus bavard

Un fichier JPEG stocke ses métadonnées dans des segments APPn, entre l'en-tête du fichier et les données d'image. Voici ce qui se trouve où, et ce que PicScrub fait de chaque partie.

profil de couleur, conservé si vous voulez
SOIdébut
APP0JFIF
APP1EXIF
APP1XMP
APP2ICC
APP13IPTC
COMcommentaire
SOS …votre photo elle-même, intacte
EOIfin
le GPS et l'appareil se cachent ici, supprimé
identique octet par octet

Ce qui est supprimé

  • EXIF coordonnées GPS, marque et modèle de l'appareil, horodatages, réglages d'exposition
  • XMP historique d'édition, logiciel utilisé, notes
  • IPTC / Photoshop légendes, crédits, mots-clés
  • Commentaires et vignettes intégrées une copie minuscule de l'original qui peut survivre à vos recadrages

Ce que vous pouvez garder

  • Données d'image toujours intactes, jamais réencodées
  • Profil de couleur ICC optionnel, pour des couleurs fidèles
  • Orientation optionnelle, pour que les portraits restent droits
  • Mention de copyright optionnelle, pour un crédit sans coordonnées

Vue d’ensemble de la structure

Si vous avez déjà ouvert un JPEG dans un éditeur hexadécimal, vous avez remarqué qu’il se compose de segments séparés par des marqueurs. Chaque marqueur commence par 0xFF, suivi d’un octet qui indique le type de segment. Cette conception rend les JPEG relativement faciles à analyser : il suffit de repérer les octets FF et de regarder ce qui suit.

Du point de vue de la vie privée, l’essentiel est que toutes les métadonnées (EXIF, GPS, horodatages) résident dans ces segments, totalement séparées des données d’image. C’est pour cela que nous pouvons supprimer les métadonnées sans toucher aux pixels ni recompresser quoi que ce soit.

Structure d’un fichier JPEG

SOI
APP0-15
DQT
SOF
DHT
SOS + Data
EOI
SOI
2 octets
Début d’image (FF D8)
APP0-15
100 octets
Marqueurs d’application (métadonnées)
DQT
130 octets
Tables de quantification
SOF
20 octets
Début de trame
DHT
420 octets
Tables de Huffman
SOS + Data
Longueur variable
Données de balayage (l’image)
EOI
2 octets
Fin d’image (FF D9)

Exemple d’en-tête JPEG

SOI (début d’image)
Marqueur APP0
Longueur APP0
Identifiant JFIF
Données JFIF
Marqueur APP1
Longueur APP1
Identifiant Exif
OffsetHexASCII
0000
FFD8FFE000104A464946000101000048
......JFIF.....H
0010
00480000FFE112344578696600000000
.H.....4Exif..

Structure d’un marqueur

  • FF xx : marqueur (xx indique le type)
  • LL LL : longueur (2 octets, big-endian, elle s’inclut elle-même)
  • Data... : données du segment (longueur - 2 octets)

Référence complète des marqueurs JPEG

MarqueurNomDescription
FF D8SOIDébut d’image
FF D9EOIFin d’image
FF C0SOF0Début de trame (DCT de base)
FF C2SOF2Début de trame (DCT progressive)
FF C4DHTDéfinition de table de Huffman
FF DBDQTDéfinition de table de quantification
FF DDDRIDéfinition de l’intervalle de redémarrage
FF DASOSDébut du balayage (les données d’image suivent)
FF FECOMCommentaire (métadonnées)
FF E0APP0Marqueur JFIF
FF E1APP1Marqueur EXIF / XMP
FF E2APP2Profil ICC / MPF
FF EDAPP13IPTC / Photoshop
FF EEAPP14Transformation colorimétrique Adobe

Doré = métadonnées (supprimées), sans surlignage = structure conservée

JFIF ou EXIF ?

Voici ce qui déroute beaucoup de monde : les fichiers JPEG contiennent souvent deux standards de métadonnées à la fois. JFIF est arrivé en premier et gère les informations de base, comme la résolution. Puis les appareils photo se sont mis à ajouter des données EXIF, avec tous les détails de prise de vue. La plupart des JPEG modernes possèdent les deux, d’où la présence des marqueurs APP0 et APP1 en début de fichier.

APP0 : JFIF

JPEG File Interchange Format. Informations de base sur l’image.

  • • Numéro de version
  • • Densité de pixels (DPI)
  • • Rapport d’aspect
  • • Miniature optionnelle

APP1 : EXIF

Exchangeable Image File Format. Métadonnées de l’appareil photo.

  • • Marque et modèle de l’appareil
  • • Coordonnées GPS
  • • Horodatages
  • • Réglages d’exposition

Les marqueurs APP en détail

La spécification JPEG réserve 16 marqueurs « application » (APP0 à APP15) que les éditeurs peuvent utiliser à leur guise. Au fil des années, différentes organisations se sont approprié tel ou tel marqueur pour leur format de métadonnées. Le résultat est un peu brouillon, mais au moins c’est un désordre bien documenté.

La subtilité, c’est qu’un même marqueur peut signifier des choses différentes selon son contenu. APP1, par exemple, peut contenir des données EXIF ou XMP : il faut donc lire la chaîne d’identification qu’il renferme pour savoir à quoi on a affaire.

APP0 (0xFFE0) : JFIF

Identifiant : JFIF\0. Contient la version, les unités de densité, les densités X/Y et une miniature optionnelle. Sans risque à conserver, en général.

APP1 (0xFFE1) : EXIF

Identifiant : Exif\0\0. Contient une structure TIFF complète, avec des entrées IFD pour les infos de l’appareil, les données GPS, les horodatages, les miniatures et les notes du fabricant. Principal risque pour la vie privée.

APP1 (0xFFE1) : XMP

Identifiant : http://ns.adobe.com/xap/1.0/\0. Standard de métadonnées en XML créé par Adobe. Peut contenir l’historique de retouche, des informations sur le logiciel et des données EXIF étendues.

Espaces de noms XMP
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) : XMP étendu

Identifiant : http://ns.adobe.com/xmp/extension/\0. Pour les données XMP dépassant 65 Ko, réparties sur plusieurs segments APP1.

APP2 (0xFFE2) : MPF

Identifiant : MPF\0. Multi-Picture Format, pour les images stéréoscopiques et les panoramas.

APP2 (0xFFE2) : profil ICC

Identifiant : ICC_PROFILE\0. Données de gestion des couleurs. Peuvent être réparties sur plusieurs marqueurs APP2. Généralement sans risque à conserver.

APP13 (0xFFED) : IPTC/Photoshop

Identifiant : Photoshop 3.0\0. Contient des données IPTC-IIM : légendes, mots-clés, copyright, informations sur le créateur. Peut contenir des informations sur l’auteur.

APP14 (0xFFEE) : Adobe

Identifiant : Adobe\0. Contient les indicateurs de transformation colorimétrique (RGB/CMYK). Important pour un rendu correct des couleurs.

La structure EXIF

C’est là que ça devient intéressant (et un peu étrange). Les données EXIF sont en réalité un minuscule fichier TIFF intégré à votre JPEG. Oui, vraiment. Elles ont leur propre en-tête, leur propre ordre des octets, et utilisent la structure IFD (Image File Directory) de TIFF pour stocker les tags.

La première chose qui suit l’identifiant « Exif » est un en-tête TIFF, qui indique si les données sont en little-endian (Intel, « II ») ou en big-endian (Motorola, « MM »). Se tromper là-dessus, c’est obtenir des nombres totalement faux : c’est donc la première chose que vérifie tout analyseur.

En-tête TIFF (8 octets)

Ordre des octets (II = little-endian)
Nombre magique (42)
Offset de l’IFD0
OffsetHexASCII
0000
49492A0008000000
II*.....

II = Intel (little-endian), MM = Motorola (big-endian)

Structure d’une entrée IFD (12 octets)

ID du tagTypeNombreValeur/Offset
2 octets2 octets4 octets4 octets

Entrées IFD importantes

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

Comment PicScrub traite le JPEG

L’approche est plutôt directe : nous parcourons le fichier marqueur par marqueur, conservons ceux qui sont indispensables à l’affichage de l’image et ignorons ceux qui contiennent des métadonnées. Comme nous ne touchons jamais aux données d’image compressées, il n’y a aucune perte de qualité.

L’essentiel est que la structure du JPEG, fondée sur des marqueurs, rend l’opération simple. Nul besoin de comprendre les coefficients DCT ou les tables de Huffman : il suffit de distinguer les segments qui sont des métadonnées de ceux qui n’en sont pas.

1

Valider l’en-tête

Vérifier le marqueur SOI (FF D8) au début du fichier

2

Analyser les marqueurs

Lire chaque marqueur dans l’ordre et en extraire le type et la longueur

3

Identifier les métadonnées

Contrôler les identifiants des segments APP (EXIF, XMP, IPTC, etc.)

4

Copie sélective

Recopier les segments utiles dans le fichier de sortie et ignorer ceux de métadonnées

Ce qui est conservé

  • • Marqueurs SOI/EOI (obligatoires)
  • • DQT (tables de quantification)
  • • SOF (en-tête de trame)
  • • DHT (tables de Huffman)
  • • SOS et données de balayage (l’image elle-même)
  • • En option : profil colorimétrique ICC (configurable)

Ce qui est supprimé

  • • APP1 EXIF (appareil, GPS, horodatages)
  • • APP1 XMP (métadonnées de retouche)
  • • APP13 IPTC (légendes, auteur)
  • • Marqueurs COM (commentaires)
  • • Miniatures EXIF

Référence des tags EXIF

Tous les tags EXIF ne se valent pas en matière de vie privée. Certains, comme les réglages d’exposition, sont plutôt inoffensifs. D’autres, comme les numéros de série ou le nom du propriétaire, permettent de vous identifier, vous ou votre matériel. Voici ceux que nous considérons comme à haut risque :

ID du tagNomRisque pour la vie privée
0x9003DateTimeOriginalÉlevé
0x9004DateTimeDigitizedÉlevé
0x9010OffsetTimeMoyen
0x9286UserCommentÉlevé
0x927CMakerNoteÉlevé
0xA420ImageUniqueIDÉlevé
0xA430CameraOwnerNameÉlevé
0xA431BodySerialNumberÉlevé
0xA434LensModelMoyen
0xA435LensSerialNumberÉlevé
0xFDE8OwnerNameÉlevé
0xFDE9SerialNumberÉlevé
Voir tous les tags de réglage de l’appareil (non identifiants)
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

Référence des tags GPS

Les données GPS résident dans leur propre sous-IFD, désigné par le tag 0x8825 de l’IFD principal. Si ce pointeur existe, votre image contient des données de localisation. Les smartphones récents sont particulièrement zélés sur ce point, souvent avec une précision suffisante pour indiquer exactement où vous vous teniez.

ID du tagNomDescription
0x0000GPSVersionIDVersion des tags GPS
0x0001GPSLatitudeRefN ou S
0x0002GPSLatitudeDegrés, minutes, secondes
0x0003GPSLongitudeRefE ou W
0x0004GPSLongitudeDegrés, minutes, secondes
0x0005GPSAltitudeRefAu-dessus ou au-dessous du niveau de la mer
0x0006GPSAltitudeMètres
0x0007GPSTimeStampHeure UTC
0x001DGPSDateStampDate UTC
0x0012GPSMapDatumSystème géodésique de référence
0x001BGPSProcessingMethodGPS/CELLID/WLAN/MANUAL
0x001CGPSAreaInformationNom du lieu

Référence des tags IPTC

L’IPTC a été conçu pour que les agences de presse puissent intégrer légendes, crédits et mentions de copyright. Ces données sont stockées dans APP13, avec l’identifiant « Photoshop 3.0 » (oui, Adobe l’a repris à son compte). Si vous avez déjà ajouté un copyright ou des mots-clés dans Lightroom ou Photoshop, c’est là qu’ils atterrissent.

0x0250 By-line (auteur)
0x0255 Fonction de l’auteur
0x025A Ville
0x025C Lieu précis
0x025F Région / État
0x0265 Nom du pays
0x0274 Mention de copyright
0x0276 Contact
0x0237 Date de création
0x023C Heure de création
0x0278 Légende / résumé
0x0219 Mots-clés