如何使用Python3的imageio库通过URL读取图片?
使用Python3的imageio库从URL读取图片
当然可以用imageio替代PIL实现从URL读取图片的功能,而且操作起来相当简洁,甚至在某些场景下比PIL更省心!下面我给你详细讲讲具体实现方法:
1. 先确保安装了imageio
如果还没安装,先执行以下命令:
pip install imageio
2. 基础读取方式
imageio提供了两种常用的API来读取图片,你可以根据自己使用的版本选择:
方式一:使用传统的imageio.imread(兼容旧版本)
直接把图片URL作为参数传入即可,imageio会自动处理网络请求:
import imageio # 替换成你的目标图片URL image_url = "https://example.com/test-image.jpg" # 读取图片,返回的是numpy数组格式 image = imageio.imread(image_url) # 验证读取成功:打印图片的形状(高度、宽度、通道数) print(f"图片形状:{image.shape}")
方式二:使用imageio v3版本的推荐API(更现代)
如果你的imageio是较新版本(v3+),官方推荐使用imageio.v3模块的API,功能更完善:
import imageio.v3 as iio image_url = "https://example.com/test-image.jpg" # 读取图片 image = iio.imread(image_url) # 可选:直接显示图片(需要有图形界面环境) iio.imshow(image)
3. 自定义请求参数(应对反爬/特殊需求)
如果目标URL需要设置请求头(比如User-Agent)、超时时间,或者需要代理,你可以先通过requests库获取图片字节流,再传给imageio:
import imageio.v3 as iio import requests image_url = "https://example.com/test-image.jpg" # 自定义请求头,模拟浏览器访问 headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36" } # 发送请求获取字节流,设置10秒超时 response = requests.get(image_url, headers=headers, timeout=10) # 检查请求是否成功,失败则抛出异常 response.raise_for_status() # 从字节流读取图片 image = iio.imread(response.content)
和PIL的对比
用PIL实现同样功能的话,通常需要先获取字节流再用Image.open()读取,而imageio直接支持传入URL,步骤更少。而且imageio还支持更多格式(比如医学影像、视频帧),功能覆盖面更广,完全可以替代PIL完成从URL读取图片的需求。
内容的提问来源于stack exchange,提问作者Akash Chandra
相关产品推荐
相关产品推荐

