PythonPillow-画像シーケンス

Python Imaging Library(PIL)には、画像シーケンス(アニメーション形式)の基本的なサポートがいくつか含まれています。FLI / FLC、GIF、およびいくつかの実験形式がサポートされているシーケンス形式です。TIFFファイルには複数のフレームを含めることもできます。

シーケンスファイルを開くと、PILはシーケンスの最初のフレームを自動的にロードします。異なるフレーム間を移動するには、seekメソッドとtellメソッドを使用できます。

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

出力

raise EOFError
EOFError

上記のように、シーケンスが終了するとEOFError例外が発生します。

最新バージョンのライブラリのほとんどのドライバーでは、(上記の例のように)次のフレームをシークすることしかできません。ファイルを巻き戻すには、ファイルを再度開く必要がある場合があります。

シーケンスイテレータクラス

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