这是从 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 开始,即使这样也是不必要的,因为 HTTPResponse
s are already buffered (this applies to other URL libraries,例如 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()
我需要在 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 usePIL.Image.open()
to load it.
不过,从 Python 3.5 开始,即使这样也是不必要的,因为 HTTPResponse
s are already buffered (this applies to other URL libraries,例如 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()