『壹』 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()