2017-07-03 50 views
0

行,所以我有這樣的代碼:StringIO的initial_value必須海峽,而不是字節

from PIL import Image 
import os, sys 
import requests 
from io import StringIO 

url = "https://cdn.discordapp.com/avatars/247096918923149313/34a66572b9339acdaa1dedbcb63bc90a.png?size=256" 
response = requests.get(url) 
pp = Image.open(StringIO(response.content)) 
pp.save("image1.png") 

pp = Image.open("image2c.png").convert("LA") 
pp.save("image2c.png") 

background = Image.open("image1.png").convert("RGBA") 
foreground = Image.open("image2c.png").convert("RGBA") 
foreground = foreground.resize((256, 256), Image.BILINEAR) 
background.paste(foreground, (125, 325), foreground) 
background.show() 

這將返回錯誤:TypeError: initial_value must be str or None, not bytes

我看不到我要去哪裏錯了。誰能幫忙?

+0

嘗試'pp = Image.open(BytesIO(response.content))'而不是。 –

回答

1

response是二進制數據(bytes)和Image也期望一些二進制數據。

所以:

pp = Image.open(StringIO(response.content)) 

被注入中間基於文本的IO對象:不能字節轉換爲文本(和接下來的問題是:不能讀的文本數據轉換爲圖像)

修復:

from io import BytesIO 
pp = Image.open(BytesIO(response.content)) 

編輯:甚至更好,使用Image.open(response.raw)喜歡這裏回答:How to download image using requests

相關問題