StringIO initial_value必须是str,而不是Bytes

时间:2017-07-03 14:55:13

标签: python python-3.x stringio

好的,我有这段代码:

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

我无法看到我出错的地方。有人可以帮忙吗?

1 个答案:

答案 0 :(得分: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