- J'ai une liste d'images .png (LIP) Je veux enchaîner dans un fichier GIF animé
- Pour ce faire, je suis actuellement en utilisant la bibliothèque
imageio
- Cependant, je ne peux pas trouver un moyen de faire ce pour produire bonne qualité gifs
pour autant que je sache, il existe deux types de paramètres que je peux changer. Les paramètres imageio.imread()
pour la lecture des fichiers .pngs et les paramètres imageio.mimwrite()
pour l'écriture des fichiers gifs. Selon imageio.help()
,imageio: Comment augmenter la qualité des GIF de sortie?
imageio.imread()
a une lecture paramter seulement pourPNG-PIL
,ignoregamma
qui prend une valeur booléenne. Cela ne change rien pour mes gifs de sortie.imageio.mimwrite()
peut faire référence à deux formats. Le premier estGIF-PIL
. La sortie de ce format ne montre qu'une seule trame, et n'est donc pas souhaitable. Output here.imageio.mimwrite()
a le deuxième formatGIF-FI
. Cela produit des résultats plus prometteurs avec les options suivantes:'quantizer':'wu'
génère un fichier GIF complet avec images spécifiées et des taux de trame, mais produit un « corrompu » de type de qualité. Output here.'quantizer':'nq'
génère un gif complet avec une meilleure qualité 'moins corrompue' que 'wu', mais ne gère pas bien la couleur. Remarquez comment la légende en bas à droite a tendance à changer de couleur. Output here.
Voici le code correspondant pour la meilleure qualité que je pourrais obtenir jusqu'à présent (GIF-FI
avec nq
)
def gen_gif(self, datetime_list):
kwargs_write = {'fps':5.0, 'quantizer':'nq'}
frames = []
for datetime in datetime_list:
frames.append(imageio.imread(datetime+'.png'))
exportname = '{} to {}.gif'.format(datetime_list[0], datetime_list[-1])
imageio.mimsave(exportname, frames, 'GIF-FI', **kwargs_write)
La fonction est appelée avec un paramètre de liste de chaînes contenant le plein chemin vers les images .png à compiler vers le gif.