python 合成gif与拆分gif为png图片
Posted Jason_WangYing
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python 合成gif与拆分gif为png图片相关的知识,希望对你有一定的参考价值。
最近做微信表情包,由于给的是.fla的文件格式,我这边用了好几个软件打开都是提示“意外的格式错误”,最后去查说是要不然导出的版本太高,要不然就是导出文件有问题,我一想直接给gif转成png,从里面挑选出静态图片了
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time : 2021/11/11 8:54 上午
# @Author : wangying
# @Site :
# @File : giftopng.py
# @Software: PyCharm
from PIL import Image
import os
import random
class GIFTest:
def __init__(self, file_name):
self.file_name = file_name # 传入的文件名
self.dir_name = self.file_name[:-4] # 根据文件名创建存放分帧图片的文件夹
self.gif_path = os.path.join(os.path.dirname(__file__), file_name) # 拼接图片文件的完整路径(仅限同一文件夹内)
self.make_dir()
def make_dir(self):
"""用于创建存放分帧图片的文件夹"""
try:
os.mkdir(self.dir_name)
except FileExistsError:
print('<%s>文件夹已存在' % self.dir_name)
self.dir_name += str(random.randint(0, 10))
os.mkdir(self.dir_name)
def framing_test(self):
"""GIF图片分帧"""
img = Image.open(self.gif_path)
try:
while True:
curr = img.tell()
name = os.path.join(self.dir_name, '第%s帧.png' % str(curr + 1))
img.save(name)
img.seek(curr+1)
except Exception as e:
pass
# def make_to_gif(self,source, name, duration):
def from_str_get_number(temp_str):
number = filter(str.isdigit, temp_str)
number_list = list(number)
return ''.join(number_list)
def make_to_gif():
photo_list = []
#获取保存的PNG图像
pic_list = os.listdir("表情包-10款-bye/")
#对图像List排序,防止图像位置错乱
pic_list.sort(key=lambda x:from_str_get_number(x))
for k in pic_list:
pic_p = Image.open("表情包-10款-bye/{}".format(k))
photo_list.append(pic_p)
transparency = pic_p.info['transparency']
#保存图像,disposal可以为2或者3,但是不能为1或0,切记,其他自定义未尝试
photo_list[0].save("dabai_new.gif", save_all=True, append_images=photo_list[1:],duration=200,transparency=transparency,loop=0,disposal=2)
# 参考地址 http://www.pythonclub.org/modules/pil/convert-png-gif
if __name__ == '__main__':
# for item in os.listdir():
# if '.gif' in item:
# GIFTest(item).framing_test()
make_to_gif()
由于临时写的,也就不在进行代码优化了,大家随便看看吧!
主要是要带小孩出去玩了,没时间了
以上是关于python 合成gif与拆分gif为png图片的主要内容,如果未能解决你的问题,请参考以下文章