Python Pillow – 图像序列
Pillow中的ImageSequence模块包含一个封装类,帮助用户迭代图像序列的帧。它可以迭代动画、gif等。
Iterator class
该类接受一个图像对象作为参数。它实现了一个迭代器对象,用户可以用它来遍历一个图像序列。[ ] 操作符可以用来通过索引访问元素,如果用户试图访问一个不存在的索引,就会引发一个IndexError。
语法:
语法: class PIL.ImageSequence.Iterator(image_object)
首先,应该导入Image和ImageSequence模块,因为我们将使用Image.open()来打开图像或动画文件,在第二个例子中,我们将使用Image.show()来显示一个图像。然后在ImageSequence.Iterator(image_object)方法的帮助下,我们可以对帧进行迭代,也可以提取图像序列中存在的所有帧并将其保存在一个文件中。
我们将使用这个Gif进行演示:
以下是实现情况:
# importing the ImageSequence module:
from PIL import Image, ImageSequence
# Opening the input gif:
im = Image.open("animation.gif")
# create an index variable:
i = 1
# iterate over the frames of the gif:
for fr in ImageSequence.Iterator(im):
fr.save("frame%d.png"%i)
i = i + 1
输出:
该动画(gif文件)总共有36个帧。而输出的结果将是.png模式。
IndexError的例子
在这个例子中,我们将使用本文之前使用的程序的一个小修改版本。我们看到上面的动画一共有36个帧,索引从0到35。当我们试图访问第36帧时,会显示IndexError。
进入最后一帧:
# importing the ImageSequence module:
from PIL import Image, ImageSequence
# Opening the input gif:
im = Image.open("animation.gif")
# create an index variable:
i =1
# create an empty list to store the frames:
app = []
# iterate over the frames of the gif:
for fr in ImageSequence.Iterator(im):
app.append(fr)
fr.save("frame%d.png"%i)
i = i + 1
# print the length of the list of frames.
print(len(app))
app[35].show()
输出:
访问不存在的帧:
# importing the ImageSequence module:
from PIL import Image, ImageSequence
# Opening the input gif:
im = Image.open("animation.gif")
# create an index variable:
i =1
# create an empty list to store the frames:
app = []
# iterate over the frames of the gif:
for fr in ImageSequence.Iterator(im):
app.append(fr)
fr.save("frame%d.png"%i)
i = i + 1
# print the length of the list of frames.
print(len(app))
# nonexistent frame it will show
# IndexError
app[36].show()
输出:
IndexError: list index out of range