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

目录
  • 1、模块安装
  • 2、模块导入
  • 3、分解动图
  • 4、批量分解
  • 5、生成效果

在前面做过一个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图片分解内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Python生成截图选餐GIF动画

    目录 python生成文字动图 下载表情图片到本地 分析动图 生成单张图片 爬取菜品数据 生成菜名动图 PIL操作gif的其他操作 Gif拆分 GIF倒放 之前群里有小伙伴问今天中午该吃什么,然后另一位小伙伴发了一张下面的动图: 我个人觉得还挺有意思的,截图还真像抽奖一样随机选一个菜名.考虑到这张动图中的菜名候选并不见得都是我们能够吃的菜.我们可以用python根据菜名列表生成这样的动图玩玩. 之前还看到什么截图选头像之类的动图,那类通过图片生成的动图都比较简单,通过文中提到的Imagine的动

  • 如何使用Python快速生成gif图

    目录 前言 imageio介绍 imageio安装 合成gif图 读取特殊url图片 总结 前言 gif图就是动态图,它的原理和视频有点类似,也是通过很多静态图片合成的.本篇文章主要介绍,如何利用Python快速合成gif图,主要利用Python的第三方库imageio imageio介绍 imageio提供了很多方便读写图片的接口.包括读取网络图片.读取视频.生成gif图等.imageio提供许多的接口,imageio API,和示例程序 imageio安装 pip install image

  • 用Python将GIF动图分解成多张静态图片

    需求 有时候你看到一张动态图片,其中的一个画面你觉得很不错,想从中提取出来.例如以下这张由多个漂亮小姐姐组成的 GIF 动态图: 实现 GIF 动态图片是由多张静态图片组合而成,按照一定的顺序和时间进行播放.基于此,能不能将 GIF 图片反向分解成一张张静态图呢?即 GIF 图片有多少帧,就有多少张静态图片.答案是肯定的! 都有现成的工具,有免费的,有付费的,有在线版的:还有些专门处理 GIF 动态图片的强大工具. 不过,作为 IT 人,不试试自己实现吗?初学编程,可以练练手:高手可 DIY 可

  • python对gif图压缩的完美解决方案

    目录 1. 背景: 2.寻找解决办法 2.1可行性分析 3.问题分解 3.1将gif文件分解 3.1.1示例代码 3.1.2 效果图 4.代码优化 5.做成一个通用工具 5.1创建一个虚拟环境 5.2虚拟环境安装必要库 5.3打包 5.4把.gif文件放到compress.exe文件夹下 5.5双击.exe查看打包效果 5.6压缩后的图片效果 总结 1. 背景: 最近写了一篇CSDN博客需要上传gif图,发现大小超过了5M,无法上传. 文件大小: 本想自己找个免费的压缩工具,结果下载下来的工具不

  • Python简单实现gif动图倒放示例

    最近是有点忙,感觉好久没写博客了.但是最近看到一个有趣的就是gif动图的倒放,因为这个原理也并不是很难,而且用到的库以前也略微的看过一点点,所以要新学的东西不是很多. 开发环境 :pycharm + win10下python环境 主题思路就是将gif动图的每一帧都截取下来,将整张动图拆分成图片流,然后将图片流反序,最后将反序后的图片流重新合成成一张gif动图,下面贴上代码  : # python下的图像处理库 from PIL import Image, ImageSequence # 系统模块

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

    目录 1.模块安装 2.模块导入 3.分解动图 4.批量分解 5.生成效果 在前面做过一个Gif图片合成的小工具,老朋友应该有所印象.但是,近段时间有人反映合成了的Gif图片该如何进行分解呢? 于是,再次了解了一下PIL模块的Image,果真是可以做动图分解的. 1.模块安装 使用PIL库,实际上是来源于pillow库的兼容,因此需要安装pillow非标准库. pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pillow 2.模块导

  • Python批量改变图片名字的示例代码

    目录 一.系统自带的快捷改名 二.用Python按要求改名 三.在原有的图片上进行修改 总结 一.系统自带的快捷改名 1.打开对应的图片文件 2.全选后右击重命名 3.输入:Cat 注意: 默认你输入的Cat与(1)之间有一个空格 二.用Python按要求改名 1.代码如下: import os.path def rename(img_folder,num): for img_name in os.listdir(img_folder): # os.listdir(): 列出路径下所有的文件 #

  • python opencv实现gif图片分解的示例代码

    案例:将和当前脚本同目录下的gif图片分解成png图片,并将分解后的图片保存到pics目录下,将其从0开始命名. GIF 动图的分解可以利用 PIL模块的Image类来实现. from PIL import Image import os """ 将一张GIF动图分解到指定文件夹 src_path:要分解的gif的路径 dest_path:保存后的gif路径 """ def gifSplit(src_path, dest_path, suffix

  • 使用python画个小猪佩奇的示例代码

    基本原理 选好画板大小,设置好画笔颜色.粗细,定位好位置,依次画鼻子.头.耳朵.眼睛.腮.嘴.身体.手脚.尾巴,完事儿. 都知道,Turtle 是 Python 内置的一个比较有趣味的模块,俗称"海龟绘图",它是基于 Tkinter 模块打造,提供一些简单的绘图工具. 在海龟作图中,我们可以编写指令让一个虚拟的(想象中的)海龟在屏幕上来回移动.这个海龟带着一只钢笔,我们可以让海龟无论移动到哪都使用这只钢笔来绘制线条.通过编写代码,以各种很酷的模式移动海龟,我们可以绘制出令人惊奇的图片.

  • 使用Python绘制台风轨迹图的示例代码

    参考: 1.Basemap绘制中国地图 2.Basemap生成的图中绘制轨迹 使用CMA热带气旋最佳路径数据集,对我国周边的台风进行绘制 import re import os import numpy as np import matplotlib.pyplot as plt from mpl_toolkits.basemap import Basemap path=r"E:\Computer Science\数学建模\第二次模拟赛题\附件" files= os.listdir(pa

  • python 模拟登录B站的示例代码

    需要将模拟的浏览器,添加到环境变量中哦.代码中用的是chrome from selenium import webdriver from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.common.by import By from selenium.webdriv

  • Python+Opencv实现数字识别的示例代码

    一.什么是数字识别?   所谓的数字识别,就是使用算法自动识别出图片中的数字.具体的效果如下图所示: 上图展示了算法的处理效果,算法能够自动的识别到LCD屏幕上面的数字,这在现实场景中具有很大的实际应用价值.下面我们将对它的实现细节进行详细解析. 二.如何实现数字识别?   对于数字识别这个任务而言,它并不是一个新的研究方向,很久之前就有很多的学者们在关注这个问题,并提出了一些可行的解决方案,本小节我们将对这些方案进行简单的总结. 方案一:使用现成的OCR技术. OCR,即文字识别,它是一个比较

  • python实现三阶魔方还原的示例代码

    思路 复原魔方困难问题的分解: ​ 1.用合适的数据结构表示出三阶魔方的六个面以及每一面的颜色 ​ 2.每一次不同旋转操作的实现 ​ 3.复原时如何判断当前魔方应该使用哪一种公式 本次实验实现了前两个操作,具体思路是: 用numpy库中的矩阵将六个面分别表示出来,按上下左右前后的顺序放入列表中.再依据流行公式里的方法编写对每一个面进行旋转操作的函数,调用函数实现魔方的旋转.最后输入指令可得到旋转之后的魔方,以及执行逆序指令后验证魔方还原. 预备知识 矩阵:使用numpy库中的矩阵结构 函数说明:

  • Python搭建Gitee图床的示例代码

    目录 摘要 新建仓库 克隆仓库 获取TinyPng的"API Key" 安装需要的Python包 编写Python脚本 测试功能 摘要 在写博客的过程中经常要插入图片,许多博客平台提供了图片上传的服务,但是不能保证长期有效,不同平台还不能通用,所以要通过搭建统一的图床来实现.有用服务器作为图床和第三方图床,前者限制多,需要备案,后者不是很可靠,而用代码托管平台做图床,既稳定可靠没有很大限制,而且数据实现同步,即使云端的数据丢失了,本地还有备份,而在中国,为了提升访问速度,我们并不选取G

  • python实现自动抢课脚本的示例代码

    目录 自动抢课脚本使用手册 1.准备工作 2.配合使用py脚本和xlsx文件 3.auto_get_lesson_pic_recognize功能介绍 4.坐标版本(不建议使用) 5.代码 自动抢课脚本使用手册 @danteking dating from 2021.12.7 and last updating at 2021.12.8 gitee仓库 github仓库 借助pyautogui库,我们可以轻松地控制鼠标.键盘以及进行图像识别,实现自动抢课的功能 1.准备工作 我们在仓库里提供了2个

随机推荐