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...