当我们处理本地文件时,我试图做的事情相当简单,但当我试图用远程URL这样做时,问题就来了。
基本上,我试图从一个URL提取的文件创建一个PIL图像对象。当然,我总是可以只获取URL并将其存储在临时文件中,然后将其打开到一个图像对象中,但这感觉非常低效。
以下是我所拥有的:
Image.open(urlopen(url))
它抱怨seek()不可用,所以我尝试了这个:
Image.open(urlopen(url).read())
但这也不管用。是否有更好的方法来做到这一点,或者写入临时文件是做这类事情的公认方法?
使用urllib.request.urlretrieve()和PIL.Image.open()下载和读取图像数据:
进口的要求
进口urllib.request
import PIL
urllib.request.urlretrieve("https://i.imgur.com/ExdKOOz.png", "sample.png")
img = PIL.Image.open("sample.png")
img.show()
或Call requests.get(url), url作为通过GET请求下载的目标文件的地址。调用io.BytesIO(obj),并将obj作为响应的内容,将原始数据作为bytes对象加载。要加载图像数据,调用PIL.Image.open(bytes_obj),并将bytes_obj作为bytes对象:
import io
response = requests.get("https://i.imgur.com/ExdKOOz.png")
image_bytes = io.BytesIO(response.content)
img = PIL.Image.open(image_bytes)
img.show()