如何在Python中从URL读取图片数据?

315 投票
15 回答
491815 浏览
提问于 2025-04-17 02:07

我想做的事情其实很简单,当我们处理本地文件的时候没啥问题,但当我尝试用远程网址来做时,就出现了问题。

简单来说,我想从一个网址获取文件,然后创建一个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)

参考资料:

撰写回答