Ich schreibe ein Programm mit PyQt4 für Front-End-GUI und dieses Programm greift auf eine Back-End-Datenbank (die entweder MySQL oder SQLite sein kann). Ich brauche ein paar Bilddaten in der Datenbank zu speichern und unten ist der Python-Code I-Bilddateien zu importieren, verwenden (im JPEG-Format) zu einem Blob-Datenfeld in der Datenbank:Load Blob Bilddaten in QPixmap
def dump_image(imgfile):
i = open(imgfile, 'rb')
i.seek(0)
w = i.read()
i.close()
return cPickle.dumps(w,1)
blob = dump_image(imgfile)
hex_str = blob.encode('hex')
# x"%s"%hex_str will be the string inserted into the SQL command
Dieser Teil funktioniert gut. Meine Frage betrifft das Erstellen eines QPixmap-Objekts aus den Bilddaten, die in PyQt4 in der Datenbank gespeichert sind. Mein aktueller Ansatz beinhaltet die folgenden Schritte:
(1) Hex str in Datenbank - cPickle & StringIO -> PIL Bildobjekt
def load_image(s):
o = cPickle.loads(s)
c = StringIO.StringIO()
c.write(o)
c.seek(0)
im = Image.open(c)
return im
(2) PIL Bildobjekt -> Temporäre Bilddatei
(3) Temporäre Bilddatei -> QPixmap
Dieser Ansatz funktioniert auch gut. Aber es wäre besser, wenn ich keine temporären Bilddateien schreiben/lesen müsste, die die Reaktion des Programms auf Benutzerinteraktionen verlangsamen könnten. Ich denke, ich könnte QPixmap::loadFromData() verwenden, um direkt von den in der Datenbank gespeicherten Blobdaten zu laden und hoffe, dass jemand hier ein Beispiel zeigen könnte, wie man diese Funktion benutzt.
TIA,
Bing
Warum verwenden Sie sogar den PIL-Schritt? Qt ist glücklich mit dem Laden von JPEG-Daten: http://docs.huihoo.com/pyqt/pyqt4/html/qpixmap.html#reading-and-writing-image-files – balpha
Ich bin sicher, dass Qt JPEG-Daten laden kann. Was ich suche, ist ein Code-Snippet, das die im Blob-Feld codierte Zeichenfolge in das QPixmap-Objekt konvertiert. Vielen Dank! –
Ich habe herausgefunden, dass ich nur QPixmap :: loadFromData (cPickle.loads (s)) verwenden kann, wobei s die aus dem BLOB-Feld abgerufene Zeichenfolge ist. Danke für die Hilfe. –