完成条件与适用入口

需要提交 GPT Image 1.5 或其他本目录模型的蒙版请求时,先阅读蒙版局部编辑。本页说明调用完成后如何读取与保存图片。

本页适用于 Images 生成与编辑接口。普通请求在一次 HTTP 响应中返回完整 JSON;首先检查 HTTP 状态及 error,然后确认 data 为非空数组,并逐项读取图片。流式请求使用完成事件。

这些接口不返回供本目录轮询的图像任务 ID。created 是时间戳,不是 ID;不要拼接 /images/{id}、/videos/{id} 或任意任务查询地址。

响应字段

字段、类型与位置填写规则与限制
created;integer;响应顶层必填;未指定默认值。创建时间,Unix 秒;不是任务 ID,也不表示可用来查询或下载。
data;array;响应顶层可选;未指定默认值。图片结果数组;应用应检查数组非空,再逐项读取 b64_json。
background;string;响应顶层可选;未指定默认值。实际背景类型;可缺省,不作为判断成功的唯一条件。
output_format;string;响应顶层可选;未指定默认值。实际图片编码;可缺省,缺省时按请求明确指定的编码保存。
size;string;响应顶层可选;未指定默认值。实际尺寸;可缺省,不保证总是与请求字符串完全相同。
quality;string;响应顶层可选;未指定默认值。实际质量档位;可缺省。
usage;object;响应顶层可选;未指定默认值。用量对象;可能缺省,各细分字段以实际返回为准。它是 token 用量,不是人民币金额。

数组项字段如下。官方 GPT Image 主要使用 b64_json,不要依赖 DALL·E 的可选返回字段。

字段、类型与位置填写规则与限制
b64_json;string;data[] 内可选;未指定默认值。Base64 图片内容;解码为二进制后保存,不包含 data:image/... 前缀。GPT Image 使用这一结果字段。
url;string;data[] 内可选;未指定默认值。官方 GPT Image 不保证返回此字段。某些兼容入口返回临时链接时应尽快下载,不能套用 DALL·E 的固定有效期。
revised_prompt;string;data[] 内可选;未指定默认值。可缺省;官方 Images 定义主要用于 DALL·E 3。GPT Image 应自行保存原始 prompt,不依赖此字段。

下面是结构示意,用一张 1×1 PNG 的 Base64 作为合成占位图片,仅展示解码位置,不代表真实模型输出或计费用量:

{
  "created": 1789862400,
  "data": [
    {
      "b64_json": "iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mP8/x8AAwMCAO+j5k0AAAAASUVORK5CYII="
    }
  ],
  "output_format": "png"
}

保存 Base64 图片

文生图、本地编辑和 JSON 编辑的 Python/Node.js 示例已经逐张保存文件。cURL 保存的是 response.json,可在保存后用以下 Python 脚本离线解码;该脚本不会发送网络请求,不需要 API Key。

import base64
import json
from pathlib import Path

result = json.loads(Path("response.json").read_text(encoding="utf-8"))
if result.get("error"):
    raise RuntimeError(result["error"])
images = result.get("data")
if not isinstance(images, list) or not images:
    raise RuntimeError("响应中没有图片结果")
extension = result.get("output_format") or "png"
if extension not in ("png", "jpeg", "webp"):
    raise RuntimeError("未知的图片编码")
for index, item in enumerate(images):
    if not item.get("b64_json"):
        raise RuntimeError("缺少 b64_json,请检查原始响应")
    content = base64.b64decode(item["b64_json"], validate=True)
    filename = f"output-{index + 1}.{extension}"
    Path(filename).write_bytes(content)
    print(filename)

文件后缀应与真实编码一致,不要把 JPEG 的 Base64 解码后命名为 PNG。用于网页预览时,可以按编码在 Base64 前加上相应的 Data URL 前缀;不要把原始 JSON 当作图片。

兼容入口返回 URL 时

官方 GPT Image 不支持用 response_format=url 选择 URL 输出。若实际使用的兼容入口返回 data[].url,以该入口的说明为准:尽快下载并自行存储,不假定长期有效,也不要套用其他图像模型的“60 分钟”有效期。

临时图片下载地址可能位于独立文件域名。不要把青云TOP API Key 发送给第三方图片域名;遇到失效或下载失败时保存请求信息与脱敏错误联系支持,不反复重新生成同一张图片。

用量、结果数量和异常

usage.input_tokens、output_tokens、total_tokens 及输入图片/文本细分表示用量,不是金额。部分响应不含完整用量,不能把字段缺失解释成免费。账单以控制台记录为准。

按实际 data 数组逐项保存;数量少于请求的 n、HTTP 200 但没有图片、无法解码时,记录响应并检查错误,不把空文件算作成功。接口返回可能较大,生产应用应限制日志中 Base64 和素材内容的输出。

官方参考:OpenAI Images 响应结构,排错入口:常见错误与迁移。