7
votes

Charger des données d'image blob dans qpixMap

J'écris un programme à l'aide de PYQT4 pour une interface graphique frontale et ce programme accède à une base de données Back-end (qui peut être soit MySQL, soit SQLite). J'ai besoin de stocker des données d'image dans la base de données et ci-dessous est le code Python que j'utilise pour importer des fichiers image (au format JPEG) dans un champ de données BLOB dans la base de données:

def load_image(s):
    o = cPickle.loads(s)
    c = StringIO.StringIO()
    c.write(o)
    c.seek(0)
    im = Image.open(c)
    return im


3 commentaires

Pourquoi utilisez-vous même le Step Pil? QT est parfaitement satisfait de Chargement de données JPEG: docs.huihoo.com/pyqt/pyqt4/html/...


Je suis sûr que qt est capable de charger des données JPEG. Ce que je cherche, c'est un extrait de code qui convertit la chaîne codée dans le champ Blob vers l'objet QpixMap. Merci!


J'ai compris que je peux simplement utiliser qpixmap :: chargantfromdata (cpickle.loads (s)) où S est la chaîne des données extraites du champ BLOB. Merci pour l'aide.


3 Réponses :


11
votes

Vous pouvez utiliser la méthode statique qimage.fromdata pour charger une image à partir d'une chaîne, puis le convertir en un pixmap:

 image_data = get_image_data_from_blob()
 qimg = QtGui.QImage.fromData(image_data)
 pixmap = QtGui.QPixmap.fromImage(qimg)


0 commentaires

4
votes

L'approche suggérée par les fourmis AASMA fonctionne et il est également correct d'utiliser le code suivant:

image_data = cPickle.loads(str(s)) # s is fetched from DB 
qp = QPixmap() 
qp.loadFromData(image_data) 


0 commentaires

0
votes

Après une bonne heure et demie de Google pour résoudre un problème similaire, j'ai fini par charger des JPEG dans une compilée .exe avec qt. J'utilise Python3.1 et je ne pouvais donc pas utiliser certaines des solutions mentionnées précédemment:

  • Conseils travaillant pour PY2EXE (parce que j'utilise CXFreeze au lieu de PY2EXE, car PY2EXE fonctionne uniquement pour Python2),
  • Conseils qui nécessitent PIL (également uniquement pour Python2, Afaik).

    Bien que les solutions postées ici ne fonctionnaient pas, quelque chose de très similaire a fait: J'ai simplement copié le [pythondir] \ lib \ sites-sites-sites \ pyqt4 \ plugins \ imagesformats dans le dossier de mon exe et supprimé le fichier qt.conf fichier que j'ai créé dans ce dossier suite aux autres solutions. C'est tout (je pense: p).

    Après cela, cela a fonctionné si j'ai chargé le JPG en utilisant le constructeur qpixmap ou chargement d'un qimage premier. Il a également fonctionné sans option spéciale nécessaire pour les deux setup.py et le cxfreeze.bat de compilation à l'EXE à l'aide de CXFreeze.

    (cette solution a été postée par JBZ sur http://www.thetoryParty.com/wp/2009/08/27/pyqt-and-py2app-serieusement- I-ne-connaissez-vous-savez-vous-with-vous-quand-there-the / )

    Cette question est un peu ancienne, mais comme le problème semble être toujours là, j'espère que cette réponse aidera Python3.1 utilisateurs là-bas.


0 commentaires