2017-07-03 25 views
0

Ok, so habe ich diesen Code:StringIO initial_value muss str werden, nicht Bytes

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() 

Dies gibt den Fehler: TypeError: initial_value must be str or None, not bytes

Ich kann nicht sehen, wo ich falsch gehe. Kann jemand helfen?

+0

versuchen Sie stattdessen 'pp = Image.open (BytesIO (response.content))'. –

Antwort

1

response ist Binärdaten (bytes) und Image erwartet auch einige Binärdaten.

So:

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

wird die Injektion eines textbasierten IO-Objekt in der Mitte: kann nicht Bytes in Text umwandeln (und das nächste Problem wäre: nicht Textdaten in das Bild lesen)

Fix:

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

EDIT: noch besser, verwenden Image.open(response.raw) wie hier beantwortet: How to download image using requests

Verwandte Themen