【发布时间】:2010-11-21 00:23:59
【问题描述】:
我正在为前端 GUI 编写一个使用 PyQt4 的程序,该程序访问一个后端数据库(可以是 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) 数据库中的十六进制字符串 -- 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 Image Object -->临时图像文件
(3) 临时图像文件 --> QPixmap
这种方法也很有效。但如果我不必写/读临时图像文件会更好,这可能会减慢程序对用户交互的响应。我想我可以使用QPixmap::loadFromData() 直接从存储在数据库中的blob 数据中加载,希望这里的人可以向我展示如何使用此功能的示例。
TIA,
必应
【问题讨论】:
-
你为什么还要使用 PIL 步骤? Qt 对加载 JPEG 数据非常满意:docs.huihoo.com/pyqt/pyqt4/html/…
-
我确信 Qt 能够加载 JPEG 数据。我正在寻找的是一个代码 sn-p,它将 blob 字段中编码的字符串转换为 QPixmap 对象。谢谢!
-
我发现我可以使用 QPixmap::loadFromData(cPickle.loads(s)) 其中 s 是从 blob 字段中获取的字符串数据。感谢您的帮助。
标签: python image pyqt blob qpixmap