编辑图像
POST
/v1/images/edits/
根据原始图像和提示词创建编辑或扩展图像。原生 OpenAI 格式使用 multipart/form-data 上传文件;具体模型和渠道支持的字段可能不同。
请求参数
请求头
Authorization
使用 Bearer Token 认证。
格式: Authorization: Bearer sk-xxxxxx
请求体使用 multipart/form-data。网关会转发未识别的表单字段,因此同一请求可以携带模型所需的兼容参数。
表单字段
表单字段(8 个)
| 参数 | 类型 | 默认值 | 说明 | 是否必填 |
|---|---|---|---|---|
image | file | — | 要编辑的图像。必须是有效的 PNG、小于 4 MB 且为正方形;未提供遮罩时,图像必须具有透明区域。 | 是 |
mask | file | — | 遮罩图像。完全透明区域表示要编辑的位置;必须与原始图像尺寸相同。 | 否 |
prompt | string | — | 所需编辑结果的文本描述,最大长度为 1000 个字符。 | 是 |
n | string | 未声明 | 要生成的图像数量,必须介于 1 和 10 之间。 | 否 |
size | string | 未声明 | 生成图像的尺寸,具体取值由模型决定。 | 否 |
response_format | string | 未声明 | 生成图像的返回格式,必须为 url 或 b64_json。 | 否 |
user | string | 未声明 | 最终用户的唯一标识符。 | 否 |
model | string | 未声明 | 图像模型 ID,例如 dall-e-2;实际可用模型由网关和上游渠道决定。 | 否 |
请求示例代码
curl -X POST "https://10000router.com/v1/images/edits/" \
-H "Authorization: Bearer $API_KEY" \
-F "image=@input.png" \
-F "mask=@mask.png" \
-F "prompt=把背景改成蓝天" \
-F "model=dall-e-2" \
-F "n=1" \
-F "size=1024x1024" \
-F "response_format=url" \
-F "user=user_123"
const form = new FormData();
form.append("image", document.querySelector("#image").files[0]);
form.append("prompt", "把背景改成蓝天");
form.append("model", "dall-e-2");
form.append("size", "1024x1024");
form.append("response_format", "url");
const response = await fetch("https://10000router.com/v1/images/edits/", {
method: "POST",
headers: { Authorization: "Bearer " + process.env.API_KEY },
body: form
});
const imageResponse = await response.json();
import os
from openai import OpenAI
client = OpenAI(api_key=os.environ["API_KEY"], base_url="https://10000router.com/v1")
with open("input.png", "rb") as image_file, open("mask.png", "rb") as mask_file:
response = client.post(
"https://10000router.com/v1/images/edits/",
headers={"Authorization": "Bearer " + os.environ["API_KEY"]},
files={"image": image_file, "mask": mask_file},
data={
"prompt": "把背景改成蓝天",
"model": "dall-e-2",
"size": "1024x1024",
"response_format": "url",
},
)
response.raise_for_status()
print(response)
file, _ := os.Open("input.png")
defer file.Close()
body := &bytes.Buffer{}
writer := multipart.NewWriter(body)
part, _ := writer.CreateFormFile("image", "input.png")
io.Copy(part, file)
writer.WriteField("prompt", "把背景改成蓝天")
writer.WriteField("model", "dall-e-2")
writer.WriteField("response_format", "url")
writer.Close()
req, _ := http.NewRequest("POST", "https://10000router.com/v1/images/edits/", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("API_KEY"))
req.Header.Set("Content-Type", writer.FormDataContentType())
var request = java.net.http.HttpRequest.newBuilder(java.net.URI.create("https://10000router.com/v1/images/edits/"))
.header("Authorization", "Bearer " + System.getenv("API_KEY"))
.header("Content-Type", "multipart/form-data")
.POST(java.net.http.HttpRequest.BodyPublishers.ofFile(java.nio.file.Path.of("input.png"))).build();
var response = java.net.http.HttpClient.newHttpClient().send(request, java.net.http.HttpResponse.BodyHandlers.ofString());
using var client = new HttpClient();
client.DefaultRequestHeaders.Authorization = new("Bearer", Environment.GetEnvironmentVariable("API_KEY"));
using var form = new MultipartFormDataContent();
form.Add(new StreamContent(File.OpenRead("input.png")), "image", "input.png");
form.Add(new StringContent("把背景改成蓝天"), "prompt");
form.Add(new StringContent("dall-e-2"), "model");
var response = await client.PostAsync("https://10000router.com/v1/images/edits/", form);
Console.WriteLine(await response.Content.ReadAsStringAsync());
返回响应
编辑接口返回的 JSON 结构与生成接口一致。
响应示例
{
"created": 1710000000,
"data": [
{
"url": "https://example.com/edited-image.png",
"revised_prompt": "把背景改成蓝天"
}
]
}
{
"error": {
"message": "image is required",
"type": "invalid_request_error",
"param": "image",
"code": null
}
}
{
"error": {
"message": "Rate limit reached",
"type": "rate_limit_exceeded",
"param": null,
"code": null
}
}
{
"error": {
"message": "Invalid authentication credentials",
"type": "invalid_request_error",
"param": null,
"code": null
}
}
返回字段参数
顶层字段(3 个)
| 字段 | 类型 | 说明 |
|---|---|---|
created | integer | 响应创建时间,Unix 时间戳(秒)。 |
data | array<object> | 编辑后图像数组,数量由 n 决定。 |
usage | object | 部分图像模型返回的 token 用量;不保证所有渠道都提供。 |
data[] 字段(3 个)
| 字段 | 类型 | 说明 |
|---|---|---|
url | string | 编辑后图像的临时 URL。 |
b64_json | string | Base64 编码的图像数据;请求 response_format=b64_json 且上游支持时出现。 |
revised_prompt | string | 上游改写后的提示词;部分模型不返回。 |
流式响应
当请求携带 stream=true 且模型/渠道支持时,响应为 Server-Sent Events,常见事件类型为 image_edit.completed,最后以 data: [DONE] 结束。