在 QLabel 中显示来自 SQL 数据库的图像
Display image from SQL DB in QLabel
数据库以 varbinary 格式存储图像。我得到这样的数据 b'\xff\xd8\xff\xe0\x00\x10JFIF\x00\x01\x01\x01\x00\x00
\x00\x00\xff\xe1\x00ZExif\x... 如果我使用代码
我可以保存它们
photo_path = r'C:' + '\'
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中展示。我该怎么做?
从 header (b'\xff\xd8
) 的外观来看,这些似乎是作为原始数据的标准 jpeg 图像。
您可以使用 loadFromData()
来显示它们,只要数据没有损坏,Qt 足够智能,可以从内容中识别文件格式。
请注意,该函数 returns 是一个布尔值,说明加载是否成功,因此您首先需要创建实例,然后 然后 调用该函数。
for result in retrieved_bytes:
pixmap = QtGui.QPixmap()
if pixmap.loadFromData(result):
label = QLabel(pixmap=pixmap)
someLayout.addWidget(label)
我找到了解决问题的方法。
retrieved_bytes = cursor.execute("SELECT Photo FROM [RusGuardDB].[dbo].[EmployeePhoto]").fetchone()
for row in retrieved_bytes:
row_to_list = [elem for elem in row]
pixmap = QPixmap()
pixmap.loadFromData(bytearray(row_to_list))
self.label1.setPixmap(pixmap)
数据库以 varbinary 格式存储图像。我得到这样的数据 b'\xff\xd8\xff\xe0\x00\x10JFIF\x00\x01\x01\x01\x00\x00
\x00\x00\xff\xe1\x00ZExif\x... 如果我使用代码
photo_path = r'C:' + '\'
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中展示。我该怎么做?
从 header (b'\xff\xd8
) 的外观来看,这些似乎是作为原始数据的标准 jpeg 图像。
您可以使用 loadFromData()
来显示它们,只要数据没有损坏,Qt 足够智能,可以从内容中识别文件格式。
请注意,该函数 returns 是一个布尔值,说明加载是否成功,因此您首先需要创建实例,然后 然后 调用该函数。
for result in retrieved_bytes:
pixmap = QtGui.QPixmap()
if pixmap.loadFromData(result):
label = QLabel(pixmap=pixmap)
someLayout.addWidget(label)
我找到了解决问题的方法。
retrieved_bytes = cursor.execute("SELECT Photo FROM [RusGuardDB].[dbo].[EmployeePhoto]").fetchone()
for row in retrieved_bytes:
row_to_list = [elem for elem in row]
pixmap = QPixmap()
pixmap.loadFromData(bytearray(row_to_list))
self.label1.setPixmap(pixmap)