Maison > Article > développement back-end > Introduction à l'analyse et à la synthèse Python des graphiques dynamiques GIF
Le contenu de cet article est une introduction aux opérations d'analyse et de synthèse du traitement Python des images dynamiques gif. Il a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer.
L'exemple de cet article décrit l'analyse et la synthèse de graphiques dynamiques gif dans le traitement d'image Python. J'aimerais le partager avec vous pour votre référence. Les détails sont les suivants :
Les images animées GIF sont désormais monnaie courante, et les gens se disputent souvent pour elles dans le cercle d'amis lorsqu'ils ne sont pas d'accord. Ici, je vais vous présenter comment utiliser Python pour analyser et générer des images GIF.
1. Synthèse de l'animation gif
Comme indiqué ci-dessous, il s'agit d'une animation gif.
L'analyse des images dynamiques gif peut utiliser le module image PIL
Le code spécifique est le suivant :
#-*- coding: UTF-8 -*- import os from PIL import Image def analyseImage(path): ''' Pre-process pass over the image to determine the mode (full or additive). Necessary as assessing single frames isn't reliable. Need to know the mode before processing all frames. ''' im = Image.open(path) results = { 'size': im.size, 'mode': 'full', } try: while True: if im.tile: tile = im.tile[0] update_region = tile[1] update_region_dimensions = update_region[2:] if update_region_dimensions != im.size: results['mode'] = 'partial' break im.seek(im.tell() + 1) except EOFError: pass return results def processImage(path): ''' Iterate the GIF, extracting each frame. ''' mode = analyseImage(path)['mode'] im = Image.open(path) i = 0 p = im.getpalette() last_frame = im.convert('RGBA') try: while True: print "saving %s (%s) frame %d, %s %s" % (path, mode, i, im.size, im.tile) ''' If the GIF uses local colour tables, each frame will have its own palette. If not, we need to apply the global palette to the new frame. ''' if not im.getpalette(): im.putpalette(p) new_frame = Image.new('RGBA', im.size) ''' Is this file a "partial"-mode GIF where frames update a region of a different size to the entire image? If so, we need to construct the new frame by pasting it on top of the preceding frames. ''' if mode == 'partial': new_frame.paste(last_frame) new_frame.paste(im, (0,0), im.convert('RGBA')) new_frame.save('%s-%d.png' % (''.join(os.path.basename(path).split('.')[:-1]), i), 'PNG') i += 1 last_frame = new_frame im.seek(im.tell() + 1) except EOFError: pass def main(): processImage('test_gif.gif') if __name__ == "__main__": main()
Les résultats de l'analyse sont. comme suit, on peut donc voir que L'image dynamique modifiée est en fait une combinaison de 14 images statiques de même résolution
2. Synthèse de image dynamique gif
Synthèse d'image Gif, en utilisant la bibliothèque imageio
(https://pypi.python.org/pypi/imageio)
Le code est le suivant suit :
#-*- coding: UTF-8 -*- import imageio def create_gif(image_list, gif_name): frames = [] for image_name in image_list: frames.append(imageio.imread(image_name)) # Save them as frames into a gif imageio.mimsave(gif_name, frames, 'GIF', duration = 0.1) return def main(): image_list = ['test_gif-0.png', 'test_gif-2.png', 'test_gif-4.png', 'test_gif-6.png', 'test_gif-8.png', 'test_gif-10.png'] gif_name = 'created_gif.gif' create_gif(image_list, gif_name) if __name__ == "__main__": main()
Ici, en utilisant 8 images issues des images analysées dans la première étape, avec un intervalle de 0,1 s, la nouvelle animation gif est synthétisée comme suit :
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!