用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 12306抢火车票脚本 Python京东抢手机脚本
Feb 06 Python
解决vscode python print 输出窗口中文乱码的问题
Dec 03 Python
python实现根据文件关键字进行切分为多个文件的示例
Dec 10 Python
numpy基础教程之np.linalg
Feb 12 Python
pyqt5使用按钮进行界面的跳转方法
Jun 19 Python
Django数据结果集序列化并展示实现过程
Apr 22 Python
python中os包的用法
Jun 01 Python
PyInstaller的安装和使用的详细步骤
Jun 02 Python
Python+Selenium实现自动化的环境搭建的步骤(图文)
Sep 01 Python
Python和Bash结合在一起的方法
Nov 13 Python
python 三种方法提取pdf中的图片
Feb 07 Python
如何在Python中妥善使用进度条详解
Apr 05 Python
OpenCV-Python 实现两张图片自动拼接成全景图
matplotlib如何设置坐标轴刻度的个数及标签的方法总结
PyQt5结合QtDesigner实现文本框读写操作
Python中seaborn库之countplot的数据可视化使用
Python爬取某拍短视频
anaconda python3.8安装后降级
OpenCV-Python实现人脸美白算法的实例
You might like
PHP 分页类(模仿google)-面试题目解答
2009/09/13 PHP
PHP邮件发送类PHPMailer用法实例详解
2014/09/22 PHP
跟我学Laravel之配置Laravel
2014/10/15 PHP
smarty模板引擎从php中获取数据的方法
2015/01/22 PHP
tp5框架基于Ajax实现列表无刷新排序功能示例
2020/02/10 PHP
myFocus slide3D v1.1.0 使用方法与下载
2011/01/12 Javascript
JavaScript字符串对象charAt方法入门实例(用于取得指定位置的字符)
2014/10/17 Javascript
innerHTML属性,outerHTML属性,textContent属性,innerText属性区别详解
2015/03/13 Javascript
jQuery插件制作之全局函数用法实例
2015/06/01 Javascript
JavaScript阻止回车提交表单的方法
2015/12/30 Javascript
jQuery动画效果图片轮播特效
2016/01/12 Javascript
jQuery实现div随意拖动的实例代码(通用代码)
2016/01/28 Javascript
JSONP基础知识详解
2017/03/19 Javascript
jQuery.ajax向后台传递数组问题的解决方法
2017/05/12 jQuery
phantomjs导出html到pdf的方法总结
2017/10/19 Javascript
Node 搭建一个静态资源服务器的实现
2019/05/20 Javascript
[01:13:01]2018DOTA2亚洲邀请赛 4.4 淘汰赛 TNC vs VG 第三场
2018/04/05 DOTA
[13:16]INFAMOUS vs VGJ T BO3
2018/06/07 DOTA
Python实现给文件添加内容及得到文件信息的方法
2015/05/28 Python
python中set常用操作汇总
2016/06/30 Python
详解Python self 参数
2019/08/30 Python
Python利用PyPDF2库获取PDF文件总页码实例
2020/04/03 Python
keras .h5转移动端的.tflite文件实现方式
2020/05/25 Python
深入浅析python 中的self和cls的区别
2020/06/20 Python
Django返回HTML文件的实现方法
2020/09/17 Python
Python中免验证跳转到内容页的实例代码
2020/10/23 Python
五款漂亮的纯CSS3动画按钮的实例教程
2014/11/21 HTML / CSS
css3 边框、背景、文本效果的实现代码
2018/03/21 HTML / CSS
医学类导师推荐信范文
2013/11/19 职场文书
运动会演讲稿50字
2014/08/25 职场文书
2014年教师节演讲稿范文
2014/09/10 职场文书
工伤事故赔偿协议书范文
2014/09/24 职场文书
个人先进事迹材料范文
2014/12/29 职场文书
公司庆典欢迎词
2015/01/26 职场文书
2015年秋季学校开学标语
2015/07/16 职场文书
字节飞书面试promise.all实现示例
2022/06/16 Javascript