切换主题
图像结果解析
同步返回体解析目标
优先从下面路径中寻找图片数据:
text
candidates[*].content.parts[*].inlineData同步返回核心规则
- 先检查
mimeType是否以image/开头 - 读取
inlineData.data - 如果
data以http开头,视为图片 URL - 否则视为 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
异步任务结果解析
异步生图通常不是在首次提交响应里直接回图,而是:
POST /v1beta/models/{model}:generateContent其中output=url可来自 query 或请求体- 从
202 Accepted响应中拿到id - 轮询
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