使用 Python 将 Blob 图像(二进制图像)转换为 jpeg 图像:该图像从 SQL 数据库检索并上传到 GUI
我正在尝试显示Microsoft SQL数据库的图像。问题在于数据库中的图像是类型BLOB(二进制)。我想在我的GUI中被外交时将其转换为JPEG或PNG。您对我该怎么做有任何想法吗? (抱歉,我的代码中有一些法语...)。 我试图在def liretheme(conn)中编写代码,但它不起作用... 谢谢, caroline
#webtv应用程序layout1
#Importer les librairies utilisées dans ce projet
import PySimpleGUI as sg #Librairie utilisée pour créer notre "graphical user interface" (GUI)
import pyodbc #Librairie utilisée pour accéder au serveur SQL à partir de Python
import base64
from PIL import Image
import io
#Pour voir toute les colonnes de la table
pd.set_option('display.max_rows', 500)
pd.set_option('display.max_columns', 500)
pd.set_option('display.width', 1000)
#Connexion au serveur SQL
serveur = 'THEM17-IRIC'
mabase = 'ProjetWebTV'
utilisateur = 'caro'
motdepasse = 'Mike1976$'
conn = pyodbc.connect('DRIVER={ODBC Driver 17 for SQL Server};SERVER='+serveur+
';DATABASE='+mabase+';UID='+utilisateur+';PWD='+ motdepasse)
# Toutes les choses à l'intérieur de la fenêtre
titre = [[sg.Text("WebTV: Une application web pour visionner et gérer les images et vidéos",
font = 200)]]
recherche = [[sg.Text("Entrer mot-clé", font = 20)],
[sg.InputText(key = 'input1', tooltip = "Entrez un mot-clé", size = (75,1)),
sg.Submit("Soumettre", key=("Soumettre1"), tooltip = "Soumettre votre requête"),
sg.Submit("Effacer", key=("Effacer1"))],
[sg.Text("Entrer thème", font = 20)],
[sg.InputText(key=('input2'), tooltip = "Entrez un thème", size = (75,1)),
sg.Submit("Soumettre",key=("Soumettre2"), tooltip = "Soumettre votre requête"),
sg.Submit ("Effacer", key=("Effacer2"))],
[sg.Text("Résultat de la recherche",font = 20)],
[sg.Image(key = ('output1'), size = (750,1), expand_x = True, expand_y = True)]]
myAccount = [[sg.Text("Courriel", font = 20), sg.InputText()],
[sg.Text("Mot de passe", font = 20), sg.InputText()],
[sg.Button("Soumettre")]]
newUser = [[sg.Text("Prénom", font = 20), sg.InputText()],
[sg.Text("Nom", font = 20), sg.InputText()],
[sg.Text("Pseudo", font = 20), sg.InputText()],
[sg.Text("Date de naissance", font = 20), sg.InputText()],
[sg.Text("Photo de profil", font = 20), sg.InputText()],
[sg.Text("Courriel", font = 20), sg.InputText()],
[sg.Text("Mot de passe", font = 20), sg.InputText()],
[sg.Button("Soumettre")]]
tbgrp = [[sg.TabGroup([[sg.Tab("Recherche", recherche, font = 100),
sg.Tab("Nouvel utilisateur", newUser, font=30),
sg.Tab("Mon Compte", myAccount, font = 100)]],
tab_location = "centertop",
expand_x = True,
expand_y = True)]]
layout = titre + tbgrp
#Creation de la fenêtre
sg.theme ("DarkBlue13") #Défini la couleur de la fenêtre
window = sg.Window ('WebTV application',
layout,
size = (800, 600),
resizable = True,
element_justification= "center",
grab_anywhere = True)
#event, values = window.read()
#Liste des fonctions
#Fonction qui retourne la recherche par mot-clé
def lireMotcle(conn):
conn.execute("set transaction isolation level read committed;")
curseur = conn.cursor()
idMot = valeurCase
curseur.execute("select * from catalogue where idMotCle=?",(idMot))
window['output1'].update('Résultats: \n\n')
for unfichier in curseur.fetchall():
#afficher dans résultats
window['output1'].update('Le mot ' + unfichier[0]+' est dans le fichierID:'+
str(unfichier[1]) + '\n', append = True)
#print(unfichier[0], unfichier[1])#pour tests dans console
**#Fonction qui retourne la recherche par thème
def lireTheme(conn):
conn.execute("set transaction isolation level read committed;")
curseur = conn.cursor()
idTheme = valeurCase
curseur.execute("SELECT f.contenu FROM fichiers f, reference r Where r.idFichier = f.idFichier AND r.idTheme =?",(idTheme))
data = curseur.fetchall()
data = data[0][0]
binary_data = base64.b64decode(data)
image2 = Image.open(io.BytesIO(binary_data))
image2.show()
#afficher dans résultats
#window['output1'].update(image)**
#Fonction qui rentre le courriel et le le mot passe et donne accès à une fenêtre pour ajouter des fichiers
while True:
event, values = window.read()
print('event:', event)
print('values:', values)
if event == sg.WIN_CLOSED or event == 'Quit':
break
#Si un utilisateur rentre un mot-clé, retourne nom du fichier et contenu associé au mot-clé
#event , values = window.Read()
if event == 'Soumettre1':
valeurCase = values['input1']
#print("Lecture de la case: " + valeurCase) #pour tests dans console
lireMotcle(conn)
#Si un utilisateur rentre un thème, retourne nom du fichier et contenu associé au thème
#event , values = window.Read()
if event == 'Soumettre2':
valeurCase = values['input2']
#print("Lecture de la case: " + valeurCase) #pour tests dans console
lireTheme(conn)
window.close()
#fin test
ligneattente=input("Fin?")
I am trying to display images from Microsoft SQL database. The problem is that images in the database are of type Blob (binary). I would like to convert it to jpeg or png when it gets diplayed in my GUI. Do you have any idea as to how I could do that? (Sorry, there is a bit of french in my code...).
I tried to write the code in def lireTheme(conn), but it does not work...
Thanks,
Caroline
#WebTV application-Layout1
#Importer les librairies utilisées dans ce projet
import PySimpleGUI as sg #Librairie utilisée pour créer notre "graphical user interface" (GUI)
import pyodbc #Librairie utilisée pour accéder au serveur SQL à partir de Python
import base64
from PIL import Image
import io
#Pour voir toute les colonnes de la table
pd.set_option('display.max_rows', 500)
pd.set_option('display.max_columns', 500)
pd.set_option('display.width', 1000)
#Connexion au serveur SQL
serveur = 'THEM17-IRIC'
mabase = 'ProjetWebTV'
utilisateur = 'caro'
motdepasse = 'Mike1976
conn = pyodbc.connect('DRIVER={ODBC Driver 17 for SQL Server};SERVER='+serveur+
';DATABASE='+mabase+';UID='+utilisateur+';PWD='+ motdepasse)
# Toutes les choses à l'intérieur de la fenêtre
titre = [[sg.Text("WebTV: Une application web pour visionner et gérer les images et vidéos",
font = 200)]]
recherche = [[sg.Text("Entrer mot-clé", font = 20)],
[sg.InputText(key = 'input1', tooltip = "Entrez un mot-clé", size = (75,1)),
sg.Submit("Soumettre", key=("Soumettre1"), tooltip = "Soumettre votre requête"),
sg.Submit("Effacer", key=("Effacer1"))],
[sg.Text("Entrer thème", font = 20)],
[sg.InputText(key=('input2'), tooltip = "Entrez un thème", size = (75,1)),
sg.Submit("Soumettre",key=("Soumettre2"), tooltip = "Soumettre votre requête"),
sg.Submit ("Effacer", key=("Effacer2"))],
[sg.Text("Résultat de la recherche",font = 20)],
[sg.Image(key = ('output1'), size = (750,1), expand_x = True, expand_y = True)]]
myAccount = [[sg.Text("Courriel", font = 20), sg.InputText()],
[sg.Text("Mot de passe", font = 20), sg.InputText()],
[sg.Button("Soumettre")]]
newUser = [[sg.Text("Prénom", font = 20), sg.InputText()],
[sg.Text("Nom", font = 20), sg.InputText()],
[sg.Text("Pseudo", font = 20), sg.InputText()],
[sg.Text("Date de naissance", font = 20), sg.InputText()],
[sg.Text("Photo de profil", font = 20), sg.InputText()],
[sg.Text("Courriel", font = 20), sg.InputText()],
[sg.Text("Mot de passe", font = 20), sg.InputText()],
[sg.Button("Soumettre")]]
tbgrp = [[sg.TabGroup([[sg.Tab("Recherche", recherche, font = 100),
sg.Tab("Nouvel utilisateur", newUser, font=30),
sg.Tab("Mon Compte", myAccount, font = 100)]],
tab_location = "centertop",
expand_x = True,
expand_y = True)]]
layout = titre + tbgrp
#Creation de la fenêtre
sg.theme ("DarkBlue13") #Défini la couleur de la fenêtre
window = sg.Window ('WebTV application',
layout,
size = (800, 600),
resizable = True,
element_justification= "center",
grab_anywhere = True)
#event, values = window.read()
#Liste des fonctions
#Fonction qui retourne la recherche par mot-clé
def lireMotcle(conn):
conn.execute("set transaction isolation level read committed;")
curseur = conn.cursor()
idMot = valeurCase
curseur.execute("select * from catalogue where idMotCle=?",(idMot))
window['output1'].update('Résultats: \n\n')
for unfichier in curseur.fetchall():
#afficher dans résultats
window['output1'].update('Le mot ' + unfichier[0]+' est dans le fichierID:'+
str(unfichier[1]) + '\n', append = True)
#print(unfichier[0], unfichier[1])#pour tests dans console
**#Fonction qui retourne la recherche par thème
def lireTheme(conn):
conn.execute("set transaction isolation level read committed;")
curseur = conn.cursor()
idTheme = valeurCase
curseur.execute("SELECT f.contenu FROM fichiers f, reference r Where r.idFichier = f.idFichier AND r.idTheme =?",(idTheme))
data = curseur.fetchall()
data = data[0][0]
binary_data = base64.b64decode(data)
image2 = Image.open(io.BytesIO(binary_data))
image2.show()
#afficher dans résultats
#window['output1'].update(image)**
#Fonction qui rentre le courriel et le le mot passe et donne accès à une fenêtre pour ajouter des fichiers
while True:
event, values = window.read()
print('event:', event)
print('values:', values)
if event == sg.WIN_CLOSED or event == 'Quit':
break
#Si un utilisateur rentre un mot-clé, retourne nom du fichier et contenu associé au mot-clé
#event , values = window.Read()
if event == 'Soumettre1':
valeurCase = values['input1']
#print("Lecture de la case: " + valeurCase) #pour tests dans console
lireMotcle(conn)
#Si un utilisateur rentre un thème, retourne nom du fichier et contenu associé au thème
#event , values = window.Read()
if event == 'Soumettre2':
valeurCase = values['input2']
#print("Lecture de la case: " + valeurCase) #pour tests dans console
lireTheme(conn)
window.close()
#fin test
ligneattente=input("Fin?")
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
不确定您的
Blob
图像的格式。也许您可以尝试以下两种方法来更新 Image 元素上的图像。
或者
Not sure what format for your
Blob
image.Maybe you can try following two ways to update image on Image element.
or