PicScrub logoPicScrub
Retour aux formats

Format TIFF

Tagged Image File Format

Structure de l’en-tête

TIFF est l’ancêtre des métadonnées d’image. Quand vous voyez des données EXIF dans un JPEG, il s’agit en réalité d’une structure TIFF intégrée au fichier. Comprendre TIFF, c’est comprendre le fonctionnement de la plupart des métadonnées d’image.

Le format commence par un en-tête de 8 octets qui livre deux informations essentielles : l’ordre des octets (Intel ou Motorola) et l’emplacement du premier IFD. Ensuite, tout n’est plus qu’une affaire de pointeurs à suivre.

Structure d’un fichier TIFF

Header
IFD0
Strip Data
EXIF IFD
GPS IFD
Header
8 octets
Ordre des octets + nombre magique + offset de l’IFD
IFD0
200 octets
Répertoire de l’image principale
Strip Data
Longueur variable
Données de pixels de l’image
EXIF IFD
500 octets
Sous-répertoire EXIF
GPS IFD
100 octets
Sous-répertoire GPS

En-tête TIFF

Ordre des octets (II = little-endian)
Nombre magique (42)
Offset du premier IFD
OffsetHexASCII
0000
49492A0008000000
II*.....

Ordre des octets

49 49 (II)

Intel : little-endian (octet de poids faible en premier)

4D 4D (MM)

Motorola : big-endian (octet de poids fort en premier)

La structure des IFD

IFD signifie Image File Directory, mais voyez-y plutôt un sommaire. C’est une liste plate de tags, chacun pointant vers une donnée. L’astuce, c’est qu’un IFD peut pointer vers d’autres IFD, formant ainsi une arborescence.

Disposition d’un IFD

2 octetsNombre d’entrées (nombre de tags)
12 × N octetsEntrées de tags (12 octets chacune)
4 octetsOffset de l’IFD suivant (0 s’il n’y en a pas)

Structure d’une entrée de tag (12 octets)

ID du tagTypeNombreValeur/Offset
2 octets2 octets4 octets4 octets

Si la donnée tient dans 4 octets, elle est stockée directement dans le champ de valeur. Sinon, ce champ contient un offset pointant vers la donnée.

Types de tags

TIFF est fortement typé. Chaque tag précise non seulement ce qu’il contient, mais aussi la façon d’interpréter les octets. D’où la nécessité de bien connaître le système de types pour analyser correctement un TIFF.

IDNomTailleDescription
1BYTE1Entier non signé sur 8 bits
2ASCII1Chaîne terminée par un octet nul (8 bits)
3SHORT2Entier non signé sur 16 bits
4LONG4Entier non signé sur 32 bits
5RATIONAL8Deux LONG : numérateur/dénominateur
6SBYTE1Entier signé sur 8 bits
7UNDEFINED1Octets bruts (données binaires)
8SSHORT2Entier signé sur 16 bits
9SLONG4Entier signé sur 32 bits
10SRATIONAL8Deux SLONG : numérateur/dénominateur signés
11FLOAT4Flottant IEEE 32 bits
12DOUBLE8Flottant IEEE 64 bits
13IFD4Pointeur vers un IFD imbriqué

Règle de stockage des valeurs

Si taille × nombre ≤ 4 octets, la valeur est stockée directement dans le champ de valeur de 4 octets. Sinon, ce champ contient un offset indiquant où la donnée est stockée dans le fichier.

Calcul des offsets d’IFD

Le plus difficile, dans l’analyse d’un TIFF, c’est de suivre la chaîne des offsets. Tout est relatif au début du fichier, et vous allez beaucoup sauter d’un endroit à l’autre. Voici comment se fait le calcul :

// Emplacement de l’IFD0
IFD0_offset = bytes[4:8] // Depuis l’en-tête TIFF
// Emplacement de l’IFD suivant (par ex. IFD1 pour la miniature)
next_IFD = IFD0_offset + 2 + (entry_count × 12) + 4
// Emplacement d’un SubIFD (EXIF, GPS)
subIFD_offset = tag_value // Depuis le tag pointeur (0x8769, 0x8825)

Tags importants

Tags de données d’image (conservés)

0x0100 : ImageWidth
0x0101 : ImageLength
0x0102 : BitsPerSample
0x0103 : Compression
0x0111 : StripOffsets
0x0117 : StripByteCounts

Tags de métadonnées (supprimés)

0x010F : Make (fabricant de l’appareil)
0x0110 : Model (modèle de l’appareil)
0x0132 : DateTime
0x013B : Artist
0x8298 : Copyright
0x9003 : DateTimeOriginal

Tags pointeurs (sous-IFD)

0x8769 : ExifIFDPointer
0x8825 : GPSInfoIFDPointer
0xA005 : InteroperabilityIFDPointer

Les sous-IFD

L’IFD principal (IFD0) contient souvent des « tags pointeurs » qui renvoient vers des sous-répertoires. C’est ainsi que les données EXIF, GPS et autres métadonnées sont regroupées par thème, tout en gardant l’IFD principal épuré.

Sous-IFD EXIF

Contient les métadonnées propres à l’appareil : exposition, ouverture, ISO, distance focale, flash, balance des blancs, etc.

Sous-IFD GPS

Contient les données de géolocalisation : latitude, longitude, altitude, horodatage, satellites, vitesse, direction. Risque majeur pour la vie privée.

Notes du fabricant

Données propriétaires de l’appareil. Le format varie d’un fabricant à l’autre. Peuvent contenir des numéros de série, la version du micrologiciel et des réglages personnalisés.

Comment PicScrub traite le TIFF

1

Analyser l’en-tête

Déterminer l’ordre des octets (II/MM) et localiser le premier IFD

2

Établir la liste blanche des tags

Repérer les tags indispensables au rendu de l’image

3

Filtrer les entrées d’IFD

Supprimer les tags de métadonnées et remettre à zéro les pointeurs de sous-IFD

4

Réécrire le fichier

Reconstruire le TIFF avec des IFD nettoyés et les données d’image recopiées

Recalcul des offsets

Les fichiers TIFF font un usage intensif des offsets. Lorsque des métadonnées sont supprimées, PicScrub doit recalculer tous les offsets pour préserver l’intégrité du fichier.