我正在使用 PyQt4 为前端 GUI 编写程序,该程序访问后端数据库(可以是 MySQL 或 SQLite)。我需要在数据库中存储一些图像数据,下面是我用来将图像文件(JPEG 格式)导入数据库中的 blob 数据字段的 Python 代码:
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) 数据库中的 Hex str -- cPickle&StringIO --> PIL Image Object
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 Image Object --> 临时图像文件
(3) 临时图像文件--> QPixmap
这种方法也很好用。但如果我不必写/读临时图像文件会更好,这可能会减慢程序对用户交互的响应。我想我可以使用QPixmap::loadFromData()直接从存储在数据库中的 blob 数据加载,并希望这里有人可以向我展示如何使用此函数的示例。
TIA,
必应