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

libwebp安装成功但PIL打开webp报UnidentifiedImageError如何解决

问题成因
  • 请求返回内容异常:目标站点对无UA标识的requests默认请求做了拦截,返回的并非webp图片二进制内容,而是反爬提示页、403错误页等非图片内容,导致Image.open无法识别BytesIO中的内容。
  • Python运行环境不一致:执行python -m PIL检测的Python环境,和实际运行代码的环境(比如IDE绑定的虚拟环境、conda环境等)不是同一个,导致检测结果和实际运行效果不符。
  • Pillow的动态链接库绑定异常:底层libwebp已经安装成功,但Pillow安装时没有正确关联到libwebp的动态链接库,所以底层检测显示支持,但Python层面的模块检测返回False,运行时无法调用webp解码能力。
解决方案
  1. 校验请求有效性,修复请求逻辑
    在requests.get中增加UA头避免反爬拦截,同时添加返回状态校验,确保拿到的是正确的图片内容,参考修改后的请求代码:
import requests
from io import BytesIO
from PIL import Image

headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36"
}
webp_format = requests.get("https://http2.mlstatic.com/D_NQ_NP_711864-MLB46594538199_072021-O.webp", headers=headers)
# 校验请求是否成功,状态码非200会直接抛出异常
webp_format.raise_for_status()
# 可选校验文件头,webp文件前4字节为RIFF,确认返回的是图片
assert webp_format.content[:4] == b'RIFF', "返回内容不是webp图片"
  1. 确认运行环境一致性
    在你报错的代码开头加入以下代码,打印当前运行代码的Python解释器路径:
import sys
print(sys.executable)

复制输出的完整路径,在终端中执行以下两条命令,确认和你之前的检测结果是否一致:

# 替换<your-python-path>为上一步输出的路径
<your-python-path> -m PIL
<your-python-path> -c "from PIL import features; print(features.check_module('webp'))"

如果结果和之前不同,说明是环境不一致问题,将IDE的运行环境切换为你检测过webp支持正常的Python环境即可。
3. 修复Pillow的webp绑定
如果确认是同一环境但检测结果不一致,完全卸载清理现有Pillow后重新安装即可:

pip uninstall -y PIL Pillow
pip install --upgrade --force-reinstall Pillow
  1. 修正原有代码的逻辑错误
    原代码中image.convert('RGB')没有接收返回值,转换后的RGB对象没有被后续调用,会导致保存jpg时出现透明通道兼容问题,修改为:
image = Image.open(buffer)
# 接收convert返回的新对象
image = image.convert('RGB')
  1. 路径兼容优化
    Windows路径建议使用原始字符串(字符串前加r)避免转义字符问题,比如:
image.save(r'C:\Users\Ze\Documents\Dropshipping\Scraping\Competitor product lists\Selected\test.jpg')

内容的提问来源于stack exchange,提问作者José Guedes

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 21:00:00