XD blog

blog page

gif animé


2013-05-25 Créer un GIF animé

Il y a quelques mois, j'ai écrit un article sur une façon de convertir des images en GIF animé. Il fallait télécharger deux fichiers. Maintenant, il suffit d'installer le module suivant : pyhome3 (il nécessite Python 3.3 et numpy). Ensuite, le code suivant fera le reste :

# coding: latin-1

# on prend les fichiers dans le répertoire
import os
files = os.listdir(".")
# on ne garde que les images
files = [ _ for _ in files if ".png" in _ ]
# on les tri : image_2.png doit être avant image_10.png 
# (ce qui n'est pas l'ordre alphatétique)
# en enlève tout ce qui n'est pas un chiffre, on convertit un entier
# puis on trie une liste de couples ( numéro, images )
files = [ ( int (_.replace("image_","").replace(".png","")), _) for _ in files ]
files.sort()
files = [ _[1] for _ in files ]

# ici, on renomme les fichiers car ImageMagick utilise l'ordre alphabétique
files = [ ( "image_%03d.png" % i, _) for i,_ in enumerate(files) ]
for new_name, old_name in files :
    if new_name != old_name :
        os.rename(old_name, new_name)
        
# on reprend la nouvelle liste de fichiers        
files = [ _ for _ in os.listdir(".") if ".png" in _ ]
files.sort()

# il faut supprimer ces lignes et installer le module disponible ici
# http://www.xavierdupre.fr/site2013/index_code.html (pyhome3)
# qui ne marche qu'avec python 3.3 + numpy
import sys
sys.path.append(r"D:\Dupre\_data\program\pyhome")

# on importe la fonction qu'il faut
from pyhome3 import create_animated_gif, HalLOG

# la fonction télécharge image magick et cela prend du temps, pour voir
# ce qu'il se passe, il faut utilise la fonction suivante
# le téléchargement n'est plus nécessaiire dès la seconde exécution
HalLOG(OutputPrint=True)

# et on l'exécute
create_animated_gif(files, "final.gif", resize = (400,300))

Si vous avez commencé votre programme avec Python 2.x, vous pouvez toujours exéctuer le programme comme ceci :

import os
os.system("c:\python33\python le_programme_precedent.py")

Afficher le GIF animé en utilisant Python n'est pas facile. On pourrait recréer l'animation manuellement en affichant les images les unes après les autres via tkinter, on pourrait utiliser d'autres modules de type pyQt. Par paresse, j'ai choisi le code suivant :

with open("image_res.html", "w") as f :
    f.write("\n")
    f.write("\n")
    f.write('<img src="final.gif" />\n')
    f.write("\n")    
    f.write("\n")
    
import os
os.system("image_res.html")
Il crée un fichier html puis l'exécute : le navigateur par défaut se chargera de l'afficher.


Xavier Dupré