CodeGym /Cours /Python SELF FR /Travailler avec les métadonnées

Travailler avec les métadonnées

Python SELF FR
Niveau 46 , Leçon 3
Disponible

1. Travailler avec les métadonnées EXIF

Les métadonnées EXIF stockent des infos sur les caractéristiques d'une image, comme les paramètres de prise de vue (ISO, exposition, ouverture), la date de création, l’orientation et même les coordonnées GPS. Les données EXIF peuvent être extraites et utilisées pour analyser les images ou automatiser leur traitement.

Extraction des données EXIF

Les métadonnées EXIF peuvent être extraites avec l'attribut info ou la méthode getexif(). La méthode getexif() donne accès à l’ensemble des données EXIF, si elles sont présentes dans l’image.

Python

# Extraction des données EXIF
exif_data = image._getexif()

# Vérification de la présence des données EXIF
if exif_data is not None:
    for tag_id, value in exif_data.items():
        tag = Image.ExifTags.TAGS.get(tag_id, tag_id)
        print(f"{tag}: {value}")
else:
    print("Données EXIF introuvables.")

Dans ce code, Image.ExifTags.TAGS est utilisé pour décoder les identifiants des balises EXIF en noms lisibles, comme "DateTime", "ExposureTime", "ISOSpeedRatings", etc. Si l’image ne contient pas de données EXIF, la fonction affichera simplement un message pour indiquer leur absence.

2. Extraire des métadonnées clés

Les métadonnées EXIF incluent souvent des paramètres comme la résolution, l’orientation et la géolocalisation. Voyons comment obtenir certaines de ces valeurs, si elles sont présentes dans les données EXIF.

Extraction de la date et heure de prise de vue, de la résolution et de l'orientation

Python

from PIL.ExifTags import TAGS

# Vérification de la présence des données EXIF
if exif_data is not None:
    # Initialisation des variables pour stocker les valeurs
    date_time = None
    orientation = None
    resolution = None

    for tag_id, value in exif_data.items():
        tag = TAGS.get(tag_id, tag_id)

        # Extraction des données selon les balises
        if tag == "DateTime":
            date_time = value
        elif tag == "Orientation":
            orientation = value
        elif tag == "XResolution" or tag == "YResolution":
            resolution = value

    print("Date et heure de prise:", date_time)
    print("Orientation:", orientation)
    print("Résolution:", resolution)
else:
    print("Données EXIF introuvables.")

Cet exemple extrait les valeurs pour DateTime (date et heure de prise de vue), Orientation (orientation de l’image) et XResolution/YResolution (résolution de l’image). Ces données sont souvent utiles pour trier des photos ou générer des rapports.

3. Ajouter et modifier les métadonnées EXIF

Bien que Pillow ait un support limité pour ajouter des données EXIF, il est possible de conserver les métadonnées lors de la conversion d’images, à condition qu’elles soient déjà présentes dans l’image d’origine.

Exemple : Conserver les métadonnées lors de la conversion

Pour conserver les données EXIF lors de la sauvegarde d’une image, utilisez le paramètre exif avec la méthode save().

Python

# Vérification de la présence d'EXIF et sauvegarde avec les métadonnées
if exif_data is not None:
    exif_bytes = image.info['exif']
    image.save("converted_with_exif.jpg", exif=exif_bytes)
else:
    print("Données EXIF absentes.")

Ce code conserve les données EXIF lors de la conversion d’une image dans un autre format, permettant de garder les paramètres d’origine de la prise de vue.

4. Exemples :

Exemple complet de gestion des formats et des métadonnées EXIF

Pour finir, voyons un exemple qui convertit une image, l'optimise et conserve les données EXIF.

Python

from PIL import Image, ExifTags

# Ouverture de l'image
image = Image.open("original.jpg")

# Vérification de la présence des données EXIF
exif_data = image._getexif()
if exif_data:
    exif_bytes = image.info['exif']  # Stockage des données EXIF pour une utilisation ultérieure
else:
    print("Données EXIF absentes.")

# Conversion de l'image en PNG avec optimisation
image_png = image.convert("RGB")
image_png.save("optimized_image.png", optimize=True)

# Conversion en JPEG avec conservation des EXIF et réduction de la qualité
if exif_data:
    image.save("compressed_with_exif.jpg", quality=85, exif=exif_bytes)
else:
    image.save("compressed_without_exif.jpg", quality=85)

Ce code inclut :

  • Conversion de l’image au format PNG avec optimisation.
  • Conversion au format JPEG avec réduction de la qualité pour optimiser la taille.
  • Conservation des données EXIF lors de la conversion, si elles sont présentes.

Applications pratiques de la gestion des formats et des métadonnées EXIF

  • Optimisation des images pour le web : Convertir des images en formats optimisés, comme JPEG et PNG, réduit leur taille et accélère le chargement des pages.
  • Extraction des données pour des rapports : Les métadonnées EXIF contiennent des infos sur les paramètres de prise de vue, utiles pour analyser des photos et créer des rapports.
  • Conservation des métadonnées après édition : Lors de l’édition d’images, il est possible de conserver les paramètres de prise de vue originaux, ce qui est utile pour l’archivage et la documentation.
Commentaires
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION