2017-10-21 13 views
0

私は、pngファイルを含むデータベースからブロブを読んでいます。バイトストリームとPythonのutf-8 3

BLOBは正しく見え、バイトデータ型です。それは始まり:

b'\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x00\x92\x00\x00\x00m\x08\x06\x00\x00\x00J\xbf8B\x00\x00\x00\x06bKGD\x00\x00\x00\x00\x00\x00\xf9C\xbb\x7f\x00\x00\x00\tpHYs\x00\x00\x0b\x13\x00\x00\ 

をしかし、私は実行すると:それは文字列としてバイトを処理しているようだ

UnicodeDecodeError: 'utf-8' codec can't decode byte 0x89 in position 0: invalid start byte 

が、なぜ:

は、私がメッセージを取得しますか?

+1

これは 'wx.Image()'です。 –

+0

使用している 'wx.Image()'のドキュメントを教えてください。私はバッファを取るコンストラクタを見つけることができないようです[私が見つけたドキュメント](https://wxpython.org/Phoenix/docs/html/wx.Image.html#wx.Image) –

+0

私はドン生のバイトを受け取るコンストラクタは見えません:https://wxpython.org/Phoenix/docs/html/wx.Image.html#api-class-api –

答えて

1

wx.Image()は、生のバイトストリームからのイメージの作成をサポートしていません。クラスは代わりにそれをファイル名(文字列でなければならないため、デコードされている)として解釈しています。

io.BytesIO()オブジェクトにデータをラップします。 wxはストリームなどのオブジェクトを受け入れます:

import io 

image = wx.Image(io.BytesIO(blob))