这篇“Python怎么实现Gif图片分解”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Python怎么实现Gif图片分解”文章吧。
使用PIL库,实际上是来源于pillow库的兼容,因此需要安装pillow非标准库。
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pillow
安装好pillow非标准库之后,将PIL模块中Image图像处理模块导入到代码块中即可。
from PIL import Image
同时,将os系统操作模块导入进来用于对文件夹或文件来进行操作。
import os
导入一个日志模块loguru来记录日志打印,在之前的文章中也介绍过,由于这个模块导入即用比较方便我们这里直接使用它来打印日志。
from loguru import logger
这里,我们的目的是将一个Gif图片直接分解成png格式的多个图片。首先对单张动态图片完成分解。
创建一个函数sptGif,来实现对单张Gif图片分解的过程。
def spt_gif_one(gif_path, tar_dir, format="png"): ''' 分解单张Gif图片 :param gif_path: Gif 图片路径 :param tar_dir: 分解后的存储路径 :param format: 分解成的图片格式,默认为PNG格式的图片 :return: ''' gif_file_name = os.path.basename(gif_path) logger.info("当前gif动态图片路径:{}".format(gif_file_name)) base_name = str(gif_file_name).split('.')[0] image = Image.open(gif_path) for n in range(image.n_frames): gen_file_name = base_name + '_' + str(n) image.seek(n) image_new = Image.new("RGBA", image.size) image_new.paste(image) image_new.save(os.path.join(tar_dir, "%s.%s" % (gen_file_name, format))) logger.info('文件名称:{}已生成!'.format(gen_file_name))
若是在gif图片比较到的情况下,则可以选择批量分解的方式来进行分解。
一般选择将所有需要分解的gif图片直接放在统一的文件夹下面来完成批量分解。实现思路是通过遍历该文件夹下面的所有的gif图片挨个对其完成分解。
def spt_gif_batch(gif_dir, tar_dir): ''' 批量分解Gif动态图片 :param gif_dir: :param tar_dir: :return: ''' if os.path.isdir(gif_dir): files = os.listdir(gif_dir) for file in files: gif_path = os.path.join(gif_dir, file) if os.path.splitext(gif_path)[1] in '.gif': spt_gif_one(gif_path, tar_dir) else: logger.info('{} 文件格式检查不正确!'.format(gif_path)) else: logger.info('{} 文件夹不存在!'.format(gif_dir))
我调用批量生成的函数spt_gif_batch进行了效果测试。
从Google上面直接下载一张Gif的动态图片,原图是这样的效果。
随后,对其进行了批量分解的执行,os.getcwd()表示生成的图片放在当前的路径下面。
spt_gif_batch(os.getcwd(), os.getcwd())
控制台这时也按照预期打印出了日志,日志还是比较漂亮的,哈哈~
完成后,总共生成了25张png格式的图片,我下面跳了其中的几张展示出来。
以上就是关于“Python怎么实现Gif图片分解”这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注亿速云行业资讯频道。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。