天天看點

用python畫qq表情_用Python編寫提取QQ表情的腳本

該樓層疑似違規已被系統折疊 隐藏此樓檢視此樓

一般情況下不開官方的QQ用戶端,而是用一些開源的QQ用戶端,比如 Luma QQ 和 Gaim 等。最近看到一些QQ表情挺有意思的,可惜非官方的用戶端上不能安裝表情檔案包,實在不想因為這些表情啟動官方的用戶端,于是寫個腳本把裡面的圖檔提出來,這樣想在什麼地方用都行了。

#

#         QQ表情Gif檔案提取

#

#         搜尋D盤根目錄下的 eip 檔案,

#         輸出其中的 GIF 到 d:/tmpGif目錄

#

#         AntiyLabs

#      不累的王

#         2006-10-18

#

import os

import glob

sum = 0

# gif 的檔案頭為 GIF87a, GIF89a

gHead = 'GIF8'

# gif 的結尾标志為 \x3b\x00

gFoot = '\x3b\x00'

for i in glob.glob('d:/*.eip'):

print "processing\t" + i

# 二進制方式打開檔案

# QQ的表情檔案包啊,真是...連個壓縮都沒有...

# 頭部一堆填充資料,然後是一個XML,描述GIF檔案名稱和對應的BMP縮略圖

# 然後就是一個接一個的原始圖檔檔案資料了

#...别的俺也不關心,俺隻想要裡面的GIF。忽略XML部分,直接找GIF檔案特征~

content = open(i, 'rb').read()

# 建立每個表情檔案對應的子目錄

dirname = os.path.join(r'd:/tmpGif', os.path.split(i)[1])

os.mkdir(dirname)

gset = content.find(gHead)

while True:

glen = content[gset : ].find(gFoot) + len(gFoot)

# 為啥要找第二個結束标志呢?gif那個官方文檔啊...簡直形同虛設麼...

# 有可能是什麼"應用程式擴充"的結束符--"出現次數可能大于等于0"...不管了。

glen += content[gset + glen:].find(gFoot) + len(gFoot)

fname = os.path.join(dirname, os.tmpnam().strip('\\') + '.gif')

print '%s:\ngset: %u\nglen: %u'%(fname, gset, glen)

#a = raw_input()

fo = open(fname, 'wb')

fo.write(content[gset : gset+glen])

fo.close()

step = content[gset + glen : ].find(gHead)

if step < 0:

break

gset += glen + step

sum += 1

print '%u Files Extract Complete!'%(sum)

轉自:創意安天論壇