Afficher une image incluse dans in BLOB SQL sous PySide2

Résolu/Fermé
JohnMacGyver Messages postés 5 Date d'inscription mardi 28 janvier 2020 Statut Membre Dernière intervention 4 avril 2020 - 28 janv. 2020 à 22:07
 Jawadov11 - 12 juin 2020 à 14:35
Bonjour tous le monde.

Je suis un nouveau membre, je débute sous python
et j'ai en projet d'afficher une image incluse dans une base SQLITE3
en format BLOB. Les images sont des Jpg incluse dans ce Blob.

J'aimerais savoir comment afficher cette image dans un formulaire Python.
J'utilise la bibliothèque PySide2.

Mais je ne connais la prog a faire pour passer de ce Blob a l'affichage écran.
Je ne trouve pas d'exemple dans ce sens.

Pouvez-vous m'aider ?

Merci d'avance...
A voir également:

4 réponses

Bonjour,

Fait est qu'enregistrer une image dans une bdd n'a jamais été une très bonne idée, il y a QImage.fromData qui permet de charger ton image.

https://doc.qt.io/qtforpython/PySide2/QtGui/QImage.html#PySide2.QtGui.PySide2.QtGui.QImage.fromData
1
JohnMacGyver Messages postés 5 Date d'inscription mardi 28 janvier 2020 Statut Membre Dernière intervention 4 avril 2020
Modifié le 29 janv. 2020 à 22:09
Bonjour Trifou.

J'ai regardé ton lien, mais ça ne m'aide pas.

c'est un lien qui donnes des dizaines d'instructions, sans me donner une piste.

Actuellement j'ai mon image dans un Tableau et j'ai un Qlabel
qui peux m'afficher l'image dans le tableau.

Le soucis c'est que comme je débute impossible pour moi d’écrire le code
qui va envoyer cette image dans le Qlabel.

J'ai réussi a afficher une image qui viens directement d'un fichier.jpg

import sys
from PySide2 import QtCore, QtGui, QtWidgets

app = QtWidgets.QApplication(sys.argv)

pixmap = QtGui.QPixmap('image.jpg')
label = QtWidgets.QLabel()
label.setPixmap(pixmap)
label.show()

app.exec_()

Ce petit code fonctionne


Mais comment faire quand ce Jpg est dans un tableau ???
0
Bonjour,

Pourtant tout ce qu'il y a à faire, c'est d'utiliser
QtGui.QImage.fromData
et le fournir à
QtGui.QPixmap.fromImage
.

Je n'utilise pas pyside ni qt, mais j'ai quand même testé pour voir si ça fonctionne.

Avec un fichier image.jpg.

Petit script pour créer une simple table et l'insertion d'une image.

import sqlite3

sql_create = """
CREATE TABLE test_image(
    id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
    image BLOB NOT NULL
)
"""

with sqlite3.connect('la_base.db') as con, open('image.jpg', 'rb') as f:
    cur = con.cursor()
    cur.execute(sql_create)
    con.commit()
    data = f.read()
    cur.execute('INSERT INTO test_image(image) VALUES(?)', (data,))
    con.commit()


Ce script exécuté, alors il suffit de tester dans un autre script l'affichage en récupérant l'image dans la table.

from PySide2 import QtGui, QtWidgets
import sqlite3


with sqlite3.connect('la_base.db') as con:
    cur = con.cursor()
    cur.execute('SELECT image FROM test_image')
    data = cur.fetchall()

app = QtWidgets.QApplication()
label = QtWidgets.QLabel()

img = QtGui.QImage.fromData(data[0][0])
pixmap = QtGui.QPixmap.fromImage(img)

label.setPixmap(pixmap)
label.show()

app.exec_()


Cela fonctionne très bien =)
0
JohnMacGyver Messages postés 5 Date d'inscription mardi 28 janvier 2020 Statut Membre Dernière intervention 4 avril 2020
Modifié le 30 janv. 2020 à 20:24
SUPER !!!!!!

C'est génial çà fonctionne très bien...

Merci beaucoup trifou, pour ton aide précieuse...
0
bonjour on me dit
AttributeError: 'App' object has no attribute 'exec_'
voici le code
from PySide2 import QtWidgets

class App(QtWidgets.QWidget):
def __init__(self):
   super().__init__()
   self.setWindowTitle("hello")

app=QtWidgets.QApplication([])
win=App()
win.exec_()
0