Exempls de comment créer une image animée (GIF) en utilisant python et Imagemagick
Créez un GIF en utilisant imagemagick
Pour créer un gif animé à partir d'un ensemble d'images, le plus simple est d'utiliser imagemagick. Imagemagick est certainement déjà installé par défaut sur votre système sinon l'installation ne prend que quelques secondes.
Par exemple, prenons la liste d'images suivante:
pour créer un gif à partir de ces images, entrez la commande suivante dans votre terminal:
convert gb-image-rotation-scipy-matplotlib-angle-* eiffel-tower.gif
Remarque: pour ralentir le défilement, vous devez utiliser l'argument -delay, comme dans cet exemple:
convert -delay 100 *_adjusted.png animation.gif
Créez un GIF en utilisant imagemagick et python
Maintenant, pour utiliser la commande avec python, une solution est d'utiliser le module os:
import os
cmd = "convert gb-image-rotation-scipy-matplotlib-angle-* eiffel-tower.gif"
os.system(cmd)
donne
Un autre example en utilisant PILLOW
Un autre example en utilisant Pillow pour uniformiser la taille des images
Le problème ici est que les images ne sont pas de la même taille et que par conséquent l'image animée au format gif risque d'être coupée. Dans ce cas vous pouvez par exemple utiliser la bibliothèque de python PIL pour retravailler un peu les images avant de créer le fichier gif, comme ci-dessous:
import Image
import os
from PIL import ImageFont
from PIL import Image
from PIL import ImageDraw
im1 = Image.open("1.png")
im2 = Image.open("2.png")
im3 = Image.open("3.png")
im4 = Image.open("4.png")
im5 = Image.open("5.png")
List_i = []
List_j = []
List_i.append(im1.size[0])
List_j.append(im1.size[1])
List_i.append(im2.size[0])
List_j.append(im2.size[1])
List_i.append(im3.size[0])
List_j.append(im3.size[1])
List_i.append(im4.size[0])
List_j.append(im4.size[1])
List_i.append(im5.size[0])
List_j.append(im5.size[1])
print 'Image Size (i,j) Max', max(List_i), max(List_j)
pad = 4
new_im = Image.new('RGB', (max(List_i)+pad,max(List_j)+pad),(255,255,255))
new_im.paste(im1, (0+pad,0+pad))
new_im.save("1_adjusted.png", "PNG")
new_im = Image.new('RGB', (max(List_i)+pad,max(List_j)+pad),(255,255,255))
new_im.paste(im2, (0+pad,0+pad))
new_im.save("2_adjusted.png", "PNG")
new_im = Image.new('RGB', (max(List_i)+pad,max(List_j)+pad),(255,255,255))
new_im.paste(im3, (0+pad,0+pad))
new_im.save("3_adjusted.png", "PNG")
new_im = Image.new('RGB', (max(List_i)+pad,max(List_j)+pad),(255,255,255))
new_im.paste(im4, (0+pad,0+pad))
new_im.save("4_adjusted.png", "PNG")
new_im = Image.new('RGB', (max(List_i)+pad,max(List_j)+pad),(255,255,255))
new_im.paste(im5, (0+pad,0+pad))
new_im.save("5_adjusted.png", "PNG")
# Finally convert images to gif
os.system('convert -delay 100 *_adjusted.png animation.gif')