2014-10-05 49 views
0

我試圖將端口Impressive與python3一起使用。PIL/Python 3移植令人印象深刻

在某一時刻,必須加載LOGO。 LOGO是硬編碼的。 因此,這將是這個樣子:

LOGO = '\x89PNG\r\n\x1a\n\x00\x0 ...' 
LogoImage = Image.open(StringIO.StringIO(LOGO)) 

當試圖端口這與python3使用通過改變線路:

LogoImage = Image.open(io.StringIO(LOGO)) 

我收到以下錯誤消息

OSError: cannot identify image file <_io.StringIO object at 0x106b388b8> 

我讀了一些關於StringIO和BytesIO的內容。儘管如此,仍然無法找到解決方案。

編輯:

從光盤加載圖像不是問題。

回答

1

您需要使用bytes instead of strio.Bytes而不是io.StringIO

LOGO = b'\x89PNG\r\n\x1a\n\x00\x0 ...' # NOTE: leading `b` 
LogoImage = Image.open(io.BytesIO(LOGO)) 
+0

好吧,我曾嘗試已經使用BytesIO。圖像是硬編碼的,但會彈出的第一個錯誤消息是:'TypeError:'str'不支持緩衝區接口'。嘗試使用字節時(LOGO,'UTF-8')。它將再次成爲如下錯誤消息:'無法識別圖像文件<_io.BytesIO ...',只是將StringIO替換爲BytesIO。 – Nimi 2014-10-05 10:39:23

+1

@Nimi,嘗試'latin1'編碼。魔術字節(LOGO,'latin1')或'LOGO.encode'('latin1')' – falsetru 2014-10-05 10:59:51

+0

。這解決了我的問題。謝謝你的幫助。 – Nimi 2014-10-05 11:09:25