You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python如何从互联网加载图像文件?PIL调用Image.open打开URL报错咨询

网络图片加载失败原因

PIL 自带的 Image.open() 仅支持读取本地文件路径或类文件对象,无法直接识别 HTTP/HTTPS 协议的网络链接。你传入网络URL时,方法底层会默认把URL当作本地磁盘路径去读取,自然就会报路径无效的OSError。

可行的实现方案

方案1:requests+BytesIO实现(推荐,兼容性最强)

首先安装依赖(如已安装requests可跳过):

pip install requests

代码示例:

from PIL import Image
import requests
from io import BytesIO

img_url = "https://i.etsystatic.com/8331303/r/il/dec4ed/2753449716/il_300x300.2753449716_i5j3.jpg"
# 请求图片内容
resp = requests.get(img_url)
# 校验请求是否正常,状态码非200会直接抛出异常
resp.raise_for_status()
# 把二进制内容转为类文件对象传给Image.open
img = Image.open(BytesIO(resp.content))

# 后续可以正常操作图片
# img.show()  # 展示图片
# img.save("local_img.jpg")  # 保存到本地

如果遇到网站反爬拦截,可以给get方法添加请求头,示例:

resp = requests.get(img_url, headers={
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.0.0 Safari/537.36"
})

方案2:用标准库urllib实现(无需额外安装第三方包)

不想装requests可以用Python内置的urllib库实现:

from PIL import Image
from io import BytesIO
from urllib.request import urlopen

img_url = "https://i.etsystatic.com/8331303/r/il/dec4ed/2753449716/il_300x300.2753449716_i5j3.jpg"

with urlopen(img_url) as resp:
    img = Image.open(BytesIO(resp.read()))

内容的提问来源于stack exchange,提问作者JH LEE

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 08:36:05