Module ImageSequence
ImageSequence est un module de la bibliothèque Python Pillow (un fork de PIL), spécifiquement conçu pour gérer des images multi-trames (telles que GIF, TIFF et d'autres formats).
Le module ImageSequence permet d'accéder à chaque trame d'une séquence d'images de manière itérative, ce qui le rend idéal pour traiter des images animées ou des fichiers image contenant plusieurs pages.
Principales utilisations d'ImageSequence
- Traitement des GIF animés: lecture et manipulation des animations GIF image par image
- Traitement des TIFF multipages: accès aux pages individuelles dans un fichier TIFF
- Traitement de séquences d'images: traitement par lots d'un seul fichier contenant plusieurs images
- Extraction et analyse d'images: extraction d'images spécifiques à partir d'images animées à des fins d'analyse ou de modification
Méthodes principales du module ImageSequence
Voici les méthodes les plus couramment utilisées dans le module ImageSequence et leurs descriptions :
| Méthode/Attribut | Description | Valeur de retour | Exemple |
|---|---|---|---|
| ImageSequence.Iterator(image) | Crée un objet itérateur pour parcourir une séquence d'images | Objet itérateur | for frame in ImageSequence.Iterator(img): |
| ImageSequence.all_frames(image) | Renvoie une liste contenant toutes les images | Liste | frames = list(ImageSequence.all_frames(img)) |
| seek(frame) | Passer à une image spécifique (pris en charge par certains formats d'image) | Aucune | img.seek(5) # Passer à la 6e image |
| tell() | Renvoie la position d'index de l'image actuelle | Integer | current_frame = img.tell() |
| n_frames | Renvoie le nombre total d'images dans l'image | Integer | total_frames = img.n_frames |
Exemples d'utilisation
1. Utilisation de base : Itération sur toutes les images d'une animation GIF
Exemple
# Ouvrir le fichier GIF
with Image.open('animation.gif') as img:
# Itérer sur chaque image
for i, frame in enumerate(ImageSequence.Iterator(img)):
# Traiter chaque image
frame.save(f'frame_{i}.png') # Enregistrer en tant que fichiers PNG individuels
2. Extraction de toutes les pages d'un fichier TIFF
Exemple
# Ouvrir un fichier TIFF multipage
with Image.open('multipage.tiff') as img:
# Obtenir toutes les images
frames = list(ImageSequence.all_frames(img))
# Traiter chaque page
for i, page in enumerate(frames):
page.save(f'page_{i}.jpg', quality=95)
3. Modification et enregistrement d'un GIF animé
Exemple
# Ouvrir le GIF source
with Image.open('source.gif') as img:
# Préparer la nouvelle liste d'images
new_frames = []
# Traiter chaque image
for frame in ImageSequence.Iterator(img):
# Modifier chaque image (par ex., ajouter du texte)
modified_frame = frame.copy()
# ... Ajoutez votre code de modification ici ...
new_frames.append(modified_frame)
# Enregistrer le GIF modifié
new_frames[0].save('modified.gif',
save_all=True,
append_images=new_frames[1:],
duration=img.info.get('duration', 100),
loop=0)
Notes
- Utilisation de la mémoire: Lors du traitement de grandes images à trames multiples, faites attention à la consommation de mémoire et envisagez de traiter trame par trame plutôt que de charger toutes les trames en une seule fois
- Prise en charge des formats: Tous les formats d'image ne prennent pas en charge les opérations sur trames multiples ; les formats couramment pris en charge comprennent GIF, TIFF, WebP, etc.
- Indice de trame: Les indices de trame commencent à 0, ce qui peut différer de ce que les visionneuses d'images courantes affichent (les visionneuses comptent généralement à partir de 1)
- Modification de l'image originale: La modification directe des trames peut affecter l'image originale ; il est recommandé de recourir à
frame.copy()la création d'une copie avant modification
Résumé
Le module ImageSequence fournit des outils simples mais puissants pour gérer les images à trames multiples. Grâce à son interface d'itérateur, les développeurs peuvent facilement accéder à chaque trame et la manipuler dans les images animées ou multipages. Qu'il s'agisse d'extraire des trames, d'analyser le contenu ou de créer de nouvelles animations, ce module peut grandement simplifier le flux de travail.
Autres extensions