在qlabel中显示来自sqldb的图像

2o7dmzc5  于 2021-07-13  发布在  Java
关注(0)|答案(1)|浏览(303)

数据库以varbinary格式存储图像。我得到的数据如下b'\xff\xd8\xff\xe0\x00\x10jfif\x00\x01\x01\x00 \x00 \x00\x00\xff\xe1\x00zexif\x。。。如果我使用代码我可以保存它们

photo_path = r'C:\1' + '\\'
    cnxn = pyodbc.connect('DRIVER={SQL Server};SERVER=DESKTOP-8EKCG28\RUSGUARD;DATABASE=RUSGUARDDB;UID=sa;PWD=123')
    cursor = cnxn.cursor()
    cursor.execute("SELECT Photo FROM [RusGuardDB].[dbo].[EmployeePhoto]")
    retrieved_bytes = cursor.execute("SELECT Photo FROM [RusGuardDB].[dbo].[EmployeePhoto]").fetchall()
    cursor.close()
    sum = numpy.array(retrieved_bytes)
    for a in range(len(sum)):
        sum1 = sum[a]
        with open(photo_path + 'new' + str(a) + '.jpg', 'wb') as new_jpg:
            new_jpg.write(sum1)

我不想保存图片,我想直接在qlabel中显示它们。我该怎么做?

2nbm6dog

2nbm6dog1#

从页眉看( b'\xff\xd8 ),这些似乎是标准的jpeg图像作为原始数据。
你可以用 loadFromData() ,qt足够聪明,只要数据没有损坏,就可以从其内容中识别文件格式。
请注意,该函数返回一个bool,说明加载是否成功,因此首先需要创建示例,然后调用该函数。

for result in retrieved_bytes:
        pixmap = QtGui.QPixmap()
        if pixmap.loadFromData(result):
            label = QLabel(pixmap=pixmap)
            someLayout.addWidget(label)

相关问题