‘壹’ tkinter读取gif时怎么样知道读到最后
你好,你可以使用python将gif作为二进制文件读进来。下面是具体的流程。
(1)读gif_id,输出gif_id, 6 bytes
(2)读logical_screen_descriptor(结构),并输出
(3)如果 ScrHd.flag_GC_table == 1,
则有全局色表,则读全局色表,并输出
(4)循环,
检查gif块的类型,按块的类型读块,并输出
若:
case: 0x2c -- 它是,Image Descriptor(结构),读块并输出
判断有无色表,有则读块并输出,
下面 1 byte 表示 lZW min Code Size,读并输出
子块 (include size, bytes*size data) 读块并输出
子块 (include size, bytes*size data) 读块并输出
可能有很多子块,读块并输出
直到 0x00 读块并输出,
break;
若case: 0x21 0xf9 -- 控制块,读到 0x00, 并输出
break;
若case: 0x21 0xFe -- 注解块,读到 0x00,并输出
break;
若case: 0x21 0x01 -- 普通文本块,读到 0x00,并输出
break;
若case: 0x21 0xff -- 应用程序块,读到 0x00,并输出
break;
若case: 0x3B -- END 第一个图片完毕的标识,并输出
break;
default: 打印“文件错误”break;
基本你需要读到0x3b那个文件就结束了。
‘贰’ 学生要了解的Ph可视化模块
简单又好用的Python可视化模块强烈推荐!
简单又好用的Python可视化模块
数据可视化动画还在用Excel做?
现在一个简单的Python包就能分分钟搞定!
而且生成的动画也足够丝滑
这是一位专攻Python语言的程序员开发的安装包, 名叫
Pyn imate。
目前可以直接通过PyPI安装使用。
使用指南
想要使用Pyn imate, 直接import一下就行。
输入数据后, Pyn imate将使用函数Barplot() 来创建条形数据动
画。
而创建这种动画, 输入的数据必须是pandas数据结构(如下)
,其中将时间列设置为索引,换句话说索引代表的是自变量。
具体的代码形式如下:
比如要处理具体的数据,写成代码应该是这样子的。
此外, 要制作条形数据动画, Barplot还有三个必需的参数得注
意:data、time_format和ip_freq(Interpolation frequency)。
data就是表格的数据, 这里也就不再赘述。
简单又好用的Python可视化模块
time_format是指数据索引的时间日期格式, 一般为:”%Y-
%m-%d”。
最后是ip_freq, 它是制作动画中比较关键的一步, 通过线性插
值使动画更加流畅丝滑。
一般来说,并不是所有的原始数据都适合做成动画,现在一个
典型的视频是24fps, 即每秒有24帧。
举个栗子,下面这个表格中的数据只有三个时间点,按理说只
能生成3帧视频,最终动画也只有3/24秒。
这时候, ip_freq插值(线性) 就开始发挥作用了, 如果插值是
一个季度,则得出的数据就变成了这样:
简单又好用的Python可视化模块
具体的插值时间间隔为多久,则要视具体的数据而定,一般绘
制大数据时, 设置为ip_freq=None。
至此,就能生成数据动画了,完整代码如下所示:
最后还有一个问题,那就是保存动画,有两个格式可以选择:
gif或者mp 4。
保存为动图一般使用:
简单又好用的Python可视化模块
若要保存为mp 4的话, ffmpeg是个不错的选择, 它是保存为
mp4的标准编写器。
或者
当然, 同样也可以使用Canvas.save() 来保存。
‘叁’ python-tkinter如何打开动图(.gif)
下面所介绍的方法不仅可以显示gif动图,而且可以显示图片
首先引入pyglet包
import pyglet
主方法源码:
# 在工作目录中选择一个gif动画文件
ag_file = "111.gif"
animation = pyglet.resource.animation(ag_file)
sprite = pyglet.sprite.Sprite(animation)
# 创建一个窗口并将其设置为图像大小
win = pyglet.window.Window(width=sprite.width, height=sprite.height)
# 设置窗口背景颜色 = r, g, b, alpha
# 每个值从 0.0 到 1.0
green = 0, 1, 0, 1
pyglet.gl.glClearColor(*green)
@win.event
def on_draw():
win.clear()
sprite.draw()
pyglet.app.run()