Pillow - 图像序列

  • 简述

    Python 图像库 (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...