Python Pillow - Sequenze di immagini

La Python Imaging Library (PIL) contiene un supporto di base per le sequenze di immagini (formati di animazione). FLI / FLC, GIF e alcuni formati sperimentali sono i formati di sequenza supportati. Anche i file TIFF possono contenere più di un frame.

Aprendo un file di sequenza, PIL carica automaticamente il primo fotogramma della sequenza. Per spostarti tra diversi fotogrammi, puoi utilizzare i metodi cerca e racconta.

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

Produzione

raise EOFError
EOFError

Come possiamo vedere sopra, otterrai un'eccezione EOFError al termine della sequenza.

La maggior parte dei driver nell'ultima versione della libreria consente solo di cercare il frame successivo (come nell'esempio sopra), per riavvolgere il file potrebbe essere necessario riaprirlo.

Una classe iteratore di sequenza

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