StringIO的initial_value必须海峡,而不是字节
问题描述:
行,所以我有这样的代码: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
我看不到我要去哪里错了。谁能帮忙?
答
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
尝试'pp = Image.open(BytesIO(response.content))'而不是。 –