图像生成与编辑 API
本文按集成顺序说明如何调用 NextAI Code 的图片生成和图片编辑能力。
1. 选择协议
如果不确定选哪种,使用 OpenAI Images 兼容协议。它适合大多数应用,也可以直接复用 OpenAI SDK。
三种协议的使用场景:
- OpenAI Images 兼容协议:统一调用 OpenAI、Gemini/Nano Banana、Imagen 图片模型。
- Gemini 官方协议:已有 Gemini
generateContent代码时使用。 - Imagen 官方协议:已有 Imagen
predict代码时使用。
所有请求都使用同一个 API Key:
Authorization: Bearer YOUR_API_KEY
API Key 可在 令牌管理页面 创建。不要把真实 Key 写进前端代码、截图、日志或代码仓库。
2. 查询模型
模型会持续更新,请以模型列表接口返回为准。
curl "https://www.nextai-code.com/v1/models" \
-H "Authorization: Bearer YOUR_API_KEY"
常见模型族:
- OpenAI 图片模型:
gpt-image-1、gpt-image-2、chatgpt-image-latest、dall-e-3 - Gemini / Nano Banana:
gemini-2.5-flash-image、gemini-3.1-flash-image、gemini-3-pro-image-preview、nano-banana-2、nano-banana-pro - Imagen:
imagen-4.0-generate-001、imagen-4.0-ultra-generate-001、imagen-4.0-fast-generate-001
3. OpenAI 兼容调用
文生图请求:
curl -X POST "https://www.nextai-code.com/v1/images/generations" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-image-2",
"prompt": "A premium product photo of a handmade bath gift basket, soft natural light, clean background",
"size": "1024x1024",
"n": 1,
"response_format": "b64_json"
}'
改图请求:
curl -X POST "https://www.nextai-code.com/v1/images/edits" \
-H "Authorization: Bearer YOUR_API_KEY" \
-F "model=gpt-image-2" \
-F "image[]=@body-lotion.png" \
-F "image[]=@bath-bomb.png" \
-F "image[]=@incense-kit.png" \
-F "image[]=@soap.png" \
-F "prompt=Create a new product photo of a lovely gift basket containing these four items. Do not return a copy of any reference image." \
-F "size=1024x1024" \
-F "n=1" \
-F "response_format=b64_json"
使用 multipart 时不要手写 Content-Type boundary。用 curl -F、SDK 或标准 multipart 库生成请求体。
Python SDK 示例:
from openai import OpenAI
import base64
from pathlib import Path
client = OpenAI(
api_key="YOUR_API_KEY",
base_url="https://www.nextai-code.com/v1",
)
result = client.images.generate(
model="gpt-image-2",
prompt="A premium product photo of a handmade bath gift basket",
size="1024x1024",
n=1,
response_format="b64_json",
)
Path("image.png").write_bytes(base64.b64decode(result.data[0].b64_json))
OpenAI 兼容响应:
{
"created": 1734567890,
"data": [
{
"b64_json": "BASE64_IMAGE_DATA",
"url": "",
"revised_prompt": ""
}
]
}
如果请求 n > 1,请遍历 data[] 保存所有返回图片,不要只读取 data[0]。
jq -r '.data[].b64_json' response.json | nl -v 1 | while read -r i img; do
printf "%s" "$img" | base64 --decode > "image-$i.png"
done
4. Gemini 官方调用
文生图请求:
curl -X POST "https://www.nextai-code.com/v1beta/models/gemini-3.1-flash-image:generateContent" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"contents": [
{
"role": "user",
"parts": [
{"text": "Generate a premium product photo of a handmade bath gift basket"}
]
}
],
"generationConfig": {
"responseModalities": ["TEXT", "IMAGE"],
"candidateCount": 1,
"imageConfig": {
"aspectRatio": "1:1",
"imageSize": "1K"
}
}
}'
改图请求:
IMAGE_BASE64="$(base64 < reference.png | tr -d '\n')"
curl -X POST "https://www.nextai-code.com/v1beta/models/gemini-3.1-flash-image:generateContent" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d "{
\"contents\": [
{
\"role\": \"user\",
\"parts\": [
{
\"inlineData\": {
\"mimeType\": \"image/png\",
\"data\": \"$IMAGE_BASE64\"
}
},
{
\"text\": \"Use this reference and create a new gift basket product photo\"
}
]
}
],
\"generationConfig\": {
\"responseModalities\": [\"TEXT\", \"IMAGE\"],
\"candidateCount\": 1,
\"imageConfig\": {
\"aspectRatio\": \"1:1\",
\"imageSize\": \"1K\"
}
}
}"
返回图片在 candidates[].content.parts[] 中。找到包含 inlineData.data 的 part 后,将 base64 解码保存。
5. Imagen 官方调用
curl -X POST "https://www.nextai-code.com/v1beta/models/imagen-4.0-generate-001:predict" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"instances": [
{
"prompt": "A premium product photo of a handmade bath gift basket"
}
],
"parameters": {
"sampleCount": 1,
"aspectRatio": "1:1",
"personGeneration": "allow_adult"
}
}'
常用字段:
instances[].prompt:提示词。parameters.sampleCount:输出图片数量,Google 官方常见范围为 1 到 4。parameters.aspectRatio:宽高比,例如1:1、3:4、4:3、9:16、16:9。parameters.imageSize:图片尺寸语义,按具体模型支持情况使用。parameters.personGeneration:人物生成策略,例如allow_adult。
6. 参数规则
image[] 和 n 不一样。
image[]是输入图数量,常用于上传多张参考图。n是输出图数量,控制返回的data[]数量。
例如上传 4 张商品图并传 n=2,含义是“用这 4 张图作为参考,输出 2 张结果图”。
size 按模型族理解。
- OpenAI 图片模型建议使用
1024x1024、1536x1024、1024x1536。 - Gemini / Imagen 更偏向
1:1、16:9、9:16、3:2、2:3、4:3、3:4。 - Gemini / Imagen 可以接收常见像素格式,并转换为对应宽高比。
Gemini 走 OpenAI 兼容协议时,不要传这些 OpenAI 专属参数。
response_format=urlstream=truepartial_imagesstyleinput_fidelitymaskbackground=transparentmoderation非autooutput_format=jpeg或output_format=webpoutput_compressionwatermark=false
把风格、背景、编辑要求写进 prompt,不要依赖 Gemini 不支持的 OpenAI 专属字段。
7. 常见问题
- 为什么返回 400:请求体格式错误,请检查 multipart/form-data?
-
这是请求体解析错误,通常还没有调用上游模型。请确认文件路径存在,多图字段使用
image[],并使用curl -F或标准 multipart 库生成请求体。不要手写 boundary,也不要在代理或中间件里读取 multipart body 后不复原。
- 为什么出现 multipart: NextPart: EOF?
-
通常是 multipart 请求体不完整,或请求体被重复读取。请检查客户端、代理、中间件是否提前消费了请求体。
- 为什么改图结果像参考图,没有重新生成?
-
image[]只表示参考输入,不会自动保证重组生成。请在 prompt 中明确写出要生成一张新图,例如:Create a new product photo using these reference items. Do not return a copy of any reference image.
- Gemini 返回没有图片怎么办?
-
检查
candidates[].content.parts[]是否包含inlineData。如果没有,可能是模型只返回文本,或被安全策略过滤。请降低敏感、版权、人物限制相关描述。
- 一次请求可以生成多张图片吗?
-
可以。OpenAI 兼容协议使用
n,Gemini 官方协议使用generationConfig.candidateCount,Imagen 官方协议使用parameters.sampleCount。最终数量以上游实际返回为准,客户端必须遍历返回数组。