Python 2.7用requests保存API返回内容为图片时提示非PNG文件求助
解决Python 2.7中保存API返回图片数据的问题
嘿,我一眼就看出问题所在啦!你拿到的response.content是Base64编码后的字符串,不是PNG格式的原始二进制数据——这就是直接写入文件会报错“Not a PNG file”的核心原因。
问题分析
你贴的内容示例eyJpZCI6IndzX2Y5YnVqaWVwamVzMnRyNWpjM2RpXzE1MTY2MTM5MjgzMzMiLC.............YTZPZUVjWkwva0FBQUFBRWxGVGtTdVFtQ0MifQ==明显是Base64编码后的可读文本,而PNG图片的原始二进制数据是一堆不可打印的字节,二者完全不是一回事。你之前尝试直接写入或者再次Base64编码,都是在处理文本而非真实的图片字节,自然打不开。
正确解决方案
我们需要先把Base64字符串解码成二进制图片数据,再写入文件。Python 2.7自带base64模块,直接用就行:
import requests import base64 # 保留你原有的请求逻辑 url = "你的API接口地址" payload = {"你的请求参数": "对应的值"} headers = {"Content-Type": "application/json"} # 根据你的API需求调整头部 response = requests.request("POST", url, data=payload, headers=headers) # 关键步骤:解码Base64字符串为二进制图片数据 # 注意:如果API返回的字符串带`data:image/png;base64,`前缀,需要先去掉 image_content = response.content.strip() if image_content.startswith('data:image/png;base64,'): image_content = image_content.split(',')[1] image_data = base64.b64decode(image_content) # 用with语句安全写入文件(自动关闭文件,避免资源泄漏) with open('img.png', 'wb') as img_file: img_file.write(image_data)
为什么之前的方法不行?
- 直接写入
response.content:你写入的是Base64文本字符串,文件里存的是可读字符,不是PNG图片要求的二进制字节流,系统自然识别为无效的PNG文件。 - 再次Base64编码:相当于把已经编码过的字符串再做一次编码,结果是更复杂的文本,离真实的图片数据更远,肯定还是打不开。
现在试试上面的代码,应该就能正常打开保存的PNG图片啦!
内容的提问来源于stack exchange,提问作者aryan singh
相关产品推荐
相关产品推荐

