大家可以看到这个 gif图片 中的 美女,他是在动的 我们要做的就是将他所有的动作 全部都用图片记录下来。一帧一帧的保存下来。gif的本质就是将一帧一帧的图片 轮播。
代码还是很简单的
from PIL import Image
import os
gilFileName = 'meinv.gif' # 将准备好的gif 打开
im = Image.open(gilFileName)
pngDir = gilFileName[:-4] # 获取 .gif 前面的字符,也就是名字
if not os.path.exists(pngDir):
'''如果没有重名的文件夹,就生成这个文件夹来存放图片'''
os.mkdir(pngDir)
try:
'''while True 的作用就是不停的遍历gif,取得每一个图片,如果图片访问结束 会报错,所以 try一下'''
while True:
current = im.tell() # 获取img对象的 帧图片
im.save(pngDir + '\\' + str(current) + '.png') # 保存
im.seek(current + 1) # seek的作用就相当于 装饰器的 next,代表下一个
# current 代表帧图片,+1 就是下一张
except EOFError:
pass
代码就是这么简单,看一下成果
咳咳,回归正题。大家可以看到 图片的名字全都是 数字定义的,所以 current 代表了帧图片的 顺序 我们 在 while True里面 + 1了嘛。
我们 print 打印 current
当我们打开这类图像文件时,PIL 自动载入图像的第一帧。seek 和 tell 方法在各帧之间移动。底层封装很多东西的,不信自己去看源码。我这里不多说。
所以这里一定要用 seek 和 tell,别自己放入 数字。打肿充胖子