保存 Qwen-Image-3.0 生成的图片,先要确定图片此刻在哪个“容器”里:网页界面、API 响应,还是本地模型进程。三种情况的保存路径不同:网页端直接下载;API 返回的可能是 base64 字符串或临时图片 URL;本地推理拿到的是内存字节流或文件路径。判断标准很简单——图片当前是什么数据类型,就按对应方式落盘。
Qwen-Image-3.0 生成结果通常以二进制字节、base64 字符串或临时 URL 三种形式存在。保存前先确认返回结构:URL 用下载请求落盘,base64 先解码再写文件,二进制直接写文件。建议优先保存无损 PNG,同时把生成参数和提示词一起留存,便于后续复现。
先确认返回形式,再决定导出路径
如果你用的是 Web 页面,一般界面会提供下载按钮;没有按钮时,也可以在生成图片上右键选择“图片另存为”。要注意部分在线演示页面会把图片保存在会话临时目录,刷新后链接失效,所以看到图片后应尽快导出。
如果你接的是 API,需要先观察响应体。常见有三种形态:
- 图片 URL:响应里有一个 http/https 地址,通常带过期时间。需要立即请求该 URL 并保存二进制内容。
- base64 字符串:响应里是类似
iVBORw0KGgo=的长字符串,需要按 base64 解码后写文件。 - 二进制内容:接口可能直接返回 image/png 或 image/jpeg 字节流,此时读响应的 body 写文件即可。
如果错误地直接把 base64 字符串写进文件,得到的是文本而不是可打开的图片。验证方式:打开保存的文件,看是否能正常显示;或者在命令行用 file 文件名 确认文件类型。
Python 保存骨架:按实际返回字段替换
以下代码适合在脚本或服务端环境使用,不是某个固定 SDK 的官方示例。你需要根据实际接口字段名调整 image_url 或 image_b64。
import base64
import requests
resp = requests.get('你的模型接口地址', params={'prompt': '一只坐在窗台上的猫'}, timeout=120)
data = resp.json()
# 情况 1:返回图片 URL
if 'image_url' in data:
img_resp = requests.get(data['image_url'], timeout=30)
img_resp.raise_for_status()
with open('qwen_image.png', 'wb') as f:
f.write(img_resp.content)
# 情况 2:返回 base64 字符串
elif 'image_b64' in data:
with open('qwen_image.png', 'wb') as f:
f.write(base64.b64decode(data['image_b64']))如果你是在本地加载模型,生成返回的通常是一个 PIL Image 或 numpy 数组。PIL 对象可以直接保存;numpy 数组需要先转成 Image 再保存:
from PIL import Image
# 假设 image 是 PIL Image 对象
image.save('qwen_image.png', format='PNG')
# 如果 image 是 numpy 数组,先确认数值范围在 0-255
# arr = image.astype('uint8')
# Image.fromarray(arr).save('qwen_image.png', format='PNG')如果 API 返回图片 URL,且文档说明该 URL 需要鉴权后才能访问,那么下载时必须带上和调用接口一致的 token、Cookie 或自定义请求头;直接粘贴到浏览器或使用裸 requests.get 可能得到 403。
导出位置和文件命名要提前定
如果你只是临时使用,保存到本地当前目录即可;如果是应用功能,建议把图片写到独立目录或对象存储,并让数据层只保存相对路径。文件命名用时间戳或随机串,避免同名覆盖,例如 qwen_8f3a2c.png。
格式方面,PNG 无损,适合后续编辑、抠图和二次处理;JPEG 体积更小,适合直接展示但会有压缩损失。如果生成结果本身没有透明通道需求,两种都可以;如果你希望保留最接近原图的信息,选择 PNG。
需要结合环境确认的是:你的部署环境是否对单文件大小有限制,图片要不要上传到 CDN,生成服务是否是无状态的。这些因素决定你是“下载到本地服务器再同步”,还是“直接把图片字节交给对象存储”。在拿不准时,先保存到本地文件,再根据后续业务需要调整导出位置,是最稳妥的起步方式。
导出后的验证清单
- 文件能否打开:用系统图片查看器或 PIL 打开,不要只看扩展名。
- 文件类型是否正确:Linux 执行
file 文件名,应显示 PNG image data 或 JPEG image data。 - 图片尺寸和色彩:用图像库读取宽高和通道,确认没有出现全黑、全白或颜色翻转。
- URL 地址是否还有效:如果保存的是临时 URL,确认下载完成后再断网或稍后重试,避免拿到过期链接。
- 生成参数是否留存:把提示词、分辨率、seed 和生成时间写入同名 JSON 文件,方便以后复现或排查问题。
保存本身不是复杂操作,大多数问题出在对返回数据形式的误判上。只要先确认“拿到的是 URL、base64 还是二进制字节”,再按对应方式落盘,并完成文件可打开性的验证,导出就不会有悬念。