
Cet article décrit comment créer un GIF animé avec Pillow en Python.
- Comment créer un GIF à partir d’images avec Image.save()
- Exemple de code pour créer un GIF animé
- Paramètres de Image.save()
- append_images
- optimiser
- boucle
- durée
Comment créer un GIF à partir d’images avec Image.save()
Vous pouvez créer un GIF animé à partir de plusieurs images et l’enregistrer avec Image.save().
im.save('.gif', save_all=True, append_images=[im1, im2, ...])
La liste d’images [im1, im2, …] est ajoutée à la première image, im, et un fichier GIF animé .gif est généré et enregistré.
Voir le document officiel ci-dessous pour plus de détails.
L’exemple de code et l’explication des paramètres sont présentés ci-dessous.
Exemple de code pour créer un GIF animé
Voici un exemple de code pour dessiner des cercles qui grandit progressivement avec ImageDraw de Pillow et l’enregistre en tant que fichier GIF.
from PIL import Image, ImageDraw
images = []
width = 200
center = width // 2
color_1 = (0, 0, 0)
color_2 = (255, 255, 255)
max_radius = int(center * 1.5)
step = 8
for i in range(0, max_radius, step):
im = Image.new('RGB', (width, width), color_1)
draw = ImageDraw.Draw(im)
draw.ellipse((center - i, center - i, center + i, center + i), fill=color_2)
images.append(im)
for i in range(0, max_radius, step):
im = Image.new('RGB', (width, width), color_2)
draw = ImageDraw.Draw(im)
draw.ellipse((center - i, center - i, center + i, center + i), fill=color_1)
images.append(im)
images[0].save('data/dst/pillow_imagedraw.gif',
save_all=True, append_images=images[1:], optimize=False, duration=40, loop=0)
Le fichier GIF animé suivant est généré.
Consultez l’article suivant sur la façon de dessiner des figures telles que des cercles avec Pillow.
Paramètres de Image.save()
En gros, si vous avez une liste d’images, vous pouvez créer un GIF animé avec le code suivant :
images[0].save('data/dst/pillow_imagedraw.gif',
save_all=True, append_images=images[1:], optimize=False, duration=40, loop=0)
Si vous souhaitez créer une animation GIF à partir de plusieurs images existantes au lieu de dessiner des graphiques et de créer des images comme dans l’exemple ci-dessus, vous pouvez faire de même si vous chargez les images et les stockez dans une liste.
append_images
Appelez la méthode save() à partir de la première image du cadre, en transmettant la liste des images restantes à append_images.
Notez que si vous utilisez append_images=images, la première image sera répétée deux fois. Dans l’exemple ci-dessus, la deuxième image et les suivantes sont sélectionnées par découpage.
optimiser
Je n’ai pas lu correctement le code source, donc je ne sais pas quel traitement est effectué, mais si la valeur par défaut (optimize=True), des images similaires peuvent être omises.
Si le fichier de sortie est erroné, essayez d’optimize=False peut le résoudre.
boucle
Définissez le nombre de boucles à boucler. Si vous définissez loop=0, cela devient une boucle infinie.
Notez que l’animation se termine à un moment par défaut.
durée
Définissez le temps d’affichage de chaque image sur une durée en millisecondes. Si la valeur est trop petite, elle sera ignorée.