相关功能主要借助于Pillow
Python包
PNG 转 GIF
from PIL import Image
import os
# 存储文件路径
save_path = "gif_process/png"
im = Image.open("xxx.gif") # 使用Image的open函数打开test.gif图像
index = 1
for frame in ImageSequence.Iterator(im): # for循环迭代的取im里的帧
file_path = os.path.join(save_path,'{}.png'.format(str(index).zfill(3)))
frame.save(file_path) # 取到一个帧调用一下save函数保存,每次保存明明为frameX.png
index += 1 # 序号依次叠加
GIF 转 PNG
from PIL import Image
import os
def gen_frame(im):
# 对每一帧png 图片作透明底处理
alpha = im.getchannel('A')
# Convert the image into P mode but only use 255 colors in the palette out of 256
im = im.convert('RGB').convert('P', palette=Image.ADAPTIVE, colors=255)
# Set all pixel values below 128 to 255 , and the rest to 0
mask = Image.eval(alpha, lambda a: 255 if a <=200 else 0)
# The transparency index is 255
im.info['transparency'] = 255
return im
# 存储png 路径
save_path = "D:/Data/save"
list_file = [ i for i in os.listdir(save_path) if i.endswith("png")]
list_file.sort(key=sort_fun)
img_list = []
for index,item_path in enumerate(list_file):
final_file_path = os.path.join(save_path, item_path)
pic_p = Image.open(final_file_path)
img_list.append(gen_frame(final_file_path))
# gif 保存,loop 表示 gif 循环次数 0 表示无限次,duration 表示gif中每帧停留时间,单位ms,disposal建议设为2
img_list[0].save("result.gif", save_all=True, append_images=img_list[1:],loop=0, duration=40,disposal=2)