Gemini 图片生成

概述

AIone 支持 Gemini 系列图片生成模型,可以通过两个端点调用:

端点 适用场景 能力
POST /v1/chat/completions 快速接入,沿用现有 OpenAI SDK 生成图片、图生图、流式
POST /v1beta/models/{model}:generateContent 需要指定分辨率或宽高比 上述全部 + 分辨率 / 宽高比控制

简单来说:只要出图,用 /v1/chat/completions;要控制尺寸,用 /v1beta 原生端点。

可用模型

模型 特点
gemini-3.1-flash-image 主力模型,速度与质量兼顾
gemini-3-pro-image 画面质量更稳定,适合成品图
gemini-2.5-flash-image 上一代 Flash,仅默认尺寸

完整模型清单以 GET /v1/models 和 Portal 模型列表页为准。


一、快速出图:/v1/chat/completions

最简请求:

curl https://api.aiin1.ai/v1/chat/completions \
  -H "Authorization: Bearer sk-nex-your-key-here" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "gemini-3.1-flash-image",
    "messages": [
      {"role": "user", "content": "画一只可爱的猫咪"}
    ]
  }'

返回结构

图片以 Markdown 内嵌的 data URI 形式放在 message.content 里:

{
  "id": "chatcmpl-xxx",
  "object": "chat.completion",
  "model": "gemini-3.1-flash-image",
  "choices": [
    {
      "index": 0,
      "message": {
        "role": "assistant",
        "content": "![image](data:image/png;base64,iVBORw0KGgoAAA...)"
      },
      "finish_reason": "stop"
    }
  ],
  "usage": {
    "prompt_tokens": 6,
    "completion_tokens": 1120,
    "total_tokens": 1126
  }
}

提取图片message.content 是字符串,用正则取出 data URI 即可。

import re, base64
content = response.choices[0].message.content
m = re.search(r"data:image/\w+;base64,([A-Za-z0-9+/=]+)", content)
if m:
    image_bytes = base64.b64decode(m.group(1))
    open("out.png", "wb").write(image_bytes)

Python SDK

from openai import OpenAI
 
client = OpenAI(
    api_key="sk-nex-your-key-here",
    base_url="https://api.aiin1.ai/v1",
)
 
resp = client.chat.completions.create(
    model="gemini-3.1-flash-image",
    messages=[{"role": "user", "content": "画一只可爱的猫咪"}],
)
print(resp.choices[0].message.content[:80])

图生图

用 OpenAI 标准的多模态 content 数组传参考图:

{
  "model": "gemini-3.1-flash-image",
  "messages": [
    {
      "role": "user",
      "content": [
        {"type": "text", "text": "把图里的苹果换成橙子"},
        {
          "type": "image_url",
          "image_url": {"url": "data:image/png;base64,iVBORw0KGgoAAA..."}
        }
      ]
    }
  ]
}

参考图支持 data: URI(base64)和 https:// 公网 URL 两种写法。推荐 base64:部分 CDN 存在防盗链或格式转换,直链可能取不到。

流式

支持 "stream": true。这是伪流式——图片生成完毕后一次性通过 SSE 事件下发,不是逐 token 推送。好处是长连接期间有数据往返,不容易被中间网络设备按空闲断开。

curl https://api.aiin1.ai/v1/chat/completions \
  -H "Authorization: Bearer sk-nex-your-key-here" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "gemini-3.1-flash-image",
    "messages": [{"role": "user", "content": "画一只可爱的猫咪"}],
    "stream": true
  }'

这个端点的尺寸

/v1/chat/completions 出图使用模型的默认尺寸,约 1408×768(图生图时跟随参考图,如方图参考图得到 1024×1024)。

需要指定分辨率或宽高比,请使用下面的原生端点。


二、控制分辨率与宽高比:/v1beta 原生端点

POST https://api.aiin1.ai/v1beta/models/{model}:generateContent

模型名写在 URL 路径里,尺寸参数放在 generationConfig.imageConfig

curl https://api.aiin1.ai/v1beta/models/gemini-3.1-flash-image:generateContent \
  -H "Authorization: Bearer sk-nex-your-key-here" \
  -H "Content-Type: application/json" \
  -d '{
    "contents": [
      {"role": "user", "parts": [{"text": "画一只可爱的猫咪"}]}
    ],
    "generationConfig": {
      "responseModalities": ["IMAGE"],
      "imageConfig": {
        "imageSize": "4K",
        "aspectRatio": "16:9"
      }
    }
  }'

imageSize — 分辨率档位

取值 512 / 1K(默认)/ 2K / 4K。以 16:9 为例的实际像素:

imageSize 实际像素(16:9) 像素量
不传(默认 1K) 1376×768 1.06 MP
"2K" 2752×1536 4.23 MP
"4K" 5504×3072 16.9 MP
"512" 688×384 0.26 MP

gemini-2.5-flash-image 只输出默认尺寸(1024×1024),不响应 imageSize

aspectRatio — 宽高比

支持 14 种。以默认档位(1K)为例的实际像素:

宽高比 像素 宽高比 像素
1:1 1024×1024 9:16 768×1376
3:2 1264×848 16:9 1376×768
2:3 848×1264 21:9 1584×672
4:3 1200×896 1:4 512×2064
3:4 896×1200 4:1 2064×512
5:4 1152×928 1:8 352×2928
4:5 928×1152 8:1 2928×352

imageSizeaspectRatio 可以自由组合,例如 4K + 21:9 得到超宽幅高清图。

模型按所选档位与比例的原生分辨率出图,实际像素以返回图片为准。

返回结构

图片在 candidates[0].content.parts[]inlineData 里,data不带前缀的纯 base64

{
  "candidates": [
    {
      "content": {
        "parts": [
          {
            "inlineData": {
              "mimeType": "image/png",
              "data": "iVBORw0KGgoAAA..."
            }
          }
        ]
      },
      "finishReason": "STOP"
    }
  ],
  "usageMetadata": {
    "promptTokenCount": 6,
    "candidatesTokenCount": 1120,
    "totalTokenCount": 1126,
    "candidatesTokensDetails": [{"modality": "IMAGE", "tokenCount": 1120}]
  }
}
import base64, json, requests
 
resp = requests.post(
    "https://api.aiin1.ai/v1beta/models/gemini-3.1-flash-image:generateContent",
    headers={"Authorization": "Bearer sk-nex-your-key-here"},
    json={
        "contents": [{"role": "user", "parts": [{"text": "画一只可爱的猫咪"}]}],
        "generationConfig": {
            "responseModalities": ["IMAGE"],
            "imageConfig": {"imageSize": "2K", "aspectRatio": "16:9"},
        },
    },
    timeout=600,
)
for part in resp.json()["candidates"][0]["content"]["parts"]:
    if "inlineData" in part:
        open("out.png", "wb").write(base64.b64decode(part["inlineData"]["data"]))

parts 中可能出现 thoughtSignature 等非图片条目,遍历时按 inlineData 是否存在来判断即可。

图生图(原生端点)

把参考图作为 inlineData 放进 parts,与文字描述并列。data纯 base64,不带 data:image/png;base64, 前缀

{
  "contents": [
    {
      "role": "user",
      "parts": [
        {"inlineData": {"mimeType": "image/png", "data": "iVBORw0KGgoAAA..."}},
        {"text": "把图里的苹果换成橙子"}
      ]
    }
  ],
  "generationConfig": {
    "responseModalities": ["IMAGE"],
    "imageConfig": {"aspectRatio": "1:1"}
  }
}

放多个 inlineData 即可做多图融合。


计费说明

图片输出按图片输出 token 计费,token 数由分辨率档位决定,与提示词长短无关:

档位 gemini-3.1-flash-image gemini-3-pro-image
512 747
默认 / 1K 1,120 1,120
2K 1,680 1,120
4K 2,520 2,000

gemini-2.5-flash-image 每张 1,290 token。

图片部分的 token 数按上表计;响应中的 usage.completion_tokens(chat 端点)与 usageMetadata.candidatesTokenCount(原生端点)是本次输出的 token 总数,除图片外可能包含少量文本 token,两部分按各自费率计价。具体单价见「定价说明」。

通用请求参数

/v1/chat/completions

参数 类型 必填 说明
model string 图片模型 ID
messages array 标准 OpenAI Chat 消息数组,参考图用 image_url 部件传入
stream boolean 伪流式,生成完毕后一次性 SSE 下发
temperature number 生成温度

/v1beta/models/{model}:generateContent

参数 类型 必填 说明
contents array 对话内容,parts 内放 textinlineData
generationConfig.responseModalities array 建议传 ["IMAGE"]
generationConfig.imageConfig.imageSize string 512 / 1K / 2K / 4K
generationConfig.imageConfig.aspectRatio string 见上方 14 种取值

注意事项

  1. 超时设置:高分辨率出图耗时较长,建议客户端 HTTP 超时设为 ≥ 600 秒。
  2. 图片提取方式因端点而异:chat 端点从 message.content 的 Markdown data URI 中提取;原生端点从 parts[].inlineData.data 提取(纯 base64,无前缀)。
  3. 参考图格式:chat 端点用带 data: 前缀的完整 data URI;原生端点用不带前缀的纯 base64。两者规则相反,不要写混。
  4. 不支持 Anthropic 格式:Gemini 图片模型不支持 /v1/messages
  5. 模型权限:请确认 API Key 有权访问对应图片模型。