7

フロントエンド GUI に PyQt4 を使用してプログラムを作成しています。このプログラムはバックエンド データベース (MySQL または SQLite のいずれか) にアクセスします。データベースにいくつかの画像データを保存する必要があります。以下は、画像ファイル (JPEG 形式) をデータベースの BLOB データ フィールドにインポートするために使用する Python コードです。

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 オブジェクトを作成する方法についてです。私の現在のアプローチには、次の手順が含まれます。

(1) データベース内の Hex str -- cPickle&StringIO --> PIL Image Object

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

(3) 一時画像ファイル --> QPixmap

このアプローチもうまく機能します。しかし、ユーザーの操作に対するプログラムの応答が遅くなる可能性がある一時画像ファイルの書き込み/読み取りを行う必要がない方がよいでしょう。QPixmap::loadFromData()を使用して、データベースに保存されているブロブ データから直接ロードできると思います。ここで誰かがこの関数の使用方法の例を示してくれることを願っています。

ティア、

ビング

4

3 に答える 3

11

QImage.fromData 静的メソッドを使用して、文字列から画像をロードし、ピックスマップに変換できます。

 image_data = get_image_data_from_blob()
 qimg = QtGui.QImage.fromData(image_data)
 pixmap = QtGui.QPixmap.fromImage(qimg)
于 2009-08-19T16:05:42.100 に答える
4

Ants Aasma によって提案されたアプローチは機能し、実際には次のコードを使用するだけでも問題ありません。

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

すべてのヘルプと情報に感謝します。

于 2009-08-19T19:02:15.427 に答える
0

同様の問題を解決するために1時間半グーグルした後、私はQTを使用してコンパイルされた.exeにJPEGをロードすることになりました。私はpython3.1を使用しているため、前述のソリューションの一部を使用できませんでした。

  • py2exeで機能するヒント(py2exeはpython2でのみ機能するため、py2exeではなくcxfreezeを使用しているため)、
  • PILを必要とするヒント(python2、afaikの場合のみ)。

ここに投稿されたソリューションは機能しませんでしたが、非常によく似たものが機能し[PythonDir]\Lib\site-packages\PyQt4\plugins\imageformatsました。exeのフォルダーにをコピーし、qt.conf他のソリューションに従ってそのフォルダーに作成したファイルを削除しました。それがすべてです(私は:pだと思います)。

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

(このソリューションはjbzによってhttp://www.thetoryparty.com/wp/2009/08/27/pyqt-and-py2app-seriously-i-dont-know-what-to-do-with-you-に投稿されましたwhen-youre-like-this /

この質問は少し古いですが、問題はまだ残っているようですので、この回答がpython3.1ユーザーに役立つことを願っています。

于 2010-02-06T13:32:12.047 に答える