用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 的内置字符串方法小结
Mar 15 Python
利用python模拟实现POST请求提交图片的方法
Jul 25 Python
Python中pow()和math.pow()函数用法示例
Feb 11 Python
python3 拼接字符串的7种方法
Sep 12 Python
深入浅析Python获取对象信息的函数type()、isinstance()、dir()
Sep 17 Python
详解python中的Turtle函数库
Nov 19 Python
Django Sitemap 站点地图的实现方法
Apr 29 Python
对python中的控制条件、循环和跳出详解
Jun 24 Python
Django之全局使用request.user.username的实例详解
May 14 Python
如何用python插入独创性声明
Mar 31 Python
python-opencv 中值滤波{cv2.medianBlur(src, ksize)}的用法
Jun 05 Python
Python正则表达式中flags参数的实例详解
Apr 01 Python
OpenCV-Python 实现两张图片自动拼接成全景图
matplotlib如何设置坐标轴刻度的个数及标签的方法总结
PyQt5结合QtDesigner实现文本框读写操作
Python中seaborn库之countplot的数据可视化使用
Python爬取某拍短视频
anaconda python3.8安装后降级
OpenCV-Python实现人脸美白算法的实例
You might like
php支付宝接口用法分析
2015/01/04 PHP
php给图片加文字水印
2015/07/31 PHP
前端必学之PHP语法基础
2016/01/01 PHP
php闭包中使用use声明变量的作用域实例分析
2018/08/09 PHP
List Installed Hot Fixes
2007/06/12 Javascript
jQuery 瀑布流 绝对定位布局(二)(延迟AJAX加载图片)
2012/05/23 Javascript
一行代码告别document.getElementById
2012/06/01 Javascript
使用JavaScript 实现各种跨域的方法
2013/05/08 Javascript
判断某个字符在一个字符串中是否存在的js代码
2014/02/28 Javascript
ie9 提示'console' 未定义问题的解决方法
2014/03/20 Javascript
node.js中的fs.readlink方法使用说明
2014/12/17 Javascript
提交按钮的name='submit'引起的js失效问题及原因
2015/02/25 Javascript
js根据手机客户端浏览器类型,判断跳转官网/手机网站多个实例代码
2016/04/30 Javascript
JSON对象 详解及实例代码
2016/10/18 Javascript
nodejs基于express实现文件上传的方法
2018/03/19 NodeJs
详解Node.js中path模块的resolve()和join()方法的区别
2018/10/29 Javascript
利用vue重构有赞商城的思路以及总结整理
2019/02/21 Javascript
如何在vue 中引入使用jquery
2020/11/10 jQuery
Python实现的质因式分解算法示例
2018/05/03 Python
flask入门之文件上传与邮件发送示例
2018/07/18 Python
python return逻辑判断表达式实现解析
2019/12/02 Python
韩国江南富人区高端时尚百货商场:Galleria(格乐丽雅)
2018/03/27 全球购物
留学推荐信怎么写
2014/01/25 职场文书
《兰亭集序》教学反思
2014/02/11 职场文书
同学聚会主持词
2014/03/18 职场文书
高级工程师英文求职信
2014/03/19 职场文书
《爱如茉莉》教后反思
2014/04/12 职场文书
活动总结格式
2014/08/30 职场文书
文员转正自我鉴定怎么写
2014/09/29 职场文书
公司法定代表人授权委托书
2014/09/29 职场文书
金秋助学感谢信
2015/01/21 职场文书
2015学校师德师风工作总结
2015/04/22 职场文书
婚庆公司开业主持词
2015/06/30 职场文书
2015迎新晚会开场白
2015/07/17 职场文书
交通事故协议书范本
2016/03/19 职场文书
vue动态绑定style样式
2022/04/20 Vue.js