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


Posted in Python onJune 11, 2021

需求

有时候你看到一张动态图片,其中的一个画面你觉得很不错,想从中提取出来。例如以下这张由多个漂亮小姐姐组成的 GIF 动态图:

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

实现

GIF 动态图片是由多张静态图片组合而成,按照一定的顺序和时间进行播放。基于此,能不能将 GIF 图片反向分解成一张张静态图呢?即 GIF 图片有多少帧,就有多少张静态图片。答案是肯定的! 都有现成的工具,有免费的,有付费的,有在线版的;还有些专门处理 GIF 动态图片的强大工具。

不过,作为 IT 人,不试试自己实现吗?初学编程,可以练练手;高手可 DIY 可扩展,不受限制,“无拘无束”!

那么,如何用代码实现这个需求呢?有人说,“Python 除了不会生孩子,什么都会。”这件区区小事,Python 实现也当然不在话下了!这是一个图像处理问题,Python Imaging Library 这不是 PIL 库吗? PIL 已经是 Python 平台事实上的图像处理标准库了。PIL 功能非常强大,但 API 却非常简单易用。不过,

由于 PIL 仅支持到 Python 2.7,加上年久失修,于是一群志愿者在 PIL 的基础上创建了兼容的版本,名字叫 Pillow,支持最新 Python 3.x,又加入了许多新特性,因此,我们可以直接安装使用 Pillow。

在 Pillow 中,有一个模块是专门实现动态图片提取功能的,这就是 ImageSequence 模块,这个模块包含一个包装器类,可以帮助用户迭代图像序列的帧。它可以遍历动画、 GIF 等 。 此类接受一个图像对象作为参数。它实现了一个迭代器对象,用户可以使用该对象在图像序列上进行迭代。其语法为:

classPIL.ImageSequence.Iterator(im)

通过以上的了解,我们就可以小试牛刀了,如果你还没安装 Pillow,可以通过 pip 进行安装: pip install pillow 。由于时间关系,我已经安装好了。另外,你还可以通过 pip list 命令列出安装了的 Python 包,看是否已经安装了 Pillow。

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

再接着,不废话,直接上 Demo 代码:

from PIL import Image, ImageSequence

with Image.open("girls-min.gif") as im:
    index = 1
    for frame in ImageSequence.Iterator(im):
        frame.save(f"girl{index}.png")
        index += 1

最终效果如下图所示,再调整优化,完善完善即可:

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

参考

pillow库的基础使用教程

How-To Geek : What Is a GIF, and How Do You Use Them?

Pillow : ImageSequence Module

到此这篇关于用Python将GIF动图分解成多张静态图片的文章就介绍到这了,更多相关Python分解图片内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
简单介绍Python中的decode()方法的使用
May 18 Python
在Ubuntu系统下安装使用Python的GUI工具wxPython
Feb 18 Python
Python的标准模块包json详解
Mar 13 Python
python爬虫面试宝典(常见问题)
Mar 02 Python
Python爬虫实现全国失信被执行人名单查询功能示例
May 03 Python
在python中使用xlrd获取合并单元格的方法
Dec 26 Python
Python玩转Excel的读写改实例
Feb 22 Python
Python爬取数据保存为Json格式的代码示例
Apr 09 Python
Python中调用其他程序的方式详解
Aug 06 Python
Python 处理日期时间的Arrow库使用
Aug 18 Python
Pycharm配置autopep8实现流程解析
Nov 28 Python
分析Python感知线程状态的解决方案之Event与信号量
Jun 16 Python
OpenCV-Python 实现两张图片自动拼接成全景图
matplotlib如何设置坐标轴刻度的个数及标签的方法总结
PyQt5结合QtDesigner实现文本框读写操作
Python中seaborn库之countplot的数据可视化使用
Python爬取某拍短视频
anaconda python3.8安装后降级
OpenCV-Python实现人脸美白算法的实例
You might like
php dirname(__FILE__) 获取当前文件的绝对路径
2011/06/28 PHP
PHP封装CURL扩展类实例
2015/07/28 PHP
利用 fsockopen() 函数开放端口扫描器的实例
2017/08/19 PHP
一个符号插入器 中用到的js代码
2007/09/04 Javascript
Javascript入门学习资料收集整理篇
2008/07/06 Javascript
javascript字符串拼接的效率问题
2010/12/25 Javascript
jquery实现固定顶部导航效果(仿蘑菇街)
2013/03/21 Javascript
JavaScript支持的最大递归调用次数分析
2014/06/24 Javascript
使用jquery解析XML的方法
2014/09/05 Javascript
JavaScript通过字典进行字符串翻译转换的方法
2015/03/19 Javascript
javascript实现百度地图鼠标滑动事件显示、隐藏
2015/04/02 Javascript
js为什么不能正确处理小数运算?
2015/12/29 Javascript
javascript简单比较日期大小的方法
2016/01/05 Javascript
JavaScript数组合并的多种方法
2016/05/22 Javascript
JS获取子窗口中返回的数据实现方法
2016/05/28 Javascript
快速将Vue项目升级到webpack3的方法步骤
2017/09/14 Javascript
详解JS中的this、apply、call、bind(经典面试题)
2017/09/19 Javascript
JavaScript数据结构之单链表和循环链表
2017/11/28 Javascript
3种vue路由传参的基本模式
2018/02/22 Javascript
使用Vue-cli 3.0搭建Vue项目的方法
2018/06/07 Javascript
React 实现拖拽功能的示例代码
2019/01/06 Javascript
python中sets模块的用法实例
2014/09/30 Python
为python设置socket代理的方法
2015/01/14 Python
详谈Python3 操作系统与路径 模块(os / os.path / pathlib)
2018/04/26 Python
Python3使用SMTP发送带附件邮件
2020/06/16 Python
在VS2017中用C#调用python脚本的实现
2019/07/31 Python
Pandas+Matplotlib 箱式图异常值分析示例
2019/12/09 Python
如何用PyPy让你的Python代码运行得更快
2020/12/02 Python
用python实现一个简单的验证码
2020/12/09 Python
戴尔英国官网:Dell英国
2017/05/27 全球购物
法律专业应届生自荐信范文
2014/01/06 职场文书
《世界多美呀》教学反思
2014/03/02 职场文书
党的群众路线对照检查材料
2014/09/22 职场文书
2015年党员个人剖析材料
2014/12/18 职场文书
节约用水广告语60条
2019/11/14 职场文书
python基础之文件操作
2021/10/24 Python