python - 将 blob 图像数据加载到 QPixmap

标签 python image pyqt blob qpixmap

我正在使用 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,

必应

最佳答案

您可以使用 QImage.fromData 静态方法从字符串加载图像,然后将其转换为像素图:

 image_data = get_image_data_from_blob()
 qimg = QtGui.QImage.fromData(image_data)
 pixmap = QtGui.QPixmap.fromImage(qimg)

关于python - 将 blob 图像数据加载到 QPixmap,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1300908/

相关文章:

html - 将响应式图像链接到 URL

java - 没有 MathLab 的 Java 中的 Gabor 图像处理

python - PYQT如何编辑在MainWindow中tab化的QDockWidget的标题?

python - QUdpSocket pyqt qt

python - 将现有的 Anaconda 安装移动到新的 Windows

python - 未绑定(bind)本地错误: local variable 'fullfilename' referenced before assignment

python - 允许通过 Django 管理将 SVG 文件上传到 ImageField

python - 使用 Python 在 Hadoop 中读取制表符分隔的文件

pandas - 实现 KNN 来找到最接近的颜色?

python - tmpnam 的不安全性/替代品有多不安全?