Metadonnees EXIF : les informations cachees

Chaque photo que vous prenez contient bien plus que l'image visible : date, heure, localisation GPS, modele de telephone... Ces informations cachees s'appellent les metadonnees EXIF, et elles peuvent reveler beaucoup sur vous !

Difficulte:
25 min
+30 XP

Exemples de donnees cachees dans vos photos

Appareil
iPhone 15 Pro
Date/Heure
2024-03-20 14:32
Localisation GPS
48.8566, 2.3522

Ces informations sont invisibles a l'oeil nu mais stockees dans le fichier !

Objectifs du cours

  • Comprendre ce que sont les metadonnees EXIF d'une image
  • Savoir lire et interpreter les informations EXIF avec Python
  • Connaitre les enjeux de vie privee lies aux metadonnees
  • Apprendre a supprimer les metadonnees sensibles

Erreurs courantes a eviter

  • Ignorer que les photos contiennent des donnees de localisation GPS
  • Penser que les metadonnees sont visibles a l'oeil nu
  • Ne pas realiser que partager une photo = partager ses metadonnees
  • Croire que toutes les plateformes suppriment automatiquement les EXIF

**Definition**

**EXIF** = Exchangeable Image File Format

Ce sont des donnees supplementaires enregistrees automatiquement dans chaque photo par l'appareil photo ou le smartphone.

**Ces informations sont invisibles** quand on regarde l'image, mais elles sont bien presentes dans le fichier.

**Types de metadonnees**

**1. Informations techniques (camera)** - Marque et modele de l'appareil - Ouverture (f/2.8, f/5.6...) - Vitesse d'obturation (1/500s, 1/30s...) - Sensibilite ISO (100, 400, 1600...) - Distance focale - Flash utilise ou non

**2. Informations temporelles** - Date et heure de la prise de vue - Fuseau horaire - Date de modification

**3. Informations de localisation (GPS)** - Latitude et longitude - Altitude - Direction de la prise de vue

**4. Autres informations** - Nom du fichier original - Logiciel de retouche utilise - Vignette de previsualisation - Copyright (si ajoute)

**Ou sont stockees ces donnees ?**

Les metadonnees sont stockees directement dans le fichier image : - **JPEG** : oui (EXIF standard) - **PNG** : donnees limitees (pas d'EXIF standard) - **TIFF** : oui (EXIF complet) - **RAW** : oui (EXIF + donnees constructeur)

**Attention** : Une image de 3 Mo peut contenir plusieurs Ko de metadonnees !

Python - Manipulation des metadonnees EXIF
# Demonstration des metadonnees EXIF
# (Simulation pedagogique)

# Structure type des metadonnees EXIF
exemple_exif = {
    # Informations sur l'appareil
    "Make": "Apple",
    "Model": "iPhone 15 Pro",
    "Software": "iOS 17.2",

    # Parametres de prise de vue
    "ExposureTime": "1/1000",  # Vitesse d'obturation
    "FNumber": 1.78,           # Ouverture f/1.78
    "ISOSpeedRatings": 50,     # Sensibilite ISO
    "FocalLength": 6.86,       # Focale en mm
    "Flash": "Flash did not fire",

    # Date et heure
    "DateTime": "2024:01:15 14:32:45",
    "DateTimeOriginal": "2024:01:15 14:32:45",

    # Localisation GPS
    "GPSLatitude": 48.8566,    # Paris
    "GPSLongitude": 2.3522,
    "GPSAltitude": 35.0,       # metres

    # Autres
    "Orientation": 1,          # Rotation de l'image
    "XResolution": 72,         # DPI
    "YResolution": 72,
    "ColorSpace": "sRGB",
}

def afficher_exif(exif_data):
    """Affiche les metadonnees de maniere lisible."""
    categories = {
        "Appareil": ["Make", "Model", "Software"],
        "Prise de vue": ["ExposureTime", "FNumber", "ISOSpeedRatings", "FocalLength", "Flash"],
        "Date/Heure": ["DateTime", "DateTimeOriginal"],
        "Localisation": ["GPSLatitude", "GPSLongitude", "GPSAltitude"],
        "Technique": ["Orientation", "XResolution", "ColorSpace"],
    }

    for categorie, champs in categories.items():
        print(f"\n=== {categorie.upper()} ===")
        for champ in champs:
            if champ in exif_data:
                valeur = exif_data[champ]
                print(f"  {champ}: {valeur}")

print("=== METADONNEES EXIF D'UNE PHOTO ===")
afficher_exif(exemple_exif)

print("\n" + "="*50)
print("\n=== CE QUE REVELENT CES DONNEES ===\n")

revelations = [
    f"Telephone : {exemple_exif['Make']} {exemple_exif['Model']}",
    f"Date : {exemple_exif['DateTime'][:10].replace(':', '-')}",
    f"Heure : {exemple_exif['DateTime'][11:]}",
    f"Lieu : Latitude {exemple_exif['GPSLatitude']}, Longitude {exemple_exif['GPSLongitude']}",
    "       -> Paris, pres de la Tour Eiffel !",
    f"Altitude : {exemple_exif['GPSAltitude']} metres",
]

print("Cette photo revele :")
for r in revelations:
    print(f"  - {r}")

print("\n-> Beaucoup d'informations personnelles en une seule photo !")

Quiz de validation

1. Que signifie EXIF ?

2. Quelle information n'est PAS typiquement stockee dans les metadonnees EXIF ?

3. Quel risque principal les metadonnees GPS representent-elles ?

4. Quelle plateforme conserve generalement les metadonnees EXIF des photos partagees par email ?

5. Quelle bibliotheque Python permet de lire les metadonnees EXIF ?

Pixel