用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使用urllib2模块获取gravatar头像实例
Dec 18 Python
python中xrange和range的区别
May 13 Python
寻找网站后台地址的python脚本
Sep 01 Python
Python中subprocess的简单使用示例
Jul 28 Python
基于Pandas读取csv文件Error的总结
Jun 15 Python
python中的for循环
Sep 28 Python
python3学生名片管理v2.0版
Nov 29 Python
python 自动重连wifi windows的方法
Dec 18 Python
Python2与Python3的区别实例总结
Apr 17 Python
Python中的全局变量如何理解
Jun 04 Python
基于python爬取梨视频实现过程解析
Nov 09 Python
python的setattr函数实例用法
Dec 16 Python
OpenCV-Python 实现两张图片自动拼接成全景图
matplotlib如何设置坐标轴刻度的个数及标签的方法总结
PyQt5结合QtDesigner实现文本框读写操作
Python中seaborn库之countplot的数据可视化使用
Python爬取某拍短视频
anaconda python3.8安装后降级
OpenCV-Python实现人脸美白算法的实例
You might like
DOTA2 1月28日更新:监管系统降临刀塔世界
2021/01/28 DOTA
在数据量大(超过10万)的情况下
2007/01/15 PHP
apache+php完美解决301重定向的两种方法
2011/06/08 PHP
php生成静态文件的多种方法分享
2012/07/17 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(十六)
2014/06/30 PHP
php实现设计模式中的单例模式详解
2014/10/11 PHP
php版微信公众号自定义分享内容实现方法
2016/09/22 PHP
JQuery中层次选择器用法实例详解
2015/05/18 Javascript
详解javascript数组去重问题
2015/11/06 Javascript
jQuery基础知识点总结(DOM操作)
2016/06/01 Javascript
jquery实现全选、不选、反选的两种方法
2016/09/06 Javascript
js复制内容到剪贴板代码,js复制代码的简单实例
2016/10/27 Javascript
canvas绘制七巧板
2017/02/03 Javascript
React Native中NavigatorIOS组件的简单使用详解
2018/01/27 Javascript
使用JS判断移动端手机横竖屏状态
2018/07/30 Javascript
Bootstrap Paginator+PageHelper实现分页效果
2018/12/29 Javascript
解决layui弹出层layer的area过大被遮挡的问题
2019/09/21 Javascript
Node.JS如何实现JWT原理
2020/09/18 Javascript
Python实现检测服务器是否可以ping通的2种方法
2015/01/01 Python
python 文件操作删除某行的实例
2017/09/04 Python
python实现画一颗树和一片森林
2018/06/25 Python
python入门之基础语法学习笔记
2020/02/08 Python
基于TensorBoard中graph模块图结构分析
2020/02/15 Python
Python龙贝格法求积分实例
2020/02/29 Python
CSS3+HTML5+JS 实现一个块的收缩与展开动画效果
2020/11/17 HTML / CSS
Under Armour安德玛德国官网:美国高端运动科技品牌
2019/03/09 全球购物
vue实现倒计时功能
2021/03/24 Vue.js
趣味体育活动方案
2014/02/08 职场文书
财务管理专业自荐书
2014/09/02 职场文书
井冈山红色之旅感想
2014/10/07 职场文书
小学语文教师年度考核个人总结
2015/02/05 职场文书
资料员岗位职责范本
2015/04/13 职场文书
婚宴父母致辞
2015/07/27 职场文书
简短清晨问候语
2015/11/10 职场文书
互联网创业商业模式以及赚钱法则有哪些?
2019/10/12 职场文书
mysql死锁和分库分表问题详解
2021/04/16 MySQL