如何在Python中从URL读取图片数据?
我想做的事情其实很简单,当我们处理本地文件的时候没啥问题,但当我尝试用远程网址来做时,就出现了问题。
简单来说,我想从一个网址获取文件,然后创建一个PIL图像对象。没错,我可以先下载这个网址的内容,存到一个临时文件里,然后再打开它变成图像对象,但这样做感觉效率太低了。
这是我现在的代码:
Image.open(urlopen(url))
但是它报错说seek()
这个方法不可用,所以我又试了这个:
Image.open(urlopen(url).read())
但这也不行。有没有更好的方法来做到这一点,还是说写入临时文件是处理这种情况的常规做法呢?
15 个回答
173
使用 StringIO
import urllib, cStringIO
file = cStringIO.StringIO(urllib.urlopen(URL).read())
img = Image.open(file)
451
在Python3中,StringIO和cStringIO这两个模块不再使用了。
在Python3中,你应该使用:
from PIL import Image
import requests
from io import BytesIO
response = requests.get(url)
img = Image.open(BytesIO(response.content))
195
以下内容适用于Python 3:
from PIL import Image
import requests
im = Image.open(requests.get(url, stream=True).raw)
参考资料: