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

Python 2.7用requests保存API返回内容为图片时提示非PNG文件求助

解决Python 2.7中保存API返回图片数据的问题

嘿,我一眼就看出问题所在啦!你拿到的response.content是Base64编码后的字符串,不是PNG格式的原始二进制数据——这就是直接写入文件会报错“Not a PNG file”的核心原因。

问题分析

你贴的内容示例eyJpZCI6IndzX2Y5YnVqaWVwamVzMnRyNWpjM2RpXzE1MTY2MTM5MjgzMzMi‌​LC.............YTZPZ‌​UVjWkwva0FBQUFBRWxGV‌​GtTdVFtQ0MifQ==明显是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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 03:59:54