用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 continue语句用法实例
Mar 11 Python
用Python设计一个经典小游戏
May 15 Python
Python元组拆包和具名元组解析实例详解
Mar 26 Python
django2用iframe标签完成网页内嵌播放b站视频功能
Jun 20 Python
python实现小球弹跳效果
May 10 Python
Python列表与元组的异同详解
Jul 02 Python
关于python字符串方法分类详解
Aug 20 Python
解决Tensorflow sess.run导致的内存溢出问题
Feb 05 Python
解决django中form表单设置action后无法回到原页面的问题
Mar 13 Python
python 追踪except信息方式
Apr 25 Python
Python Switch Case三种实现方法代码实例
Jun 18 Python
Python 微信公众号文章爬取的示例代码
Nov 30 Python
OpenCV-Python 实现两张图片自动拼接成全景图
matplotlib如何设置坐标轴刻度的个数及标签的方法总结
PyQt5结合QtDesigner实现文本框读写操作
Python中seaborn库之countplot的数据可视化使用
Python爬取某拍短视频
anaconda python3.8安装后降级
OpenCV-Python实现人脸美白算法的实例
You might like
一段php加密解密的代码
2007/07/16 PHP
php解析url的三个示例
2014/01/20 PHP
PHP之将POST数据转化为字符串的实现代码
2016/11/03 PHP
PHP中PDO事务处理操作示例
2018/05/02 PHP
php写入文件不覆盖的实例讲解
2019/09/17 PHP
Javascript 中的 call 和 apply使用介绍
2012/02/22 Javascript
JS实现多物体缓冲运动实例代码
2013/11/29 Javascript
JS和函数式语言的三特性
2014/03/05 Javascript
javascript实现倒计时并弹窗提示特效
2015/06/05 Javascript
JavaScript中eval()函数用法详解
2015/12/14 Javascript
JS弹出层遮罩,隐藏背景页面滚动条细节优化分析
2016/04/29 Javascript
基于jQuery实现的查看全文功能【实用】
2016/12/11 Javascript
微信小程序中input标签详解及简单实例
2017/05/18 Javascript
webpack学习笔记之优化缓存、合并、懒加载
2017/08/24 Javascript
浅谈Vue 初始化性能优化
2017/08/31 Javascript
详解从零搭建 vue2 vue-router2 webpack3 工程
2017/11/22 Javascript
Angularjs实现控制器之间通信方式实例总结
2018/03/27 Javascript
vue、react等单页面项目部署到服务器的方法及vue和react的区别
2018/09/29 Javascript
JS中使用new Option()实现时间联动效果
2018/12/10 Javascript
解决vue移动端适配问题
2018/12/12 Javascript
详解vue-cli3多环境打包配置
2019/03/28 Javascript
Vue 实现创建全局组件,并且使用Vue.use() 载入方式
2020/08/11 Javascript
python encode和decode的妙用
2009/09/02 Python
python基础教程之分支、循环简单用法
2016/06/16 Python
Python的IDEL增加清屏功能实例
2017/06/19 Python
Python 类的特殊成员解析
2018/06/20 Python
python 解决flask 图片在线浏览或者直接下载的问题
2020/01/09 Python
jupyter note 实现将数据保存为word
2020/04/14 Python
python字典通过值反查键的实现(简洁写法)
2020/09/30 Python
css3 仿写阿里云水纹效果的示例代码
2018/02/10 HTML / CSS
html5实现九宫格抽奖可固定抽中某项奖品
2020/06/15 HTML / CSS
扩大国家免疫规划实施方案
2014/03/21 职场文书
赵乐秦在党的群众路线教育实践活动总结大会上的讲话稿
2014/10/25 职场文书
教师评职称工作总结2015
2015/04/20 职场文书
《多彩的民间艺术》教学反思
2016/02/16 职场文书
三十年再续同学情倡议书
2019/11/27 职场文书