Afficher une image incluse dans in BLOB SQL sous PySide2

Résolu
JohnMacGyver Messages postés 7 Statut Membre -  
 Jawadov11 -
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...

4 réponses

  1. trifou
     
    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
  2. JohnMacGyver Messages postés 7 Statut Membre
     
    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
    1. trifou
       
      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
  3. JohnMacGyver Messages postés 7 Statut Membre
     
    SUPER !!!!!!

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

    Merci beaucoup trifou, pour ton aide précieuse...
    0
  4. Jawadov11
     
    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