图像编辑

接口概述

基于输入图片和编辑指令,实现图像编辑能力:支持修改图中文字、增删或移动物体、改变主体动作、迁移图片风格、多图融合。采用 DashScope 多模态生成协议,请求体为 input + parameters 嵌套结构。

按张计费(输出 n 张即 n 倍单价),本次费用可在控制台「费用中心」查看。

接口地址

POST https://ai.jw-info.com/v1/images/edits

请求头

请求头是否必填说明
Content-Typeapplication/json
AuthorizationBearer {API_KEY},或 x-api-key

请求参数

参数名类型是否必填说明
modelstring模型名称,见「可用模型」
inputobject输入信息
input.messagesarray消息数组(仅支持单轮,数组内有且仅有 1 个元素)
input.messages[].rolestring消息角色,固定为 user
input.messages[].contentarray消息内容数组,包含 1–3 个图片元素和 1 个文本元素
input.messages[].content[].imagestring条件必填输入图片的 URL 或 Base64 编码,支持 1–3 张,单张不超过 10MB
input.messages[].content[].textstring条件必填编辑指令,描述期望的编辑效果;支持中英文,上限 800–1300 token(视模型而定)
parametersobject生成参数
parameters.sizestring输出图片分辨率,格式 宽*高;部分模型不支持自定义
parameters.ninteger输出图片数量:基础版固定 1 张,增强版 1–6 张,默认 1
parameters.negative_promptstring反向提示词,描述不希望出现的内容,不超过 500 字符
parameters.prompt_extendboolean是否开启 Prompt 智能改写,默认 true;部分模型不支持
parameters.watermarkboolean是否添加水印,默认 false
parameters.seedinteger随机种子,取值 [0, 2147483647]

简写形式(可选)

除嵌套体之外,也可以把常用字段直接放在顶层,接口会按上表结构处理,两种写法等价、选一种即可:

简写参数对应字段
promptinput.messages[0].content[].text
imageinput.messages[0].content[].image(字符串或数组,1–3 张)
sizeparameters.size(写 宽x高宽*高 均可)
n / negative_prompt / prompt_extend / watermark / seedparameters 下的同名字段

模型差异

特性qwen-image-editqwen-image-edit-plusqwen-image-edit-max
输出图片数固定 1 张1–6 张1–6 张
自定义分辨率不支持支持,宽高 512–2048支持,宽高 512–2048
Prompt 智能改写不支持支持支持
指令 token 上限8008001300
定位基础编辑、多图融合多图输出、自定义分辨率工业设计、几何推理、角色一致性更强

分辨率说明

适用于支持自定义分辨率的模型(qwen-image-edit-plus / qwen-image-edit-max):

  • 宽和高的取值范围均为 [512, 2048] 像素;
  • 默认接近 1024*1024,宽高比与输入图相近;
  • 指定 size 时会调整为最接近的 16 的倍数;
  • 输出图像格式为 PNG。

推荐分辨率:

宽高比推荐分辨率
1:11024*1024、1536*1536
2:3768*1152、1024*1536
3:21152*768、1536*1024
3:4960*1280、1080*1440
4:31280*960、1440*1080
9:16720*1280、1080*1920
16:91280*720、1920*1080

请求示例

单图编辑:

{
  "model": "qwen-image-edit-plus",
  "input": {
    "messages": [{
      "role": "user",
      "content": [
        {"image": "https://example.com/photo.jpg"},
        {"text": "将背景改为星空,保持主体不变"}
      ]
    }]
  }
}

多图融合:

{
  "model": "qwen-image-edit-max",
  "input": {
    "messages": [{
      "role": "user",
      "content": [
        {"image": "https://example.com/city.jpg"},
        {"image": "https://example.com/cartoon.png"},
        {"text": "使用图一的城市照片作为底图,将图二的卡通形象融入城市场景中"}
      ]
    }]
  },
  "parameters": {"n": 2, "prompt_extend": true}
}

完整请求(含参数):

{
  "model": "qwen-image-edit-plus",
  "input": {
    "messages": [{
      "role": "user",
      "content": [
        {"image": "https://example.com/photo.jpg"},
        {"text": "在画面右下角添加一行文字「Hello World」,字体为行楷风格"}
      ]
    }]
  },
  "parameters": {
    "size": "1024*1024",
    "n": 1,
    "negative_prompt": "低分辨率,模糊,变形",
    "prompt_extend": true,
    "watermark": false,
    "seed": 12345
  }
}

Base64 输入方式(data:image/<格式>;base64, 前缀 + 编码内容):

{
  "model": "qwen-image-edit",
  "input": {
    "messages": [{
      "role": "user",
      "content": [
        {"image": "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEASABIAAD..."},
        {"text": "将图片风格转为油画"}
      ]
    }]
  }
}

简写形式(等价写法,字段直接放顶层):

{
  "model": "qwen-image-edit-plus",
  "prompt": "把第二张图的椅子放进第一张图的客厅里",
  "image": ["https://example.com/room.png", "https://example.com/chair.png"],
  "n": 2
}

响应参数

参数类型说明
outputobject输出信息
output.choicesarray生成结果列表(每张图一个元素)
output.choices[].finish_reasonstring停止原因,固定为 stop
output.choices[].message.rolestring消息角色,固定为 assistant
output.choices[].message.contentarray消息内容数组
output.choices[].message.content[].imagestring编辑后的图片下载 URL(有效期 24 小时,PNG 格式)
usage.image_countinteger生成图片数量
usage.width / usage.heightinteger图片宽度 / 高度(像素)
sizestring图片实际尺寸
request_idstring请求唯一标识

图片地址有效期以服务返回为准(通常 24 小时),请及时转存;平台不落盘存储文件。

响应示例

编辑成功(单图):

{
  "output": {
    "choices": [{
      "finish_reason": "stop",
      "message": {
        "role": "assistant",
        "content": [{"image": "https://example.com/edited.png"}]
      }
    }]
  },
  "usage": {"image_count": 1, "width": 1024, "height": 1024},
  "size": "1024*1024",
  "request_id": "a1b2c3d4-e5f6-7890-abcd-1234567890ab"
}

多图输出:

{
  "output": {
    "choices": [{
      "finish_reason": "stop",
      "message": {
        "role": "assistant",
        "content": [
          {"image": "https://example.com/edited-1.png"},
          {"image": "https://example.com/edited-2.png"}
        ]
      }
    }]
  },
  "usage": {"image_count": 2, "width": 1024, "height": 1024},
  "size": "1024*1024",
  "request_id": "b2c3d4e5-f6a7-8901-bcde-1234567890ac"
}

错误响应

参数校验不通过时返回参数错误;模型侧报错时接口以 502 返回,detail 里带上模型给出的原始错误正文,便于对照定位。完整状态码与排查建议见「错误码」页。

参数校验错误:

{
  "error": {
    "message": "model is required",
    "type": "invalid_request_error",
    "code": "invalid_request_error"
  }
}

模型服务返回的错误(形态随模型侧实现而异,常见两种):

{
  "error": {
    "message": "Invalid API-key provided.",
    "type": "invalid_request_error",
    "code": "InvalidApiKey"
  }
}
{
  "request_id": "31f808fd-8eef-9004-xxxxx",
  "code": "InvalidApiKey",
  "message": "Invalid API-key provided."
}

调用失败记 0 费用,但仍会在控制台留一条失败记录。

代码示例

cURL · 单图编辑:

curl -X POST https://ai.jw-info.com/v1/images/edits \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer sk-你的密钥" \
  -d '{
    "model": "qwen-image-edit-plus",
    "input": {
      "messages": [{
        "role": "user",
        "content": [
          {"image": "https://example.com/photo.jpg"},
          {"text": "将背景改为星空,保持主体不变"}
        ]
      }]
    },
    "parameters": {
      "size": "1024*1024",
      "n": 1
    }
  }'

cURL · 多图融合:

curl -X POST https://ai.jw-info.com/v1/images/edits \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer sk-你的密钥" \
  -d '{
    "model": "qwen-image-edit-max",
    "input": {
      "messages": [{
        "role": "user",
        "content": [
          {"image": "https://example.com/city.jpg"},
          {"image": "https://example.com/cartoon.png"},
          {"text": "将卡通形象融入城市场景中"}
        ]
      }]
    },
    "parameters": {
      "n": 1,
      "prompt_extend": true
    }
  }'

Python:

import requests

BASE = "https://ai.jw-info.com"
API_KEY = "sk-你的密钥"

payload = {
    "model": "qwen-image-edit-plus",
    "input": {
        "messages": [{
            "role": "user",
            "content": [
                {"image": "https://example.com/photo.jpg"},
                {"text": "将背景改为星空,保持主体不变"}
            ]
        }]
    },
    "parameters": {
        "size": "1024*1024",
        "n": 1,
        "negative_prompt": "低分辨率,模糊,变形",
        "prompt_extend": True,
        "watermark": False
    }
}

headers = {
    "Content-Type": "application/json",
    "Authorization": f"Bearer {API_KEY}"
}

response = requests.post(f"{BASE}/v1/images/edits", json=payload, headers=headers)
result = response.json()

if response.status_code == 200:
    for choice in result["output"]["choices"]:
        for content in choice["message"]["content"]:
            print("图片 URL:", content["image"])
    print("尺寸:", result.get("size"))
    print("用量:", result["usage"])
else:
    print("请求失败:", result.get("detail") or result.get("error", {}).get("message", result))

Java(OkHttp):

import okhttp3.*;
import com.fasterxml.jackson.databind.ObjectMapper;

public class ImageEditExample {
    private static final String BASE = "https://ai.jw-info.com";
    private static final String API_KEY = "sk-你的密钥";
    private static final OkHttpClient CLIENT = new OkHttpClient();
    private static final ObjectMapper MAPPER = new ObjectMapper();

    public static void main(String[] args) throws Exception {
        String json = """
            {
              "model": "qwen-image-edit-plus",
              "input": {
                "messages": [{
                  "role": "user",
                  "content": [
                    {"image": "https://example.com/photo.jpg"},
                    {"text": "将背景改为星空,保持主体不变"}
                  ]
                }]
              },
              "parameters": {
                "size": "1024*1024",
                "n": 1
              }
            }
            """;

        RequestBody body = RequestBody.create(json, MediaType.parse("application/json"));

        Request request = new Request.Builder()
                .url(BASE + "/v1/images/edits")
                .addHeader("Authorization", "Bearer " + API_KEY)
                .post(body)
                .build();

        try (Response response = CLIENT.newCall(request).execute()) {
            String responseBody = response.body().string();
            var result = MAPPER.readTree(responseBody);

            if (response.isSuccessful()) {
                for (var choice : result.get("output").get("choices")) {
                    for (var content : choice.get("message").get("content")) {
                        System.out.println("图片 URL: " + content.get("image").asText());
                    }
                }
                System.out.println("尺寸: " + result.get("size").asText());
            } else {
                System.out.println("请求失败: " + result);
            }
        }
    }
}

可用模型

模型 ID输出数量分辨率定位
qwen-image-edit固定 1 张默认基础编辑、多图融合
qwen-image-edit-plus1–6 张512–2048 可调多图输出、自定义分辨率
qwen-image-edit-max1–6 张512–2048 可调工业设计、几何推理、角色一致性更强

完整模型清单与价格见控制台「模型广场」。

在模型广场查看支持「图像编辑」的模型 →