图像生成与编辑
通过 UniGateway 生成和编辑图片:gpt-image-2 使用 OpenAI 兼容的 Images API,Nano Banana 系列使用 Gemini generateContent。
快速参考
| 任务 | 模型 ID | 接口 | Content-Type |
|---|---|---|---|
| 文生图 | gpt-image-2 | POST /v1/images/generations | application/json |
| 多图生成 | gpt-image-2 | POST /v1/images/generations | application/json |
| 流式生成 | gpt-image-2 | POST /v1/images/generations + stream:true | application/json |
| 编辑 / 合成 / 重绘 | gpt-image-2 | POST /v1/images/edits | multipart/form-data |
| Gemini 文生图 | gemini-3-pro-image-preview 或 gemini-3.1-flash-image-preview | POST /v1beta/models/{model}:generateContent | application/json |
| Gemini 图生图 | 同上,parts[] 中增加 inline_data | 同上 | application/json |
Base URL:Images API 为 https://api.unigateway.ai/v1;Gemini 为 https://api.unigateway.ai。
展示名(如 Nano Banana Pro、Nano Banana 2)是产品昵称。模型库 展示可请求的模型 ID。请使用
GET /v1/models返回的精确id。
认证方式:Authorization: Bearer $UNIGATEWAY_API_KEY
前置条件
- 已获取 UniGateway API Key,保存在
UNIGATEWAY_API_KEY中 - 已通过
GET /v1/models确认目标模型可用
gpt-image-2
文生图
curl -sS -X POST "https://api.unigateway.ai/v1/images/generations" \
-H "Authorization: Bearer $UNIGATEWAY_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-image-2",
"prompt": "A clean product hero image for an AI gateway dashboard, dark background, soft blue lighting."
}' > response.json
Python
from openai import OpenAI; import base64
client = OpenAI(api_key="<YOUR_UNIGATEWAY_API_KEY>", base_url="https://api.unigateway.ai/v1")
result = client.images.generate(model="gpt-image-2", prompt="A clean product hero image.")
with open("out.png", "wb") as f: f.write(base64.b64decode(result.data[0].b64_json))
TypeScript
import OpenAI from "openai"; import fs from "fs";
const client = new OpenAI({ apiKey: process.env.UNIGATEWAY_API_KEY, baseURL: "https://api.unigateway.ai/v1" });
const r = await client.images.generate({ model: "gpt-image-2", prompt: "A clean product hero image." });
fs.writeFileSync("out.png", Buffer.from(r.data[0].b64_json, "base64"));
多图生成
curl -sS -X POST "https://api.unigateway.ai/v1/images/generations" \
-H "Authorization: Bearer $UNIGATEWAY_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-image-2", "prompt": "Four icons: chat, image, video, search.",
"n": 4, "size": "1024x1024", "quality": "medium", "output_format": "png"
}' > batch.json
参数
| 参数 | 必填 | 取值 | 说明 |
|---|---|---|---|
model | 是 | gpt-image-2 | |
prompt | 是 | 文本 | |
size | 否 | 1024x1024、1536x1024、2048x2048、auto 等 | W×H,16 的倍数,最大 3840,比例 ≤ 3:1 |
quality | 否 | low / medium / high / auto | 默认 auto |
n | 否 | 1–10 | 生成图片数量,多图时返回 data[] 数组;使用 use_url 时最多返回 1 个 URL |
output_format | 否 | png / jpeg / webp | 默认 png |
output_compression | 否 | 0–100 | 仅 jpeg / webp 有效,压缩质量百分比,整数值 |
background | 否 | opaque / auto | |
moderation | 否 | auto / low | |
stream | 否 | true | SSE 流式 |
partial_images | 否 | 0–3 | 流式中间图片数 |
user | 否 | string | 终端用户标识 |
use_url | 否 | true | 返回图片 URL 而非 base64;仅返回 1 张图(n 会被忽略) |
流式生成
curl -sS -X POST "https://api.unigateway.ai/v1/images/generations" \
-H "Authorization: Bearer $UNIGATEWAY_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-image-2", "prompt": "A winter landscape.",
"stream": true, "partial_images": 2
}'
保存返回
jq -r '.data[0].b64_json' response.json | base64 -D > output.png # macOS
jq -r '.data[0].b64_json' response.json | base64 --decode > output.png # Linux
编辑 / 合成 / 重绘
均使用 POST /v1/images/edits,multipart/form-data 格式。
单图编辑 — image[] 传入原图:
curl -sS -X POST "https://api.unigateway.ai/v1/images/edits" \
-H "Authorization: Bearer $UNIGATEWAY_API_KEY" \
-F "model=gpt-image-2" -F "image[]=@room.png" \
-F "prompt=将沙发改为米白色,其余保持不变。" \
-F "quality=high" -F "size=1024x1024" -F "output_format=png" > edit.json
多参考图合成 — 多个 image[]:
curl -sS -X POST "https://api.unigateway.ai/v1/images/edits" \
-H "Authorization: Bearer $UNIGATEWAY_API_KEY" \
-F "model=gpt-image-2" \
-F "image[]=@item1.png" -F "image[]=@item2.png" -F "image[]=@item3.png" \
-F "prompt=将全部物品合成一张白底产品照。" \
-F "quality=high" -F "output_format=png" > composite.json
局部重绘 — mask + image[]:
curl -sS -X POST "https://api.unigateway.ai/v1/images/edits" \
-H "Authorization: Bearer $UNIGATEWAY_API_KEY" \
-F "model=gpt-image-2" -F "mask=@mask.png" -F "image[]=@src.png" \
-F "prompt=在 mask 区域画一只粉色火烈鸟游泳圈。" > inpaint.json
Mask 要求:与源图尺寸一致、格式相同、≤ 50 MB、含 alpha 通道。
响应格式
{ "created": 1710000000, "data": [{ "b64_json": "..." }] }
Nano Banana(Gemini 图片模型)
文生图和图生图均使用 POST /v1beta/models/{model}:generateContent。图片通过 parts[] 中的 inline_data 传入。
| 模型 | API 模型 ID | 适用 |
|---|---|---|
| Nano Banana Pro | gemini-3-pro-image-preview | 最高质量、复杂指令、文字渲染、4K |
| Nano Banana 2 | gemini-3.1-flash-image-preview | 速度优先、高并发、通用 |
文生图
curl -sS -X POST "https://api.unigateway.ai/v1beta/models/gemini-3-pro-image-preview:generateContent" \
-H "Authorization: Bearer $UNIGATEWAY_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"contents": [{ "parts": [{ "text": "你的提示词。" }] }],
"generationConfig": {
"responseModalities": ["TEXT", "IMAGE"],
"imageConfig": { "aspectRatio": "16:9", "imageSize": "4K" }
}
}'
将模型换成 gemini-3.1-flash-image-preview 即为 Nano Banana 2。
图生图(编辑 / 变换)
B64=$(base64 -i input.png 2>/dev/null || base64 -w0 input.png)
curl -sS -X POST "https://api.unigateway.ai/v1beta/models/gemini-3-pro-image-preview:generateContent" \
-H "Authorization: Bearer $UNIGATEWAY_API_KEY" \
-H "Content-Type: application/json" \
-d "{
\"contents\": [{ \"parts\": [
{\"text\": \"你的编辑指令。\"},
{\"inline_data\": {\"mime_type\": \"image/png\", \"data\": \"${B64}\"}}
]}],
\"generationConfig\": {
\"responseModalities\": [\"TEXT\", \"IMAGE\"],
\"imageConfig\": { \"aspectRatio\": \"16:9\", \"imageSize\": \"4K\" }
}
}"
多张图片:在 parts[] 中继续添加 inline_data 块。
图片尺寸控制
| 字段 | 取值 | 说明 |
|---|---|---|
imageConfig.aspectRatio | 1:1、4:3、3:4、16:9、9:16 | Pro 还支持 2:3、3:2、4:5、5:4、21:9 |
imageConfig.imageSize | 1K、2K、4K | Pro 最高 4K;Flash 最高 4K |
保存返回
jq -r 'first(..|objects|select(.inlineData?.data)|.inlineData.data)' result.json | base64 -D > out.png # macOS
jq -r 'first(..|objects|select(.inlineData?.data)|.inlineData.data)' result.json | base64 --decode > out.png # Linux
响应格式
{
"candidates": [{
"content": {
"parts": [
{ "text": "Here is the generated image." },
{ "inlineData": { "mimeType": "image/png", "data": "..." } }
]
}
}]
}
使用建议
- 需要 Images API、SDK 集成或
multipart/form-data编辑流程时,使用gpt-image-2。 - 需要最高质量 Gemini 输出时,使用 Nano Banana Pro;需要速度和并发时,使用 Nano Banana 2。
- Gemini 模型的文生图和图生图使用同一接口。
- 生产环境将解码后的图片上传到自有对象存储。
常见错误
| 状态码 | 原因 | 处理 |
|---|---|---|
400 | 参数错误或格式不支持 | 检查 prompt、size、mask |
401 | API Key 无效 | 检查 Authorization 请求头 |
404 | 模型不可用 | 通过 GET /v1/models 确认 |
429 | 触发限流 | 退避重试 |
5xx | 服务异常 | 指数退避 |
| — | output_compression 传布尔值(如 true) | 应为 0–100 整数,且仅在 jpeg/webp 下有效 |
| — | 使用 use_url 时设置 n > 1 | use_url 仅返回 1 张图,n 会被忽略;多图请用默认 base64 返回 |
| — | output_compression 在 png 格式下使用 | png 不支持压缩参数,请换用 jpeg/webp |