本文实例讲述了Python图像处理之gif动态图的解析与合成操作。分享给大家供大家参考,具体如下:

gif动态图是在现在已经司空见惯,朋友圈里也经常是一言不合就斗图。这里,就介绍下如何使用python来解析和生成gif图像。

一、gif动态图的合成

如下图,是一个gif动态图。

gif动态图的解析可以使用PIL图像模块即可,具体代码如下:

#-*- coding: UTF-8 -*-

import os

from PIL import Image

def analyseImage(path):

'''

Pre-process pass over the image to determine the mode (full or additive).

Necessary as assessing single frames isn't reliable. Need to know the mode

before processing all frames.

'''

im = Image.open(path)

results = {

'size': im.size,

'mode': 'full',

}

try:

while True:

if im.tile:

tile = im.tile[0]

update_region = tile[1]

update_region_dimensions = update_region[2:]

if update_region_dimensions != im.size:

results['mode'] = 'partial'

break

im.seek(im.tell() + 1)

except EOFError:

pass

return results

def processImage(path):

'''

Iterate the GIF, extracting each frame.

'''

mode = analyseImage(path)['mode']

im = Image.open(path)

i = 0

p = im.getpalette()

last_frame = im.convert('RGBA')

try:

while True:

print "saving %s (%s) frame %d, %s %s" % (path, mode, i, im.size, im.tile)

'''

If the GIF uses local colour tables, each frame will have its own palette.

If not, we need to apply the global palette to the new frame.

'''

if not im.getpalette():

im.putpalette(p)

new_frame = Image.new('RGBA', im.size)

'''

Is this file a "partial"-mode GIF where frames update a region of a different size to the entire image?

If so, we need to construct the new frame by pasting it on top of the preceding frames.

'''

if mode == 'partial':

new_frame.paste(last_frame)

new_frame.paste(im, (0,0), im.convert('RGBA'))

new_frame.save('%s-%d.png' % (''.join(os.path.basename(path).split('.')[:-1]), i), 'PNG')

i += 1

last_frame = new_frame

im.seek(im.tell() + 1)

except EOFError:

pass

def main():

processImage('test_gif.gif')

if __name__ == "__main__":

main()

解析结果如下,由此可见改动态图实际上是由14张相同分辨率的静态图组合而成

二、gif动态图的合成

代码如下:

#-*- coding: UTF-8 -*-

import imageio

def create_gif(image_list, gif_name):

frames = []

for image_name in image_list:

frames.append(imageio.imread(image_name))

# Save them as frames into a gif

imageio.mimsave(gif_name, frames, 'GIF', duration = 0.1)

return

def main():

image_list = ['test_gif-0.png', 'test_gif-2.png', 'test_gif-4.png',

'test_gif-6.png', 'test_gif-8.png', 'test_gif-10.png']

gif_name = 'created_gif.gif'

create_gif(image_list, gif_name)

if __name__ == "__main__":

main()

这里,使用第一步解析出来的图像中的8幅图,间副的间隔时间为0.1s,合成新的gif动态图如下:

希望本文所述对大家Python程序设计有所帮助。

python合成gif_Python图像处理之gif动态图的解析与合成操作详解相关推荐

  1. python合成gif动图_Python图像处理之gif动态图的解析与合成操作详解

    本文实例讲述了Python图像处理之gif动态图的解析与合成操作.分享给大家供大家参考,具体如下: gif动态图是在现在已经司空见惯,朋友圈里也经常是一言不合就斗图.这里,就介绍下如何使用python ...

  2. python动态图-Python图像处理之gif动态图的解析与合成操作详解

    本文实例讲述了Python图像处理之gif动态图的解析与合成操作.分享给大家供大家参考,具体如下: gif动态图是在现在已经司空见惯,朋友圈里也经常是一言不合就斗图.这里,就介绍下如何使用python ...

  3. python绘制动态图-Python图像处理之gif动态图的解析与合成操作详解

    本文实例讲述了Python图像处理之gif动态图的解析与合成操作.分享给大家供大家参考,具体如下: gif动态图是在现在已经司空见惯,朋友圈里也经常是一言不合就斗图.这里,就介绍下如何使用python ...

  4. python3d动态图-Python图像处理之gif动态图的解析与合成操作详解

    本文实例讲述了Python图像处理之gif动态图的解析与合成操作.分享给大家供大家参考,具体如下: gif动态图是在现在已经司空见惯,朋友圈里也经常是一言不合就斗图.这里,就介绍下如何使用python ...

  5. 【python图像处理】gif动态图的解析与合成

    gif动态图是在现在已经司空见惯,朋友圈里也经常是一言不合就斗图.这里,就介绍下如何使用python来解析和生成gif图像. 一.gif动态图的合成 如下图,是一个gif动态图. gif动态图的解析可 ...

  6. python动态图-Python处理gif动态图的解析与合成操作的介绍

    本篇文章给大家带来的内容是关于Python处理gif动态图的解析与合成操作的介绍,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 本文实例讲述了Python图像处理之gif动态图的解析 ...

  7. Python实现动态图的解析、合成与倒放

    七月 上海 | 高性能计算之GPU CUDA培训 7月27-29日三天密集式学习  快速带你入门阅读全文> 正文共540个字,3张图,预计阅读时间5分钟. 动态图现在已经融入了我们的日常网络生活 ...

  8. Python + Selenium + AutoIt 模拟键盘实现另存为、上传、下载操作详解

    前言 在web页面中,可以使用selenium的定位方式来识别元素,从而来实现页面中的自动化,但对于页面中弹出的文件选择框,selenium就实现不了了,所以就需引用AutoIt工具来实现. Auto ...

  9. python 拼音相似度_Python实现简单的文本相似度分析操作详解

    本文实例讲述了Python实现简单的文本相似度分析操作.分享给大家供大家参考,具体如下: 学习目标: 1.利用gensim包分析文档相似度 2.使用jieba进行中文分词 3.了解TF-IDF模型 环 ...

最新文章

  1. Bert系列(三)——源码解读之Pre-train
  2. 图片增强来解决图片不足问题
  3. __GLOBAL__I_a in libUPPayPlugin.a(UPPasswordTool.o)
  4. python remove函数_python中remove函数的用法是什么?
  5. shell习题第6题:监听80端口
  6. [HNOI2015] 接水果(倍增 + 整体二分)
  7. 腾讯手游如何提早揭露游戏外挂风险?
  8. DNS服务系列之二:DNS区域传送漏洞的安全案例
  9. FFT变换频谱图中频率刻度的设置方法
  10. 下载python教程-python教程pdf下载
  11. presto cube等复杂聚合函数
  12. python怎么重新运行,如何让python程序重新运行其
  13. 渗透技术——ARP攻击
  14. 用友NC单据模板公式
  15. 用python手把手教你玩跳一跳小游戏,直接打出高分
  16. 【Linux】gvim封装至gvi命令
  17. 波特率dlm_第6讲 串行通信16550.ppt
  18. 详解Flutter中各种Binding
  19. Delphi判断是否为周末?今天是周几?
  20. 简单介绍一下CGAN

热门文章

  1. 数据存储,消息队列的高可用保障
  2. 老毛桃winpe优盘启动系统个性修改全攻略
  3. Netty的高低水位
  4. 【P1369】矩形(贪心)
  5. moto 如何解锁BL 以edge s pro为例,保姆级教程
  6. 用 Win2003 架设邮件服务器
  7. 企业微信生态下如何做好社群运营
  8. 林正刚之正能量领导力
  9. excel打印预览在哪里_Excel各种打印技巧讲解,让你不再为打印问题而发愁了
  10. 【详解文件IO系列】讲讲 MQ 消息中间件 (Kafka,RocketMQ等)与 MMAP、PageCache 的故事