使用requests下载图片后PIL无法识别的问题求助
问题解决思路
核心问题:你下载的是WEBP格式的图片,但强行保存成了.jpg后缀,导致PIL无法正确识别文件格式。
从你提供的response.content开头b'RIFF...WEBP'就能看出来,这是标准的WEBP文件头,而你给文件命名为0.jpg——虽然本地看图软件能自动识别真实格式,但PIL的Image.open()会严格校验文件格式与后缀的匹配性,所以抛出了UnidentifiedImageError。
两种解决方法
方法1:使用正确的文件后缀保存
直接把保存的文件名改成.webp,PIL支持WEBP格式(若你的PIL版本过老,可能需要额外安装pillow-webp扩展):
修改代码中的文件名部分:
def save_file(image, index): # 改用webp后缀 file = open(f"{index}.webp", "wb") file.write(image) file.close() # 调用保存 save_file(image, 0) # 打开正确后缀的文件 Image.open('0.webp')
方法2:下载后转换为JPG格式保存
如果必须保存为JPG格式,可以用PIL先将WEBP图片转换后再保存:
from io import BytesIO from PIL import Image import requests def get_image(url): response = requests.get(url, headers=headers) return response.content url = 'https://http2.mlstatic.com/D_NQ_NP_779386-MLA47939118380_102021-W.webp' image_content = get_image(url) # 用BytesIO读取内容并转换格式 with BytesIO(image_content) as img_buffer: with Image.open(img_buffer) as img: # 转换为RGB模式(JPG不支持透明通道) img.convert('RGB').save('0.jpg', 'JPEG') # 现在可以正常打开0.jpg了 Image.open('0.jpg')
若执行时提示WEBP格式不支持,运行pip install pillow-webp即可解决格式兼容问题。
内容的提问来源于stack exchange,提问作者Nacho Eigu
相关产品推荐
相关产品推荐

