El módulo ImageSequence en la Pillow contiene una clase contenedora que ayuda a los usuarios a iterar sobre los fotogramas de una secuencia de imágenes. Puede iterar sobre animaciones, gifs, etc.
clase de iterador
Esta clase acepta un objeto de imagen como parámetro. Implementa un objeto iterador que puede ser utilizado por un usuario para iterar sobre una secuencia de imágenes. El operador [ ] se puede usar para acceder a los elementos por índices y esto genera un IndexError si un usuario intenta acceder a un índice que no existe.
Sintaxis:
Sintaxis: clase PIL.ImageSequence.Iterator(imagen_objeto)
Primero, se deben importar los módulos Image e ImageSequence , ya que usaremos Image.open() para abrir la imagen o el archivo de animación y, en el segundo ejemplo, usaremos Image.show() para mostrar una imagen. Luego, con la ayuda del método ImageSequence.Iterator(image_object) podemos iterar sobre los cuadros y también extraer todos los cuadros presentes en la secuencia de imágenes y guardarlos en un archivo.
Usaremos este Gif para la demostración:
A continuación se muestra la implementación:
Python3
# importing the ImageSequence module: from PIL import Image, ImageSequence # Opening the input gif: im = Image.open("animation.gif") # create an index variable: i = 1 # iterate over the frames of the gif: for fr in ImageSequence.Iterator(im): fr.save("frame%d.png"%i) i = i + 1
Producción:
La animación (archivo gif) tiene 36 fotogramas en total. Y las salidas estarán en el modo .png.
Ejemplo de error de índice:
Para este ejemplo, utilizaremos una pequeña versión modificada del programa utilizado anteriormente en este artículo. Hemos visto que la animación anterior tiene un total de 36 cuadros indexados del 0 al 35. Cuando intentemos acceder al cuadro 36, mostrará IndexError .
Accediendo al último cuadro:
Python3
# importing the ImageSequence module: from PIL import Image, ImageSequence # Opening the input gif: im = Image.open("animation.gif") # create an index variable: i =1 # create an empty list to store the frames: app = [] # iterate over the frames of the gif: for fr in ImageSequence.Iterator(im): app.append(fr) fr.save("frame%d.png"%i) i = i + 1 # print the length of the list of frames. print(len(app)) app[35].show()
Producción:
Accediendo a un marco inexistente:
Python3
# importing the ImageSequence module: from PIL import Image, ImageSequence # Opening the input gif: im = Image.open("animation.gif") # create an index variable: i =1 # create an empty list to store the frames: app = [] # iterate over the frames of the gif: for fr in ImageSequence.Iterator(im): app.append(fr) fr.save("frame%d.png"%i) i = i + 1 # print the length of the list of frames. print(len(app)) # nonexistent frame it will show # IndexError app[36].show()
Producción:
IndexError: list index out of range
Publicación traducida automáticamente
Artículo escrito por tenacious39 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA