用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中Django 后台自定义表单控件
Mar 28 Python
python列表生成式与列表生成器的使用
Feb 23 Python
python实现彩票系统
Jun 28 Python
Python编写合并字典并实现敏感目录的小脚本
Feb 26 Python
Django使用uwsgi部署时的配置以及django日志文件的处理方法
Aug 30 Python
SELENIUM自动化模拟键盘快捷键操作实现解析
Oct 28 Python
在pytorch 中计算精度、回归率、F1 score等指标的实例
Jan 18 Python
Python continue语句实例用法
Feb 06 Python
python字符串替换re.sub()实例解析
Feb 09 Python
django-xadmin根据当前登录用户动态设置表单字段默认值方式
Mar 13 Python
DjangoWeb使用Datatable进行后端分页的实现
May 18 Python
python实现AdaBoost算法的示例
Oct 03 Python
OpenCV-Python 实现两张图片自动拼接成全景图
matplotlib如何设置坐标轴刻度的个数及标签的方法总结
PyQt5结合QtDesigner实现文本框读写操作
Python中seaborn库之countplot的数据可视化使用
Python爬取某拍短视频
anaconda python3.8安装后降级
OpenCV-Python实现人脸美白算法的实例
You might like
解析php php_openssl.dll的作用
2013/07/01 PHP
PHP zip扩展Linux下安装过程分享
2014/05/05 PHP
php导入大量数据到mysql性能优化技巧
2014/12/29 PHP
PHP常用函数之根据生日计算年龄功能示例
2019/10/21 PHP
PHP实现笛卡尔积算法的实例讲解
2019/12/22 PHP
一个js写的日历(代码部分网摘)
2009/09/20 Javascript
jQuery find和children方法使用
2011/01/31 Javascript
原生JavaScript实现合并多个数组示例
2014/09/21 Javascript
概述javascript在Google IE中的调试技巧
2016/11/24 Javascript
Three.js利用性能插件stats实现性能监听的方法
2017/09/25 Javascript
JavaScript对象拷贝与Object.assign用法实例分析
2018/06/20 Javascript
vue如何实现自定义底部菜单栏
2019/07/01 Javascript
vue3.0封装轮播图组件的步骤
2021/03/04 Vue.js
python+Django+apache的配置方法详解
2016/06/01 Python
详解Python实现按任意键继续/退出的功能
2016/08/19 Python
python用reduce和map把字符串转为数字的方法
2016/12/19 Python
Python自动化开发学习之三级菜单制作
2017/07/14 Python
pandas object格式转float64格式的方法
2018/04/10 Python
python读取和保存视频文件
2018/04/16 Python
Python操作MySQL数据库的方法
2018/06/20 Python
解决Mac下首次安装pycharm无project interpreter的问题
2018/10/29 Python
Python实现点阵字体读取与转换的方法
2019/01/29 Python
python制作抖音代码舞
2019/04/07 Python
解决Keras自带数据集与预训练model下载太慢问题
2020/06/12 Python
Python tempfile模块生成临时文件和临时目录
2020/09/30 Python
HTML5中的Web Notification桌面通知功能的实现方法
2019/07/29 HTML / CSS
美国沃尔玛网上超市:Walmart
2020/08/14 全球购物
会计专业应届生自荐信
2014/02/07 职场文书
教学改革实施方案
2014/03/31 职场文书
中餐厅经理岗位职责
2014/04/11 职场文书
大学生赌博检讨书
2014/09/22 职场文书
初中差生评语
2014/12/29 职场文书
2015年全民国防教育日活动总结
2015/03/23 职场文书
Django操作cookie的实现
2021/05/26 Python
mybatis3中@SelectProvider传递参数方式
2021/08/04 Java/Android
详解pytorch创建tensor函数
2022/03/22 Python