Python实现Gif图片分解的示例代码

 更新时间:2022年08月16日 16:37:31   作者:Python 集中营  
这篇文章主要为大家详细介绍了如何利用Python语言实现Gif图片分解功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起动手尝试一下

在前面做过一个Gif图片合成的小工具,老朋友应该有所印象。但是,近段时间有人反映合成了的Gif图片该如何进行分解呢?

于是,再次了解了一下PIL模块的Image,果真是可以做动图分解的。

1、模块安装

使用PIL库,实际上是来源于pillow库的兼容,因此需要安装pillow非标准库。

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pillow

2、模块导入

安装好pillow非标准库之后,将PIL模块中Image图像处理模块导入到代码块中即可。

from PIL import Image

同时,将os系统操作模块导入进来用于对文件夹或文件来进行操作。

import os

导入一个日志模块loguru来记录日志打印,在之前的文章中也介绍过,由于这个模块导入即用比较方便我们这里直接使用它来打印日志。

from loguru import logger

3、分解动图

这里,我们的目的是将一个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))

4、批量分解

若是在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))

5、生成效果

我调用批量生成的函数spt_gif_batch进行了效果测试。

从Google上面直接下载一张Gif的动态图片,原图是这样的效果。

随后,对其进行了批量分解的执行,os.getcwd()表示生成的图片放在当前的路径下面。

spt_gif_batch(os.getcwd(), os.getcwd())

控制台这时也按照预期打印出了日志,日志还是比较漂亮的,哈哈~

完成后,总共生成了25张png格式的图片,我下面跳了其中的几张展示出来。

到此这篇关于Python实现Gif图片分解的示例代码的文章就介绍到这了,更多相关Python Gif图片分解内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Python如何根据时间序列数据作图

    Python如何根据时间序列数据作图

    这篇文章主要介绍了Python如何根据时间序列数据作图,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-05-05
  • python使用plot绘制未来15天气温折线图

    python使用plot绘制未来15天气温折线图

    本文主要介绍了py使用plot绘制未来15天气温折线图,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-09-09
  • 基于Python中request请求得到的response的属性问题

    基于Python中request请求得到的response的属性问题

    这篇文章主要介绍了基于Python中request请求得到的response的属性问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-05-05
  • 关于vscode 默认添加python项目的源目录路径到执行环境的问题

    关于vscode 默认添加python项目的源目录路径到执行环境的问题

    这篇文章主要介绍了vscode 默认添加python项目的源目录路径到执行环境,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-02-02
  • Python实现PS滤镜的万花筒效果示例

    Python实现PS滤镜的万花筒效果示例

    这篇文章主要介绍了Python实现PS滤镜的万花筒效果,结合实例形式分析了Python基于skimage模块操作图片实现PS滤镜万花筒效果的原理与相关操作技巧,需要的朋友可以参考下
    2018-01-01
  • python3安装pip3(install pip3 for python 3.x)

    python3安装pip3(install pip3 for python 3.x)

    这篇文章主要为大家详细介绍了install pip3 for python 3.x,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-04-04
  • Python数据获取实现图片数据提取

    Python数据获取实现图片数据提取

    本文主要介绍了Python数据获取实现图片数据提取,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-05-05
  • 浅谈Python3中打开文件的方式(With open)

    浅谈Python3中打开文件的方式(With open)

    本文主要介绍了浅谈Python3中打开文件的方式(With open),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-08-08
  • Python3.6安装及引入Requests库的实现方法

    Python3.6安装及引入Requests库的实现方法

    下面小编就为大家分享一篇Python3.6安装及引入Requests库的实现方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-01-01
  • Python使用multiprocessing实现一个最简单的分布式作业调度系统

    Python使用multiprocessing实现一个最简单的分布式作业调度系统

    mutilprocess像线程一样管理进程,这个是mutilprocess的核心,他与threading很是相像,对多核CPU的利用率会比threading好的多,通过本文给大家介绍Python使用multiprocessing实现一个最简单的分布式作业调度系统,需要的朋友参考下
    2016-03-03

最新评论