Skip to content

图像结果解析

同步返回体解析目标

优先从下面路径中寻找图片数据:

text
candidates[*].content.parts[*].inlineData

同步返回核心规则

  1. 先检查 mimeType 是否以 image/ 开头
  2. 读取 inlineData.data
  3. 如果 datahttp 开头,视为图片 URL
  4. 否则视为 base64 内容,按 mimeType 解码

伪代码

python
for candidate in response["candidates"]:
    for part in candidate["content"]["parts"]:
        inline_data = part.get("inlineData")
        if not inline_data:
            continue
        mime_type = inline_data.get("mimeType", "")
        data = inline_data.get("data", "")
        if mime_type.startswith("image/"):
            if data.startswith("http"):
                return {"type": "url", "value": data, "mimeType": mime_type}
            return {"type": "base64", "value": data, "mimeType": mime_type}

推荐做法

  • URL 结果直接下载并转存到自有存储
  • base64 结果及时写盘或转对象存储,不要长时间驻留内存
  • 解析时保留 mimeType

异步任务结果解析

异步生图通常不是在首次提交响应里直接回图,而是:

  1. POST /v1beta/models/{model}:generateContent 其中 output=url 可来自 query 或请求体
  2. 202 Accepted 响应中拿到 id
  3. 轮询 GET /v1/tasks/{id}

任务成功后,结果位于同一条路径:

text
candidates[*].content.parts[*].inlineData.data

不同点在于这里的 data 预期就是图片 URL,而不是 base64。

如果使用 POST /v1/tasks/batch-get,返回体中的 items[*] 仍然沿用单任务任务详情的字段风格; 也就是说,成功项里的图片结果仍旧从同一路径提取:

text
items[*].candidates[*].content.parts[*].inlineData.data

异步任务成功响应示例

json
{
  "id": "img_abcd1234",
  "object": "image.task",
  "model": "gemini-3-pro-image-preview",
  "created_at": 1742486400,
  "finished_at": 1742486412,
  "status": "succeeded",
  "response_id": "resp_123",
  "candidates": [
    {
      "content": {
        "parts": [
          {
            "text": "已根据提示词生成图片。"
          },
          {
            "inlineData": {
              "mimeType": "image/png",
              "data": "https://cdn.example.com/generated/demo.png"
            }
          }
        ]
      },
      "finishReason": "STOP"
    }
  ]
}

直接取最终图片

如果你只想拿首张图片,可以直接访问:

text
GET /v1/tasks/{id}/content
  • 任务成功时返回 302 Found
  • Location 指向第一张图片 URL
  • 任务未完成时返回 409 task_not_ready

相关页面

以 VitePress 构建,由 Cloudflare Pages 发布