Afficher une image incluse dans in BLOB SQL sous PySide2 [Résolu]

Signaler
Messages postés
4
Date d'inscription
mardi 28 janvier 2020
Statut
Membre
Dernière intervention
2 février 2020
-
JohnMacGyver
Messages postés
4
Date d'inscription
mardi 28 janvier 2020
Statut
Membre
Dernière intervention
2 février 2020
-
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...

3 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
Messages postés
4
Date d'inscription
mardi 28 janvier 2020
Statut
Membre
Dernière intervention
2 février 2020

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 ???
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 =)
Messages postés
4
Date d'inscription
mardi 28 janvier 2020
Statut
Membre
Dernière intervention
2 février 2020

SUPER !!!!!!

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

Merci beaucoup trifou, pour ton aide précieuse...