import imageio
gif = []
# 存放多张测试图片的路径拼接
dir_path = os.path.join(os.path.dirname(__file__), 'test')
# 获取该文件夹内的全部文件
png = os.listdir(dir_path)
for i in png:
# 添加图片,传入参数为图片地址,需拼接路径
gif.append(imageio.imread(os.path.join(dir, i)))
# 生成GIF图
imageio.mimsave("test1.gif", gif, fps=5) # fps值越大,生成的gif图播放就越快
经过对2张GIF图片的比对,发现生成的图片与原GIF图的帧数顺序是不一致的
排查发现是因为png = os.listdir(dir_path),生成list的排序问题
png = os.listdir(dir_path)
print(png)
# ['第10帧.png', '第11帧.png', '第12帧.png', '第13帧.png', '第1帧.png', '第2帧.png', '第3帧.png', '第4帧.png', '第5帧.png', '第6帧.png', '第7帧.png', '第8帧.png', '第9帧.png']
由此可以看出,因为listdir遍历的文件顺序与预期是是不一致的,所以导致生成的图片与原图是不一致
解决方法:
import re
png = os.listdir(dir_path)
print(png)
# ['第10帧.png', '第11帧.png', '第12帧.png', '第13帧.png', '第1帧.png', '第2帧.png', '第3帧.png', '第4帧.png', '第5帧.png', '第6帧.png', '第7帧.png', '第8帧.png', '第9帧.png']
png.sort(key=lambda x: int(re.findall(r'第(.*>?)帧', x)[0])) # 默认升序,即reverse = False
print(png)
# 排序后的顺序
# ['第1帧.png', '第2帧.png', '第3帧.png', '第4帧.png', '第5帧.png', '第6帧.png', '第7帧.png', '第8帧.png', '第9帧.png', '第10帧.png', '第11帧.png', '第12帧.png', '第13帧.png']
倒序GIF图
import re
png = os.listdir(dir_path)
# 列表倒序排序
png.sort(key=lambda x: int(re.findall(r'第(.*>?)帧', x)[0]), reverse=True)
print(png)
# ['第13帧.png', '第12帧.png', '第11帧.png', '第10帧.png', '第9帧.png', '第8帧.png', '第7帧.png', '第6帧.png', '第5帧.png', '第4帧.png', '第3帧.png', '第2帧.png', '第1帧.png']