提问人:JamesTheAwesomeDude 提问时间:3/16/2015 最后编辑:JamesTheAwesomeDude 更新时间:2/6/2022 访问量:1500
这是在 Python 3 中从 URL 获取图像的正确方法吗?
Is this the right way to fetch an image from a URL in Python 3?
问:
我需要在 Python 中检索一个 URL 并将其作为 Pillow 图像获取。
from PIL import Image
from io import BytesIO
import urllib.request
url = input('Enter an image URL:\n> ')
r = urllib.request.urlopen(url)
imdata = r.read()
imdata_wrapper = BytesIO(imdata)
im = Image.open(imdata_wrapper)
im.show()
这似乎是一种相当迂回的方法(获取图像,将其数据读出到 blob 中,将所述 blob 转换为对象,然后最后打开图像)。BytesIO
有更好的方法吗?
答:
2赞
JamesTheAwesomeDude
5/20/2021
#1
每条评论 -- 不;这就是文档甚至建议的!
如果 bytestring 中有整个映像,请将其包装在
BytesIO
对象中,然后使用PIL。Image.open()
来加载它。
不过,从 Python 3.5 开始,即使这样也是不必要的,因为 HTTPResponse
已经被缓冲了(这也适用于其他 URL 库,例如 和 ):requests
urllib3
from PIL import Image
import urllib.request
url = input('Enter an image URL:\n> ')
r = urllib.request.urlopen(url)
im = Image.open(r)
im.show()
评论
read
BytesIO
urllib.request.urlopen
Image.open
urllib.request.urlopen()
http.client.HTTPResponse
HTTPResponse
Image.open
Image.open
read
seek
tell
http.client.HTTPResponse
If you have an entire image in a string, wrap it in a BytesIO object, and use open() to load it.