图生图 (image edit)
七牛云 AI 大模型推理 API 支持图生图(Image-to-Image)功能,兼容 OpenAI Images Edit API 接口格式,支持基于输入图像和文本描述生成新的图像,方便您集成到各种图像编辑和创意应用场景中。
Token API 接入点
七牛云 AI 大模型推理 API 接入域名:
- 主接入点:
https://api.qnaigc.com/v1 - 备接入点:
https://openai.qiniu.com/v1 - 使用前提:获取 API KEY(API 密钥)
支持接口列表
| 接口名 | 说明 |
|---|---|
| /images/edits | 图生图接口,根据输入图像和文本描述生成新的图像 支持模型:Gemini 2.5 Flash Image 等 输出格式:Base64 编码的图像数据 (PNG 格式) |
支持的模型列表
| 模型 ID | 模型名称 | 说明 | 状态 |
|---|---|---|---|
| gemini-2.5-flash-image | Gemini 2.5 Flash Image (Nano Banana) | 又称 Nano Banana,谷歌最新的快速图像模型,支持高质量的图像编辑、风格转换和内容修改 | ✅已推出 |
| kling-v2 | kling v2 | 图生图 V2.0 模型 | ✅已推出 |
HTTP 调用示例
基础图像编辑
使用上一步获取的七牛云 API KEY 调用图生图接口:
# 调用图生图 API
export OPENAI_BASE_URL="https://api.qnaigc.com/v1"
export OPENAI_API_KEY="<七牛云 AI API KEY>"
curl "$OPENAI_BASE_URL/images/edits" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $OPENAI_API_KEY" \
-d '{
"model": "gemini-2.5-flash-image",
"image": "data:image/png;base64,iVBORw0KGgo...",
"prompt": "将图片中的猫改成白色,背景改为蓝天白云"
}'
使用图片 URL
# 使用图片 URL 进行图生图
export OPENAI_BASE_URL="https://api.qnaigc.com/v1"
export OPENAI_API_KEY="<七牛云 AI API KEY>"
curl "$OPENAI_BASE_URL/images/edits" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $OPENAI_API_KEY" \
-d '{
"model": "gemini-2.5-flash-image",
"image": "https://example.com/sample-image.jpg",
"prompt": "为这个场景添加日落效果,让整体色调更温暖"
}'
生成多张图像
# 批量生成多张编辑结果
export OPENAI_BASE_URL="https://api.qnaigc.com/v1"
export OPENAI_API_KEY="<七牛云 AI API KEY>"
curl "$OPENAI_BASE_URL/images/edits" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $OPENAI_API_KEY" \
-d '{
"model": "gemini-2.5-flash-image",
"image": "data:image/png;base64,iVBORw0KGgo...",
"prompt": "将这张照片转换为水彩画风格",
"n": 4
}'
使用多张输入图像
# 使用多张图像作为输入
export OPENAI_BASE_URL="https://api.qnaigc.com/v1"
export OPENAI_API_KEY="<七牛云 AI API KEY>"
curl "$OPENAI_BASE_URL/images/edits" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $OPENAI_API_KEY" \
-d '{
"model": "gemini-2.5-flash-image",
"image": [
"data:image/png;base64,iVBORw0KGgo...",
"https://example.com/reference-image.jpg"
],
"prompt": "结合这两张图片的风格,生成一张新的艺术作品"
}'
使用Kling模型
# kling 模型使用多张图像作为输入
export OPENAI_BASE_URL="https://api.qnaigc.com/v1"
export OPENAI_API_KEY="<七牛云 AI API KEY>"
curl "$OPENAI_BASE_URL/images/edits" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $OPENAI_API_KEY" \
-d '{
"model": "kling-v2",
"image": "",
"prompt": "综合两个图像画一个漫画图",
"subject_image_list":[
{
"subject_image":"https://aitoken-image.qnaigc.com/1383010xxx/image-1761793032508597404-1383010xxx/0.png?e=1763089082&token=IDB69r4gicDbMfrecarthgw1btTTWEFNg9i5_yasXqhp:JapC2EihLvSADMficht3pZVn5Xc="
},
{
"subject_image":"https://aitoken-image.qnaigc.com/1383010xxx/image-1761793032508597404-1383010xxx/0.png?e=1763089082&token=IDB69r4gicDbMfrecarthgw1btTTWEFNg9i5_yasXqhp:JapC2EihLvSADMficht3pZVn5Xc="
}
]
}'
请求参数说明
Header 参数
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| Authorization | string | 是 | API Key,格式:Bearer YOUR_API_KEY |
| Content-Type | string | 是 | 请求内容类型,固定值:application/json |
Body 参数 (JSON)
| 参数名 | 类型 | 必填 | 默认值 | 说明 | 模型支持 |
|---|---|---|---|---|---|
| model | string | 是 | - | 图像生成模型名称,如 gemini-2.5-flash-image |
- |
| image | string 或 array | 是 | - | 输入图像,支持以下格式: - Base64 data URI(如 data:image/png;base64,...)- 图片 URL(如 https://example.com/image.jpg)- 数组形式的多张图片 |
- |
| prompt | string | 是 | - | 图像编辑的文本描述提示词 | - |
| n | integer | 否 | 1 | 生成图像数量,取值范围:1-10 | - |
| size | string | 否 | - | 图像尺寸 | 暂不支持 |
| mask | string | 否 | - | 遮罩图像 URL 或 Base64 data URI,用于指定编辑区域 | - |
| quality | string | 否 | - | 图像质量,可选值:standard(标准质量)、hd(高清质量) |
暂不支持 |
| background | string | 否 | - | 背景处理方式,可选值:transparent(透明)、opaque(不透明)、auto(自动) |
暂不支持 |
| input_fidelity | string | 否 | - | 输入图像保真度,可选值:high(高保真)、low(低保真) |
暂不支持 |
| output_format | string | 否 | png | 输出格式,可选值:png、jpeg、webp |
暂不支持 |
| output_compression | integer | 否 | - | 输出压缩质量,取值范围:0-100(仅适用于 webp/jpeg 格式) | 暂不支持 |
| response_format | string | 否 | b64_json | 响应格式,可选值:b64_json(Base64 编码)、url(图片 URL) |
暂不支持 |
| stream | boolean | 否 | false | 是否启用流式响应 | 暂不支持 |
| subject_image_list | array | 否 | - | 图生图的参考图片列表 | 仅限kling模型 |
| > subject_image_list.subject_image | string | 否 | - | 图生图的参考图片,内容为可公开访问的 url 链接 | 仅限kling模型 |
| scene_image | sting | 否 | - | 场景参考图,内容为可公开访问的 url 链接 | 仅限kling模型 |
| style_image | sting | 否 | - | 风格参考图,内容为可公开访问的 url 链接 | 仅限kling模型 |
| aspect_ratio | sting | 否 | “16:9” | 生成图片的画面纵横比(宽:高) | 仅限kling模型 |
参数详细说明
model
- 必填参数
- 指定使用的图像编辑模型
- 不同模型支持的参数和功能可能有所不同
- 示例:
gemini-2.5-flash-image
image
- 必填参数
- 输入图像,支持多种格式:
- Base64 data URI:使用
data:image/png;base64,前缀 + Base64 编码的图像数据 - 图片 URL:可访问的公网图片链接,如
https://example.com/image.jpg - 数组形式:支持传入多张图片,格式为
["url1", "url2"]或混合 data URI 和 URL
- Base64 data URI:使用
- 建议使用高质量的输入图像以获得更好的编辑效果
prompt
- 必填参数
- 图像编辑的文本描述提示词
- 建议:
- 清晰描述期望的编辑效果
- 包含风格、色彩、构图等具体细节
- 使用逗号分隔不同的描述要素
- 示例:
"将图片中的天空改为日落时分的橙红色,增加温暖的氛围""将照片转换为油画风格,保持主体不变,增强色彩饱和度""移除背景中的杂物,让背景变得简洁干净"
n
- 可选参数,默认值为 1
- 控制一次请求生成的图像数量
- 取值范围:1-10
- 注意:生成多张图片会消耗更多 tokens
size
- 可选参数
- 指定生成图像的尺寸,格式为
宽x高
quality
- 可选参数
- 控制图像生成质量
- 可选值:
standard:标准质量hd:高清质量
background
- 可选参数
- 控制背景处理方式
- 可选值:
transparent:生成透明背景opaque:生成不透明背景auto:自动决定
input_fidelity
- 可选参数
- 控制对输入图像的保真程度
- 可选值:
high:高保真,生成的图像更接近原始输入low:低保真,允许更大的创意改动
mask
- 可选参数
- 遮罩图像,用于指定只编辑图像的特定区域
- 支持格式:
- Base64 data URI:
data:image/png;base64,... - 图片 URL:
https://example.com/mask.png
- Base64 data URI:
- 遮罩图像规则:
- 黑色 (#000000) 区域:保持原图不变
- 白色 (#FFFFFF) 区域:应用编辑效果
- 灰色区域:部分应用编辑效果
output_format
- 可选参数,默认为
png - 指定输出图像的格式
- 可选值:
png:PNG 格式,支持透明背景,文件较大jpeg:JPEG 格式,文件较小,不支持透明背景webp:WebP 格式,平衡质量和文件大小
output_compression
- 可选参数
- 输出图像的压缩质量
- 取值范围:0-100
- 0:最低质量,最小文件
- 100:最高质量,最大文件
- 仅适用于
webp和jpeg格式 - 不适用于
png格式
response_format
- 可选参数,默认为
b64_json - 指定响应中图像数据的格式
- 可选值:
b64_json:返回 Base64 编码的图像数据 (推荐)url:返回图片 URL(需模型支持)
stream
- 可选参数,默认为
false - 是否启用流式响应
- 部分模型支持流式返回中间结果
subject_image_list
- 最多支持4张图片,最少支持1张图片
subject_image_list.subject_image
- 图片格式支持.jpg / .jpeg / .png
- 图片文件大小不能超过10MB,图片宽高尺寸不小于300px,图片宽高比要在1:2.5 ~ 2.5:1之间
scene_image
场景参考图
- 图片格式支持.jpg / .jpeg / .png
- 图片文件大小不能超过10MB,图片宽高尺寸不小于300px,图片宽高比要在1:2.5 ~ 2.5:1之间
style_image
- 图片格式支持.jpg / .jpeg / .png
- 图片文件大小不能超过10MB,图片宽高尺寸不小于300px,图片宽高比要在1:2.5 ~ 2.5:1之间
aspect_ratio
- 枚举值:16:9, 9:16, 1:1, 4:3, 3:4, 3:2, 2:3, 21:9
响应格式
成功响应
使用 Gemini 2.5 Flash Image 系列模型返回格式如下:
{
"created": 1234567890,
"data": [
{
"b64_json": "iVBORw0KGgoAAAANSUhEUgA..."
},
{
"b64_json": "iVBORw0KGgoAAAANSUhEUgB..."
}
],
"output_format": "png",
"usage": {
"total_tokens": 6234,
"input_tokens": 1234,
"output_tokens": 5000,
"input_tokens_details": {
"text_tokens": 234,
"image_tokens": 1000
}
}
}
使用 kling 系列模型返回格式如下:
{
"task_id": "image-1762159125266058362-1383010xxx"
}
响应参数说明
| 字段名 | 类型 | 说明 |
|---|---|---|
| created | integer | 响应创建时间戳 (Unix 时间戳,秒) |
| data | array | 生成的图像数据数组 |
| data[].b64_json | string | Base64 编码的图像数据 |
| size | string | 图像尺寸 |
| output_format | string | 输出格式,默认为 png |
| usage | object | Token 使用统计信息 |
| usage.total_tokens | integer | 总 token 数 |
| usage.input_tokens | integer | 输入 token 数 (包括文本和图像) |
| usage.output_tokens | integer | 输出 token 数 (图像生成消耗) |
| usage.input_tokens_details | object | 输入 token 详情 |
| usage.input_tokens_details.text_tokens | integer | 文本提示词消耗的 token 数 |
| usage.input_tokens_details.image_tokens | integer | 输入图像消耗的 token 数 |
| task_id | string | 目前为 kling 系列模型独有的返回结果,task_id 为 kling 模型异步生成图像的任务 ID |
如何使用返回的图像数据
响应中的 b64_json 字段包含 Base64 编码的图像数据,可通过以下方式使用:
1. 在 HTML 中直接显示
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgA..." />
使用场景示例
场景 1:风格转换
将普通照片转换为艺术风格:
curl "$OPENAI_BASE_URL/images/edits" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $OPENAI_API_KEY" \
-d '{
"model": "gemini-2.5-flash-image",
"image": "https://example.com/photo.jpg",
"prompt": "将这张照片转换为印象派油画风格,使用莫奈的色彩表现手法",
}'
场景 2:背景替换
更换图片背景:
curl "$OPENAI_BASE_URL/images/edits" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $OPENAI_API_KEY" \
-d '{
"model": "gemini-2.5-flash-image",
"image": "https://example.com/person.jpg",
"prompt": "保持人物不变,将背景替换为海滩日落场景",
}'
场景 3:图像增强
提升图像质量:
curl "$OPENAI_BASE_URL/images/edits" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $OPENAI_API_KEY" \
-d '{
"model": "gemini-2.5-flash-image",
"image": "https://example.com/low-quality.jpg",
"prompt": "提升图像清晰度,增强色彩饱和度和对比度,去除噪点"
}'
场景 4:局部编辑 (使用遮罩)
只编辑图像的特定区域:
curl "$OPENAI_BASE_URL/images/edits" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $OPENAI_API_KEY" \
-d '{
"model": "gemini-2.5-flash-image",
"image": "https://example.com/room.jpg",
"mask": "https://example.com/room-mask.png",
"prompt": "将墙壁改成深蓝色",
}'
查询异步生成图像任务状态
该接口使用方式同文生图文档中的
查询异步生成图像任务状态接口。
| 接口名 | 说明 |
|---|---|
| /v1/images/tasks/:task_id | kling 生成图像异步任务独有的状态查询接口, 用于查询生成图像异步任务的当前状态以及最终生成的图像结果。 |
参数说明:
| 参数名称 | 参数类型 | 是否必填 | 参数描述 |
|---|---|---|---|
| task_id | string | 是 | 生成图像异步任务 ID,在使用 kling 系列模型调用 /images/generations 接口的结果生成 请求路径参数,直接将值填写在请求路径中 |
使用示例可以参考如下,假设你已经使用 /images/edits 接口使用 kling 模型请求发起了一个生成图像异步任务,任务 ID 是 image-1762159125266058362-1383010xxx。
# 调用查询异步生成图像任务状态
export OPENAI_BASE_URL="https://api.qnaigc.com/v1"
export OPENAI_API_KEY="<七牛云 AI API KEY>"
curl "$OPENAI_BASE_URL/v1/images/tasks/image-1762159125266058362-1383010xxx" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $OPENAI_API_KEY"
成功响应示例如下:
{
"task_id": "image-1762159125266058362-1383010xxx",
"created": 1761793032,
"status": "succeed",
"status_message": "成功",
"data": [
{
"index": 0,
"url": "https://aitoken-image.qnaigc.com/1383010xxx/image-1761793032508597404-1383010xxx/0.png?e=1763089082&token=IDB69r4gicDbMfrecarthgw1btTTWEFNg9i5_yasXqhp:JapC2EihLvSADMficht3pZVn5Xc="
}
],
"quantity": 1
}
上述示例响应字段说明
| 字段名 | 类型 | 说明 |
|---|---|---|
| task_id | string | 图像生成任务的唯一标识符 |
| created | integer | 表示任务创建时间的 Unix 时间戳 |
| status | string | 任务的当前状态(例如:succeed 成功,更多看如下状态码细节) |
| status_message | string | 描述当前状态的消息,例如在 succeed 状态时,这个字段信息描述是 成功 |
| data | array | |
| data[].index | integer | 图像在生成序列中的索引 |
| data[].url | string | 访问生成图像文件的可直接访问 URL |
| quantity | integer | 此任务中生成的图像数量,同时该数量会用于计量计算 |
status 字段可能的取值包括:
- submitted:任务已接收,等待处理
- processing:任务正在处理中
- succeed:任务成功完成,图像已生成并可访问
- failed:任务在处理过程中失败
常见问题
Q: 图生图和文生图有什么区别?
A: 文生图 (/images/generations) 是纯粹根据文本描述生成全新的图像;图生图 (/images/edits) 则是基于输入的图像进行编辑和改造,可以保留原图的部分特征。
Q: 支持哪些输入图像格式?
A: 支持常见的图像格式,包括 PNG、JPEG、WebP 等。可以通过 Base64 data URI 或公网可访问的图片 URL 提供输入图像。
Q: 如何控制生成结果更接近原图?
A: 可以使用 input_fidelity: "high" 参数来提高对原图的保真度,生成的图像会更接近输入图像。
Q: 如何处理多张输入图像?
A: 将 image 参数设置为数组格式,如 ["url1", "url2"],模型会结合多张输入图像的特征进行编辑。
Q: 如何将生成的图像保存到七牛云对象存储?
A: 推荐使用七牛对象存储来存储生成的图像。我们提供了多种语言的上传 SDK,简单易用,欢迎查看我们的【SDK 中心】来了解。更多对象存储信息欢迎参考对象存储的【产品使用文档】。
Q: 遮罩图像 (mask) 应该如何制作?
A: 遮罩图像应该是黑白图像:
- 白色区域 (#FFFFFF):表示需要编辑的区域
- 黑色区域 (#000000):表示保持不变的区域
- 灰色区域:会部分应用编辑效果
您可以使用 Photoshop、GIMP 等图像编辑软件创建遮罩图像。