Python Pillow - Sequências de imagens

A Python Imaging Library (PIL) contém algum suporte básico para sequências de imagens (formatos de animação). FLI / FLC, GIF e alguns formatos experimentais são os formatos de sequência suportados. Os arquivos TIFF também podem conter mais de um quadro.

Abrindo um arquivo de sequência, o PIL carrega automaticamente o primeiro quadro da sequência. Para se mover entre quadros diferentes, você pode usar os métodos de busca e indicação.

from PIL import Image
img = Image.open('bird.jpg')
#Skip to the second frame
img.seek(1)
try:
   while 1:
      img.seek(img.tell() + 1)
      #do_something to img
except EOFError:
   #End of sequence
   pass

Resultado

raise EOFError
EOFError

Como podemos ver acima, você obterá uma exceção EOFError quando a sequência terminar.

A maioria dos drivers na versão mais recente da biblioteca permitem apenas que você busque o próximo quadro (como no exemplo acima), para retroceder o arquivo, você pode ter que reabri-lo.

Uma classe de iterador de sequência

class ImageSequence:
   def __init__(self, img):
      self.img = img
   def __getitem__(self, ix):
      try:
         if ix:
            self.img.seek(ix)
         return self.img
      except EOFError:
         raise IndexError # end of sequence
for frame in ImageSequence(img):
   # ...do something to frame...