2009-08-19 12 views
4

フロントエンドGUI用にPyQt4を使用してプログラムを作成しています。このプログラムは、バックエンドデータベース(MySQLまたはSQLite)にアクセスします。私は、データベース内のいくつかの画像データを格納する必要があり、以下の私は、データベースにBLOBデータフィールドに画像ファイル(JPEG形式)をインポートするために使用するPythonコードです:BLOBイメージデータを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 

この部分は正常に動作します。私の質問は、PyQt4でデータベースに保存された画像データからQPixmapオブジェクトを作成する方法です。 - はcPickle &たStringIO - > PILの画像オブジェクト

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のイメージオブジェクト - >一時イメージファイル

データベース内

(1)六角STR:私の現在のアプローチは、次の手順が必要

(3)一時イメージファイル - > QPixmap

この方法も問題ありません。しかし、ユーザーのやりとりに対するプログラムの応答を遅くする一時的なイメージファイルの書き込み/読み込みが不要な方が良いでしょう。私はQPixmap::loadFromData()を使用して、データベースに格納されたBLOBデータから直接ロードし、ここに誰かが私にこの関数の使い方の例を示すことができれば幸いです。

TIA、

ビング

+0

なぜPILのステップを使用していますか? QtはJPEGデータの読み込みに満足しています:http://docs.huihoo.com/pyqt/pyqt4/html/qpixmap.html#reading-and-writing-image-files – balpha

+0

QtはJPEGデータを読み込むことができます。私が探しているのは、BLOBフィールドにエンコードされた文字列を QPixmapオブジェクトに変換するコードスニペットです。ありがとう! –

+0

私はQPixmap :: loadFromData(cPickle.loads(s))を使うことができます。ここで、sはBLOBフィールドからフェッチされた文字列データです。助けてくれてありがとう。 –

答えて

8

あなたは文字列からイメージをロードしてからピックスマップに変換するQImage.fromData静的メソッドを使用することができます。

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

によって提案されたアプローチAnts Aasmaは動作しますが、実際には次のコードを使用するだけでOKです:

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

ありがとう、すべてのヘルプと情報です。

0

グーグルで1時間半して同様の問題を解決した後、コンパイルされた.exeをQTでロードしてしまいました。私はpython3.1を使用していますので、先に述べたソリューションの一部使用できませんでした:(py2exeはpython2に対してのみ機能として、私は、代わりにpy2exeのcxfreezeを使用していますので)py2exeのために働いて

  • のヒントを、
  • PILを必要とするヒント(python2、afaikのみ)。

ここに掲載ソリューションが動作しませんでしたが、非常に似た何かがなかった: 私は単に私のexeファイルのフォルダに[PythonDir]\Lib\site-packages\PyQt4\plugins\imageformatsをコピーして、私は他のソリューション以下、そのフォルダ内に作成qt.confたファイルを削除しました。それだけです(私は思う:p)。

その後、QPixmapのコンストラクタを使用してjpgをロードするか、最初にQImageをロードするかどうかで機能しました。また、setup.pycxfreeze.batの両方のcxfreezeを使用してexeにコンパイルする方法に必要な特別なオプションはありませんでした。

(この溶液をhttp://www.thetoryparty.com/wp/2009/08/27/pyqt-and-py2app-seriously-i-dont-know-what-to-do-with-you-when-youre-like-this/にjbzにより投稿されました)

この質問は少し古いですが、問題はまだそこにあると思われるように、私はこの答えはそこにpython3.1のユーザーを支援願っています。

関連する問題