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": ""
},
"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 |
imageSize 与 aspectRatio 可以自由组合,例如 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 内放 text 与 inlineData |
generationConfig.responseModalities |
array | 否 | 建议传 ["IMAGE"] |
generationConfig.imageConfig.imageSize |
string | 否 | 512 / 1K / 2K / 4K |
generationConfig.imageConfig.aspectRatio |
string | 否 | 见上方 14 种取值 |
注意事项
- 超时设置:高分辨率出图耗时较长,建议客户端 HTTP 超时设为 ≥ 600 秒。
- 图片提取方式因端点而异:chat 端点从
message.content的 Markdown data URI 中提取;原生端点从parts[].inlineData.data提取(纯 base64,无前缀)。 - 参考图格式:chat 端点用带
data:前缀的完整 data URI;原生端点用不带前缀的纯 base64。两者规则相反,不要写混。 - 不支持 Anthropic 格式:Gemini 图片模型不支持
/v1/messages。 - 模型权限:请确认 API Key 有权访问对应图片模型。