用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 初始化多维数组代码
Sep 06 Python
从零学python系列之浅谈pickle模块封装和拆封数据对象的方法
May 23 Python
浅析Python中else语句块的使用技巧
Jun 16 Python
django2用iframe标签完成网页内嵌播放b站视频功能
Jun 20 Python
对python文件读写的缓冲行为详解
Feb 13 Python
python语言基本语句用法总结
Jun 11 Python
Django实现微信小程序的登录验证功能并维护登录态
Jul 04 Python
python使用html2text库实现从HTML转markdown的方法详解
Feb 21 Python
更新升级python和pip版本后不生效的问题解决
Apr 17 Python
Django数据模型中on_delete使用详解
Nov 30 Python
如何利用Matlab制作一款真正的拼图小游戏
May 11 Python
Python内置类型集合set和frozenset的使用详解
Apr 26 Python
OpenCV-Python 实现两张图片自动拼接成全景图
matplotlib如何设置坐标轴刻度的个数及标签的方法总结
PyQt5结合QtDesigner实现文本框读写操作
Python中seaborn库之countplot的数据可视化使用
Python爬取某拍短视频
anaconda python3.8安装后降级
OpenCV-Python实现人脸美白算法的实例
You might like
php设计模式之享元模式分析【星际争霸游戏案例】
2020/03/23 PHP
document.designMode的功能与使用方法介绍
2007/11/22 Javascript
js加强的经典分页实例
2013/03/15 Javascript
jQuery动态添加、删除元素的方法
2014/01/09 Javascript
firefox下jquery ajax返回object XMLDocument处理方法
2014/01/26 Javascript
把文本中的URL地址转换为可点击链接的JavaScript、PHP自定义函数
2014/07/29 Javascript
jQuery实现网站添加高亮突出显示效果的方法
2015/06/26 Javascript
jquery实现简单实用的打分程序实例
2015/07/23 Javascript
解决js页面滚动效果scrollTop在FireFox与Chrome浏览器间的兼容问题的方法
2015/12/03 Javascript
利用JavaScript实现栈的数据结构示例代码
2017/08/02 Javascript
浅谈vue中数据双向绑定的实现原理
2017/09/14 Javascript
最实用的JS数组函数整理
2017/12/05 Javascript
JS字符串去除连续或全部重复字符的实例
2018/03/08 Javascript
JS实现左边列表移到到右边列表功能
2018/03/28 Javascript
JS函数节流和防抖之间的区分和实现详解
2019/01/11 Javascript
微信小程序实现树莓派(raspberry pi)小车控制
2020/02/12 Javascript
[06:24]DOTA2 2015国际邀请赛中国区预选赛第二日TOP10
2015/05/27 DOTA
用python读写excel的方法
2014/11/18 Python
R语言 vs Python对比:数据分析哪家强?
2017/11/17 Python
python绘制双柱形图代码实例
2017/12/14 Python
python psutil模块使用方法解析
2019/08/01 Python
Python将视频或者动态图gif逐帧保存为图片的方法
2019/09/10 Python
Python3.7实现验证码登录方式代码实例
2020/02/14 Python
Python导入数值型Excel数据并生成矩阵操作
2020/06/09 Python
python音频处理的示例详解
2020/12/23 Python
利用css3画个同心圆示例代码
2017/07/03 HTML / CSS
国际化的太阳镜及太阳镜配件零售商:Sunglass Hut
2016/07/26 全球购物
Russell Stover巧克力官方网站:美国领先的精美巧克力制造商
2016/11/27 全球购物
法国在线药房:Shop Pharmacie
2019/11/26 全球购物
计算机网络毕业生自荐信
2013/10/01 职场文书
《母鸡》教学反思
2014/02/25 职场文书
缅怀革命先烈演讲稿
2014/05/14 职场文书
党的群众路线教育实践活动查摆问题自查报告
2014/10/10 职场文书
工作保证书怎么写
2015/02/28 职场文书
熟背这些句子,让您的英语口语突飞猛进(135句)
2019/09/06 职场文书
mysql 8.0.24版本安装配置方法图文教程
2021/05/12 MySQL