Maison > développement back-end > Tutoriel Python > Introduction à l'analyse et à la synthèse Python des graphiques dynamiques GIF

Introduction à l'analyse et à la synthèse Python des graphiques dynamiques GIF

不言
Libérer: 2018-12-31 09:24:27
avant
4256 Les gens l'ont consulté

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()
Copier après la connexion

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()
Copier après la connexion

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!

Étiquettes associées:
source:jb51.net
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal