通义千问-图像编辑 (qwen-image-edit) 模型只需传入一张图片和一句指令,即可完成IP创作、文字替换、风格迁移、人物换装等复杂编辑任务。
模型概览
效果示例
原图 | 把背景改成草原 | 给它戴上红色帽子和黑色墨镜 | 改成梵高油画风格 |
原图 | 把“霓裳汉服社”改成“通义实验室” | 把 "活动全程免费" 改为 “只给学生打折” | 把女人改成穿汉服的男人 |
模型与价格
模型名称 | 计费单价 | 限流(主账号与RAM子账号共用) | 免费额度(查看) | |
任务下发接口RPS限制 | 同时处理中任务数量 | |||
qwen-image-edit | 0.3元/张 | 2 | 2 | 100张 |
快速开始
前提条件
在调用前,您需要开通模型服务并获取API Key,再配置API Key到环境变量。
然后安装DashScope SDK。目前,该SDK已支持Python和Java。
示例代码
Python
请求示例
import json
import os
from dashscope import MultiModalConversation
messages = [
{
"role": "user",
"content": [
{"image": "https://dashscope.oss-cn-beijing.aliyuncs.com/images/dog_and_girl.jpeg"},
{"text": "将图中的人物改为站立姿势,弯腰握住狗的前爪"}
]
}
]
# 若没有配置环境变量,请用百炼API Key将下行替换为:api_key="sk-xxx"
api_key = os.getenv("DASHSCOPE_API_KEY")
response = MultiModalConversation.call(
api_key=api_key,
model="qwen-image-edit",
messages=messages,
result_format='message',
stream=False,
watermark=True,
negative_prompt=""
)
if response.status_code == 200:
print(json.dumps(response, ensure_ascii=False))
else:
print(f"HTTP返回码:{response.status_code}")
print(f"错误码:{response.code}")
print(f"错误信息:{response.message}")
print("请参考文档:https://help.aliyun.com/zh/model-studio/developer-reference/error-code")
响应示例
图像链接的有效期为24小时,请及时下载图像。
{
"status_code": 200,
"request_id": "3daccb10-10ca-9399-8b6a-xxxxxx",
"code": "",
"message": "",
"output": {
"text": null,
"finish_reason": null,
"choices": [
{
"finish_reason": "stop",
"message": {
"role": "assistant",
"content": [
{
"image": "https://dashscope-result-sz.oss-cn-shenzhen.aliyuncs.com/xxx.png?Expires=xxx"
}
]
}
}
]
},
"usage": {
"input_tokens": 0,
"output_tokens": 0,
"width": 1248,
"image_count": 1,
"height": 832
}
}
Java
请求示例
import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversation;
import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversationParam;
import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversationResult;
import com.alibaba.dashscope.common.MultiModalMessage;
import com.alibaba.dashscope.common.Role;
import com.alibaba.dashscope.exception.ApiException;
import com.alibaba.dashscope.exception.NoApiKeyException;
import com.alibaba.dashscope.exception.UploadFileException;
import com.alibaba.dashscope.utils.JsonUtils;
import java.io.IOException;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
public class QwenImageEdit {
// 若没有配置环境变量,请用百炼API Key将下行替换为:apiKey="sk-xxx"
static String apiKey = System.getenv("DASHSCOPE_API_KEY");
public static void call() throws ApiException, NoApiKeyException, UploadFileException, IOException {
MultiModalConversation conv = new MultiModalConversation();
MultiModalMessage userMessage = MultiModalMessage.builder().role(Role.USER.getValue())
.content(Arrays.asList(
Collections.singletonMap("image", "https://dashscope.oss-cn-beijing.aliyuncs.com/images/dog_and_girl.jpeg"),
Collections.singletonMap("text", "将图中的人物改为站立姿势,弯腰握住狗的前爪")
)).build();
Map<String, Object> parameters = new HashMap<>();
parameters.put("watermark", true);
parameters.put("negative_prompt", "");
MultiModalConversationParam param = MultiModalConversationParam.builder()
.apiKey(apiKey)
.model("qwen-image-edit")
.messages(Collections.singletonList(userMessage))
.parameters(parameters)
.build();
MultiModalConversationResult result = conv.call(param);
System.out.println(JsonUtils.toJson(result));
}
public static void main(String[] args) {
try {
call();
} catch (ApiException | NoApiKeyException | UploadFileException | IOException e) {
System.out.println(e.getMessage());
}
System.exit(0);
}
}
响应示例
image的链接有效期为24小时,请及时下载图像。
{
"requestId": "9e59e2da-28b0-9468-b356-5d2beea8a477",
"usage": {},
"output": {
"choices": [
{
"finish_reason": "stop",
"message": {
"role": "assistant",
"content": [
{
"image": "https://dashscope-result-sz.oss-cn-shenzhen.aliyuncs.com/xxx.png?Expires=xxxx"
}
]
}
}
]
}
}
curl
请求示例
curl --location 'https://dashscope.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation' \
--header 'Content-Type: application/json' \
--header "Authorization: Bearer $DASHSCOPE_API_KEY" \
--data '{
"model": "qwen-image-edit",
"input": {
"messages": [
{
"role": "user",
"content": [
{
"image": "https://dashscope.oss-cn-beijing.aliyuncs.com/images/dog_and_girl.jpeg"
},
{
"text": "将图中的人物改为站立姿势,弯腰握住狗的前爪"
}
]
}
]
},
"parameters": {
"negative_prompt": "",
"watermark": false
}
}'
响应示例
image的链接有效期为24小时,请及时下载图像。
{
"output": {
"choices": [
{
"finish_reason": "stop",
"message": {
"role": "assistant",
"content": [
{
"image": "https://dashscope-result-sz.oss-cn-shenzhen.aliyuncs.com/xxx.png?Expires=xxx"
}
]
}
}
]
},
"usage": {
"width": 1248,
"image_count": 1,
"height": 832
},
"request_id": "bf37ca26-0abe-98e4-8065-xxxxxx"
}
使用场景
IP创作
输入图像 | 效果示例 | |||
这只熊拿着五彩画板和画笔,站在画板前画画 | 这只熊站在白色背景前,手里拿着锅铲,旁边有蔬菜和调料 | 这只熊坐在地上,怀里抱着一把吉他,手指拨动琴弦 | 这只熊穿着燕尾服,戴着魔术帽,手里拿着魔术棒,做出表演魔术的动作 | |
这只熊穿着运动服,手里拿着篮球,单腿弯曲 | 这只熊戴着草帽,手里拿着花洒和小铲子,正在浇水或种植植物 | 这只熊穿着宇航服,伸出手指向远方 | 这只熊穿着华丽的舞裙,双臂展开,做出优雅的舞蹈动作 |
文字编辑
输入图像 | 输出图像 | 输入图像 | 输出图像 |
将拼字游戏方块上'HEALTH INSURANCE’ 替换为'明天会更好' | 将便条上的短语“Take a Breather”更改为“Relax and Recharge” |
增删改及替换
能力 | 输入图像 | 输出图像 |
新增元素 | 在企鹅前方添加一个小型木制标牌,上面写着“Welcome to Penguin Beach”。 | |
删除元素 | 删除餐盘上的头发 | |
替换元素 | 把桃子变成苹果 | |
颜色修改 | 将字母 'n' 的颜色修改为蓝色 | |
人像修改 | 让她闭上眼睛 | |
姿态修改 | 将图中的人物改为站立姿势,弯腰握住狗的前爪 |
视角转换
输入图像 | 输出图像 | 输入图像 | 输出图像 |
获得正视视角 | 朝向左侧 | ||
获得后侧视角 | 朝向右侧 |
背景替换
输入图像 | 输出图像 | |
将背景更改为海滩 | 将原图背景替换为真实的现代教室场景,背景中央为一块深绿色或墨黑色的传统黑板,黑板表面用白色粉笔工整地写着中文“通义千问” |
虚拟穿搭
输入图像 | 输出图像 | |
戴上一顶卡其色贝雷帽 | 用浅蓝色衬衫替换圆点衬衫 |
老照片处理
能力 | 输入图像 | 输出图像 |
老照片修复及上色 | 修复老照片,去除划痕,降低噪点,增强细节,高分辨率,画面真实,肤色自然,面部特征清晰,无变形,复古照片修复。 |
输入说明
入参结构(messages)
图像编辑的输入是一个结构化的 messages 数组。因此,需要在一个 content 列表中同时提供 image 和 text 两个部分。
目前API仅支持单轮编辑,不支持多轮对话,即messages数只能有一个content,且content只能包含一组 image 和 text。
"messages": [
{
"role": "user",
"content": [
{ "image": "您的图片公网URL或Base64数据" },
{ "text": "您的编辑指令,例如:'移除背景中的树'" }
]
}
]
图像输入方式
目前通过两种方式提供待编辑的图像:
公网URL:公开可访问的 http/https 链接。本地文件请参见上传文件获取临时URL。
Base64编码:将本地图片文件编码为Base64字符串。
图像Base64编码传值方式
参数值格式为 data:{MIME_type};base64,{base64_data}
。
{MIME_type}:图像的媒体类型,需与文件格式对应。
{base64_data}:图像文件经过 Base64 编码后的完整数据字符串。
图像格式与MIME 类型对应关系:
图像格式
MIME Type
JPEG
image/jpeg
JPG
image/jpeg
PNG
image/png
BMP
image/bmp
WEBP
image/webp
示例值:
"image": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABDg......"
。注意:为便于展示,上述 Base64 字符串是截断的。在实际使用中,请务必传入完整的编码字符串。
示例代码:获取图像Base64编码字符串。完整调用代码请参见Python SDK调用、Java SDK调用。
import base64 import mimetypes # ---用于 Base64 编码 --- # 格式为 data:{MIME_type};base64,{base64_data} def encode_file(file_path): mime_type, _ = mimetypes.guess_type(file_path) if not mime_type or not mime_type.startswith("image/"): raise ValueError("不支持或无法识别的图像格式") with open(file_path, "rb") as image_file: encoded_string = base64.b64encode(image_file.read()).decode('utf-8') return f"data:{mime_type};base64,{encoded_string}" if __name__ == "__main__": # 需要使用真实的文件路径,否则会报错 print(encode_file("./image_demo_input.png"))
计费与限流
计费规则
计费项:按成功生成的 图像张数 计费,采用按量后付费模式。
计费公式:费用 = 计费单价 × 图像张数。
抵扣顺序:优先消耗免费额度。额度用尽后,默认转为按量付费。
您可开启“免费额度用完即停”功能,以避免免费额度耗尽后产生额外费用。详情请参见免费额度。
失败不计费:模型调用失败或处理错误不产生任何费用,也不消耗免费额度。
免费额度
关于免费额度的领取、查询、使用方法等详情,请参见免费额度。
调用量查询
模型调用完约一小时后,请在模型观测页面,查看调用量、调用次数、成功率等指标。
限流
模型限流规则及常见问题,请参见限流。
API参考
API的输入输出参数,请参见通义千问-图像编辑。
错误码
如果模型调用失败并返回报错信息,请参见错误信息进行解决。