我正在編寫一個使用PyQt4作爲前端GUI的程序,該程序訪問後端數據庫(可以是MySQL或SQLite)。我需要一些圖像數據存儲在數據庫中,下面是我使用的圖像文件(JPEG格式)導入到一個blob數據字段在數據庫中的Python代碼:將blob圖像數據加載到QPixmap中
def dump_image(imgfile):
i = open(imgfile, 'rb')
i.seek(0)
w = i.read()
i.close()
return cPickle.dumps(w,1)
blob = dump_image(imgfile)
hex_str = blob.encode('hex')
# x"%s"%hex_str will be the string inserted into the SQL command
這部分工作正常。我的問題是關於如何從PyQt4中存儲在數據庫中的圖像數據創建一個QPixmap對象。我的當前的方法涉及以下步驟:
(1)在數據庫六角STR - cPickle的& StringIO的 - > PIL圖像對象
def load_image(s):
o = cPickle.loads(s)
c = StringIO.StringIO()
c.write(o)
c.seek(0)
im = Image.open(c)
return im
(2)PIL圖像對象 - >臨時圖像文件
(3)臨時圖像文件 - > QPixmap
此方法也可以正常工作。但是,如果我不必寫/讀臨時映像文件,這可能會減慢對用戶交互的程序響應,那將會更好。我想我可以使用QPixmap::loadFromData()直接從存儲在數據庫中的blob數據加載,並希望這裏的某個人能夠給我一個關於如何使用這個函數的例子。
TIA,
兵
爲什麼你甚至使用PIL步驟? Qt對加載JPEG數據非常滿意:http://docs.huihoo.com/pyqt/pyqt4/html/qpixmap.html#reading-and-writing-image-files – balpha 2009-08-19 16:00:36
我相信Qt能夠加載JPEG數據。我在尋找的是一個代碼片段,它將在blob字段中編碼的字符串轉換爲QPixmap對象 。謝謝! – 2009-08-19 18:37:49
我想通過使用QPixmap :: loadFromData(cPickle.loads(s)),其中s是從blob字段獲取的字符串數據。謝謝您的幫助。 – 2009-08-19 18:55:48