フロントエンド 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()を使用して、データベースに保存されているブロブ データから直接ロードできると思います。ここで誰かがこの関数の使用方法の例を示してくれることを願っています。
ティア、
ビング