I know there are a thousand questions like that out there but none of the provided solutions do actually work.
I am using pythong 3.4.
I would like to directly open the url as an image, not store it first on the disk.
Basically the code comes down to this
from PIL import Image
import urllib.request
...
opener = urllib.request.build_opener()
file = opener.open("http://pixel.quantserve.com/pixel")
img = Image.open(file.read())
width, height = img.size
This yields for me an error. I also tried it without the
.read()
and with
file = urllib.request.urlopen("...")
both with and without the .read()
Basically I am lost. The only thing I can do is change the error that python is throwing at me. Thanks for any help!
Error messages with the above mentioned version:
TypeError: embedded NUL character
Without the read()
io.UnsupportedOperation: seek
With "urllib.request.urlopen("...") without .read()
io.UnsupportedOperation: seek
with .read()
TypeError: embedded NUL character
解决方案
To avoid using tkinter and to avoid writing the file locally, use a buffer:
from PIL import Image
import urllib
from io import BytesIO
f = urllib.urlopen("http://pixel.quantserve.com/pixel")
b = BytesIO(f.read())
i = Image.open(b)
i #
This is using 2.7, which doesn't have urllib.request, so modify this as required.
Also, be aware that this image appears to be malformed/invalid