这是从 Python 3 中的 URL 获取图像的正确方法吗?

Is this the right way to fetch an image from a URL in Python 3?

我需要在 Python 中检索 URL 并将其作为枕头图像获取。

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 对象,然后,最后,打开图像) .

有没有更好的方法?

根据评论 -- 不;这就是文档的建议!

If you have an entire image in a bytestring, wrap it in a BytesIO object, and use PIL.Image.open() to load it.


不过,从 Python 3.5 开始,即使这样也是不必要的,因为 HTTPResponses are already buffered (this applies to other URL libraries,例如 requestsurllib3):

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