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.
# 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
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().
# 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.
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.
GO TO FULL VERSION