Python-Kissen - Bildsequenzen

Die Python Imaging Library (PIL) enthält einige grundlegende Unterstützung für Bildsequenzen (Animationsformate). FLI / FLC, GIF und einige experimentelle Formate sind die unterstützten Sequenzformate. TIFF-Dateien können auch mehr als einen Frame enthalten.

Beim Öffnen einer Sequenzdatei lädt PIL automatisch den ersten Frame in der Sequenz. Um zwischen verschiedenen Frames zu wechseln, können Sie die Such- und Tell-Methoden verwenden.

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

Ausgabe

raise EOFError
EOFError

Wie wir oben sehen können, erhalten Sie eine EOFError-Ausnahme, wenn die Sequenz endet.

Bei den meisten Treibern in der neuesten Version der Bibliothek können Sie nur zum nächsten Frame suchen (wie im obigen Beispiel). Um die Datei zurückzuspulen, müssen Sie sie möglicherweise erneut öffnen.

Eine Sequenziteratorklasse

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