Python Pillow 图像序列
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...