使用PIL将下载的WebP图片转为JPG格式报错,该如何解决?
问题解决方法
错误原因
你的代码核心问题是Image.open()的传参逻辑错误:Image.open()仅支持接收本地文件路径或类文件对象作为输入,你直接传入requests返回的content字节串时,PIL会误将字节串识别为本地文件路径尝试读取,自然触发编码报错。你的第二种写法还存在逻辑顺序颠倒的问题,且转换后的PIL图像对象无法直接作为上传文件使用。
正确实现代码
import requests from PIL import Image from io import BytesIO # 请求WebP图片 url = "替换为你的图片链接" resp = requests.get(url) # 1. 先把响应字节封装为类文件对象,再传入Image.open webp_img = Image.open(BytesIO(resp.content)).convert("RGB") # 2. 将转换后的RGB图像保存为JPG格式的字节流 jpg_buffer = BytesIO() webp_img.save(jpg_buffer, format="JPEG") # 3. 重置字节流指针到开头,避免后续读取为空 jpg_buffer.seek(0) # 构造上传用的file字典 file = {'file': ("name.jpg", jpg_buffer, 'image/jpeg')}
额外注意事项
- 若运行时提示不支持WebP格式,升级Pillow到最新版本即可:
pip install --upgrade pillow - 必须执行
seek(0)操作:调用save方法后字节流指针会指向末尾,不移到开头后续读取会返回空内容。
内容的提问来源于stack exchange,提问作者José Guedes
相关产品推荐
相关产品推荐

