Edite imagens com instruções de texto usando os modelos Wan. Oferece suporte a entrada e saída de múltiplas imagens, fusão de imagens, preservação de sujeito e detecção de objetos.
Primeiros passos
Gere uma imagem editada a partir de duas imagens de entrada e um prompt de texto com wan2.7-image-pro.
Prompt: Aplique o grafite da imagem 2 sobre o carro da imagem 1
|
Imagem de entrada 1 |
Imagem de entrada 2 |
Imagem de saída (wan2.7-image-pro) |
|
|
|
|
Antes de fazer uma chamada, obtenha uma chave de API e exporte a chave de API como uma variável de ambiente. Para realizar chamadas usando o SDK, instale o DashScope SDK.
Chamada síncrona
Certifique-se de que a versão do DashScope Python SDK seja 1.25.15 ou posterior, e a versão do DashScope Java SDK seja 2.22.13 ou posterior.
Python
Exemplo de solicitação
import os
import base64
import mimetypes
import urllib.request
import dashscope
from dashscope.aigc.image_generation import ImageGeneration
from dashscope.api_entities.dashscope_response import Message
# The following base_url is for the Singapore region. Replace {WorkspaceId} with your Bailian workspace ID. The base_url varies by region.
dashscope.base_http_api_url = "https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1"
# If you have not configured environment variables, replace the following line with your Model Studio API key: api_key="sk-xxx"
# The API key varies by region. To obtain an API key, visit: https://www.alibabacloud.com/help/en/model-studio/get-api-key
api_key = os.getenv("DASHSCOPE_API_KEY")
# --- Base64 encoding function ---
# The Base64 encoding format is 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("Unsupported or unrecognized image format")
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}"
"""
Image input methods:
The following are three methods for image input. You need to choose only one.
1. Use a public URL: This method is suitable for publicly accessible images.
2. Use a local file: This method is suitable for local development and testing.
3. Use Base64 encoding: This method is suitable for private images or scenarios that require encrypted transmission.
"""
# [Method 1] Use a public image URL
image_1 = "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20251229/pjeqdf/car.webp"
image_2 = "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20251229/xsunlm/paint.webp"
# [Method 2] Use a local file (supports absolute and relative paths)
# image_1 = "file:///path/to/your/car.png"
# image_2 = "file:///path/to/your/paint.png"
# [Method 3] Use a Base64-encoded image
# image_1 = encode_file("/path/to/your/car.png")
# image_2 = encode_file("/path/to/your/paint.png")
message = Message(
role="user",
content=[
{"text": "Spray the graffiti from image 2 onto the car in image 1"},
{"image": image_1},
{"image": image_2},
],
)
print("----sync call, please wait a moment----")
rsp = ImageGeneration.call(
model="wan2.7-image-pro",
api_key=api_key,
messages=[message],
watermark=False,
n=1,
size="2K", # wan2.7-image-pro supports 4K resolution only for text-to-image generation. Image editing and multi-image generation support up to 2K resolution.
)
# Extract the result image URL and save the image to a local file.
if rsp.status_code == 200:
for i, choice in enumerate(rsp.output.choices):
for j, content in enumerate(choice["message"]["content"]):
if content.get("type") == "image":
image_url = content["image"]
file_name = f"output_{i}_{j}.png"
# The result URL is valid for 24 hours. Please download it promptly.
urllib.request.urlretrieve(image_url, file_name)
print(f"Image saved to {file_name}")
else:
print(f"Failed: status_code={rsp.status_code}, message={rsp.message}")
Exemplo de resposta
A URL é válida por 24 horas. Baixe a imagem prontamente.
{
"status_code": 200,
"request_id": "81d868c6-6ce1-92d8-a90d-d2ee71xxxxxx",
"code": "",
"message": "",
"output": {
"text": null,
"finish_reason": null,
"choices": [
{
"finish_reason": "stop",
"message": {
"role": "assistant",
"content": [
{
"image": "https://dashscope-result-bj.oss-cn-beijing.aliyuncs.com/xxxxxx.png?Expires=xxxxxx",
"type": "image"
}
]
}
}
],
"audio": null,
"finished": true
},
"usage": {
"input_tokens": 18790,
"output_tokens": 2,
"characters": 0,
"image_count": 1,
"size": "2985*1405",
"total_tokens": 18792
}
}
Java
Exemplo de solicitação
import com.alibaba.dashscope.aigc.imagegeneration.*;
import com.alibaba.dashscope.exception.ApiException;
import com.alibaba.dashscope.exception.NoApiKeyException;
import com.alibaba.dashscope.exception.UploadFileException;
import com.alibaba.dashscope.utils.Constants;
import com.alibaba.dashscope.utils.JsonUtils;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.nio.file.StandardCopyOption;
import java.util.Arrays;
import java.util.Base64;
import java.util.Collections;
import java.util.List;
import java.util.Map;
/**
* wan2.7-image-pro Image Editing - Synchronous Call Example
*/
public class Main {
static {
// The following URL is for the Singapore region. Replace {WorkspaceId} with your Bailian workspace ID. The base_url varies by region.
Constants.baseHttpApiUrl = "https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1";
}
// If you have not configured an environment variable, replace the following line with your Model Studio API key: apiKey="sk-xxx"
// The API key varies by region. To obtain an API key, visit https://www.alibabacloud.com/help/en/model-studio/get-api-key
static String apiKey = System.getenv("DASHSCOPE_API_KEY");
// --- Base64 encoding function ---
// Base64 encoding format: data:{MIME_type};base64,{base64_data}
public static String encodeFile(String filePath) throws IOException {
byte[] fileContent = Files.readAllBytes(Paths.get(filePath));
String base64String = Base64.getEncoder().encodeToString(fileContent);
String mimeType = Files.probeContentType(Paths.get(filePath));
return "data:" + mimeType + ";base64," + base64String;
}
public static void basicCall() throws ApiException, NoApiKeyException, UploadFileException, IOException {
/*
* Description of image input methods:
* Three image input methods are provided below. Select one.
* 1. Use a public URL: Suitable for publicly accessible images.
* 2. Use a local file: Suitable for local development and testing.
* 3. Use Base64 encoding: Suitable for private images or scenarios that require encrypted transmission.
*/
// Method 1: Use a public image URL.
String image1 = "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20251229/pjeqdf/car.webp";
String image2 = "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20251229/xsunlm/paint.webp";
// Method 2: Use a local file. Both absolute and relative paths are supported.
// Format: file:// + file path
// String image1 = "file:///path/to/your/car.png";
// String image2 = "file:///path/to/your/paint.png";
// Method 3: Use a Base64-encoded image.
// String image1 = encodeFile("/path/to/your/car.png");
// String image2 = encodeFile("/path/to/your/paint.png");
// Build a multi-image input message.
ImageGenerationMessage message = ImageGenerationMessage.builder()
.role("user")
.content(Arrays.asList(
// Multi-image input is supported. You can provide multiple reference images.
Collections.singletonMap("text", "Spray the graffiti from image 2 onto the car in image 1"),
Collections.singletonMap("image", image1),
Collections.singletonMap("image", image2)
)).build();
ImageGenerationParam param = ImageGenerationParam.builder()
.apiKey(apiKey)
.model("wan2.7-image-pro")
.messages(Collections.singletonList(message))
.n(1)
.size("2K") // For wan2.7-image-pro, only the text-to-image generation scenario supports 4K resolution. Image editing and collage generation support a maximum resolution of 2K.
.build();
ImageGeneration imageGeneration = new ImageGeneration();
ImageGenerationResult result = null;
try {
System.out.println("---sync call for image editing, please wait a moment----");
result = imageGeneration.call(param);
} catch (ApiException | NoApiKeyException | UploadFileException e) {
throw new RuntimeException(e.getMessage());
}
// Extract the result image URL and save it to a local file.
for (int i = 0; i < result.getOutput().getChoices().size(); i++) {
List<Map<String, Object>> contents = result.getOutput().getChoices().get(i)
.getMessage().getContent();
for (int j = 0; j < contents.size(); j++) {
if ("image".equals(contents.get(j).get("type"))) {
String imageUrl = (String) contents.get(j).get("image");
String fileName = "output_" + i + "_" + j + ".png";
// The result URL is valid for 24 hours. Download the image in a timely manner.
try (InputStream in = new URL(imageUrl).openStream()) {
Files.copy(in, Paths.get(fileName), StandardCopyOption.REPLACE_EXISTING);
}
System.out.println("Image saved to " + fileName);
}
}
}
}
public static void main(String[] args) throws ApiException, NoApiKeyException, UploadFileException, IOException {
basicCall();
}
}
Exemplo de resposta
A URL é válida por 24 horas. Salve-a prontamente.
{
"requestId": "1bf6173a-e8de-9f75-94d3-5e618f875xxx",
"usage": {
"input_tokens": 18790,
"output_tokens": 2,
"total_tokens": 18792,
"image_count": 1,
"size": "2985*1405"
},
"output": {
"choices": [
{
"finish_reason": "stop",
"message": {
"role": "assistant",
"content": [
{
"image": "https://dashscope-result-bj.oss-cn-beijing.aliyuncs.com/xxxxxx.png?Expires=xxxxxx",
"type": "image"
}
]
}
}
],
"finished": true
},
"status_code": 200,
"code": "",
"message": ""
}
curl
Exemplo de solicitação
curl --location 'https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation' \
--header 'Content-Type: application/json' \
--header "Authorization: Bearer $DASHSCOPE_API_KEY" \
--data '{
"model": "wan2.7-image-pro",
"input": {
"messages": [
{
"role": "user",
"content": [
{"image": "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20251229/pjeqdf/car.webp"},
{"image": "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20251229/xsunlm/paint.webp"},
{"text": "Spray-paint the graffiti from image 2 onto the car in image 1"}
]
}
]
},
"parameters": {
"size": "2K",
"n": 1,
"watermark": false
}
}'
Exemplo de resposta
{
"output": {
"choices": [
{
"finish_reason": "stop",
"message": {
"content": [
{
"image": "https://dashscope-xxx.oss-xxx.aliyuncs.com/xxx.png?Expires=xxx",
"type": "image"
}
],
"role": "assistant"
}
}
],
"finished": true
},
"usage": {
"image_count": 1,
"input_tokens": 10867,
"output_tokens": 2,
"size": "1488*704",
"total_tokens": 10869
},
"request_id": "71dfc3c6-f796-9972-97e4-bc4efc4faxxx"
}
Chamada assíncrona
Certifique-se de que a versão do DashScope Python SDK seja 1.25.15 ou posterior, e a versão do DashScope Java SDK seja 2.22.13 ou posterior.
Python
Exemplo de solicitação
import os
import base64
import mimetypes
import urllib.request
import dashscope
from dashscope.aigc.image_generation import ImageGeneration
from dashscope.api_entities.dashscope_response import Message
from http import HTTPStatus
# The following base_url is for the Singapore region. Replace {WorkspaceId} with your Bailian workspace ID. The base_url varies by region.
dashscope.base_http_api_url = "https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1"
# If you have not configured environment variables, replace the following line with your Model Studio API key: api_key="sk-xxx"
# The API key varies by region. To obtain an API key, visit https://www.alibabacloud.com/help/en/model-studio/get-api-key
api_key = os.getenv("DASHSCOPE_API_KEY")
# --- Base64 encoding function ---
# The Base64 encoding format is 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("Unsupported or unrecognized image format.")
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}"
"""
Image input methods:
Three image input methods are provided below. Choose one.
1. Use a public URL - suitable for publicly accessible images.
2. Use a local file - suitable for local development and testing.
3. Use Base64 encoding - suitable for private images or scenarios that require encrypted transmission.
"""
# [Method 1] Use a public image URL
image_1 = "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20251229/pjeqdf/car.webp"
image_2 = "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20251229/xsunlm/paint.webp"
# [Method 2] Use a local file (supports absolute and relative paths)
# image_1 = "file:///path/to/your/car.png"
# image_2 = "file:///path/to/your/paint.png"
# [Method 3] Use a Base64-encoded image
# image_1 = encode_file("/path/to/your/car.png")
# image_2 = encode_file("/path/to/your/paint.png")
# Create an asynchronous task.
def create_async_task():
print("Creating async task...")
message = Message(
role="user",
content=[
{"text": "Spray the graffiti from image 2 onto the car in image 1."},
{"image": image_1},
{"image": image_2},
],
)
response = ImageGeneration.async_call(
model="wan2.7-image-pro",
api_key=api_key,
messages=[message],
watermark=False,
n=1,
size="2K", # wan2.7-image-pro supports 4K resolution only for text-to-image generation scenarios. Image editing and collage generation support a maximum resolution of 2K.
)
if response.status_code == 200:
print("Task created successfully:", response)
return response
else:
raise Exception(f"Failed to create task: {response.code} - {response.message}")
# Wait for the task to complete.
def wait_for_completion(task_response):
print("Waiting for task completion...")
status = ImageGeneration.wait(task=task_response, api_key=api_key)
if status.output.task_status == "SUCCEEDED":
print("Task succeeded!")
# Extract the result image URL and save the image to a local file.
for i, choice in enumerate(status.output.choices):
for j, content in enumerate(choice["message"]["content"]):
if content.get("type") == "image":
image_url = content["image"]
file_name = f"output_{i}_{j}.png"
# The result URL is valid for 24 hours. Download the image in a timely manner.
urllib.request.urlretrieve(image_url, file_name)
print(f"Image saved to {file_name}")
else:
raise Exception(f"Task failed with status: {status.output.task_status}")
# Obtain information about the asynchronous task.
def fetch_task_status(task):
print("Fetching task status...")
status = ImageGeneration.fetch(task=task, api_key=api_key)
if status.status_code == HTTPStatus.OK:
print("Task status:", status.output.task_status)
print("Response details:", status)
else:
print(f"Failed to fetch status: {status.code} - {status.message}")
# Cancel the asynchronous task.
def cancel_task(task):
print("Canceling task...")
response = ImageGeneration.cancel(task=task, api_key=api_key)
if response.status_code == HTTPStatus.OK:
print("Task canceled successfully:", response.output.task_status)
else:
print(f"Failed to cancel task: {response.code} - {response.message}")
# Main execution flow.
if __name__ == "__main__":
task = create_async_task()
wait_for_completion(task)
Exemplo de resposta
-
Exemplo de resposta para criação de tarefa
{ "status_code": 200, "request_id": "4fb3050f-de57-4a24-84ff-e37ee5xxxxxx", "code": "", "message": "", "output": { "text": null, "finish_reason": null, "choices": null, "audio": null, "task_id": "127ec645-118f-4884-955d-0eba8dxxxxxx", "task_status": "PENDING" }, "usage": { "input_tokens": 0, "output_tokens": 0, "characters": 0 } } -
Exemplo de resposta para consulta de resultado de tarefa
A URL é válida por 24 horas. Baixe a imagem prontamente.
{ "status_code": 200, "request_id": "3b99aae5-d26f-9059-8dd0-ee9ca4804xxx", "code": null, "message": "", "output": { "text": null, "finish_reason": null, "choices": [ { "finish_reason": "stop", "message": { "role": "assistant", "content": [ { "image": "https://dashscope-result-bj.oss-cn-beijing.aliyuncs.com/xxxxxx.png?Expires=xxxxxx", "type": "image" } ] } } ], "audio": null, "task_id": "127ec645-118f-4884-955d-0eba8dxxxxxx", "task_status": "SUCCEEDED", "submit_time": "2026-03-31 22:58:47.646", "scheduled_time": "2026-03-31 22:58:47.683", "end_time": "2026-03-31 22:58:59.642", "finished": true }, "usage": { "input_tokens": 18711, "output_tokens": 2, "characters": 0, "size": "2985*1405", "total_tokens": 18713, "image_count": 1 } }
Java
Exemplo de solicitação
import com.alibaba.dashscope.aigc.imagegeneration.*;
import com.alibaba.dashscope.exception.ApiException;
import com.alibaba.dashscope.exception.NoApiKeyException;
import com.alibaba.dashscope.exception.UploadFileException;
import com.alibaba.dashscope.utils.Constants;
import com.alibaba.dashscope.utils.JsonUtils;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.nio.file.StandardCopyOption;
import java.util.Arrays;
import java.util.Base64;
import java.util.Collections;
import java.util.List;
import java.util.Map;
/**
* wan2.7-image-pro Image Editing - Asynchronous Invocation Example
*/
public class Main {
static {
// The following URL is for the Singapore region. Replace {WorkspaceId} with your Bailian workspace ID. The base_url varies by region.
Constants.baseHttpApiUrl = "https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1";
}
// If you have not configured an environment variable, replace the following line with your Model Studio API key: apiKey="sk-xxx"
// The API key varies by region. To obtain an API key, visit: https://www.alibabacloud.com/help/en/model-studio/get-api-key
static String apiKey = System.getenv("DASHSCOPE_API_KEY");
// --- Base64 encoding function ---
// The Base64 encoding format is data:{MIME_type};base64,{base64_data}
public static String encodeFile(String filePath) throws IOException {
byte[] fileContent = Files.readAllBytes(Paths.get(filePath));
String base64String = Base64.getEncoder().encodeToString(fileContent);
String mimeType = Files.probeContentType(Paths.get(filePath));
return "data:" + mimeType + ";base64," + base64String;
}
public static void asyncCall() throws ApiException, NoApiKeyException, UploadFileException, IOException {
/*
* Description of image input methods:
* The following three image input methods are provided. You can choose one of them.
* 1. Use a public URL - Suitable for publicly accessible images.
* 2. Use a local file - Suitable for local development and testing.
* 3. Use Base64 encoding - Suitable for scenarios that involve private images or require encrypted transmission.
*/
// [Method 1] Use a public image URL
String image1 = "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20251229/pjeqdf/car.webp";
String image2 = "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20251229/xsunlm/paint.webp";
// [Method 2] Use a local file (supports absolute and relative paths)
// Required format: file:// + file path
// String image1 = "file:///path/to/your/car.png";
// String image2 = "file:///path/to/your/paint.png";
// [Method 3] Use a Base64-encoded image
// String image1 = encodeFile("/path/to/your/car.png");
// String image2 = encodeFile("/path/to/your/paint.png");
// Build a multi-image input message
ImageGenerationMessage message = ImageGenerationMessage.builder()
.role("user")
.content(Arrays.asList(
// Supports multi-image input. You can provide multiple reference images.
Collections.singletonMap("text", "Spray-paint the graffiti from image 2 onto the car in image 1"),
Collections.singletonMap("image", image1),
Collections.singletonMap("image", image2)
)).build();
ImageGenerationParam param = ImageGenerationParam.builder()
.apiKey(apiKey)
.model("wan2.7-image-pro")
.n(1)
.size("2K") // The wan2.7-image-pro model supports 4K resolution only for text-to-image generation. For image editing and composite image generation, the maximum supported resolution is 2K.
.messages(Arrays.asList(message))
.build();
ImageGeneration imageGeneration = new ImageGeneration();
ImageGenerationResult result = null;
try {
System.out.println("---async call for image editing, creating task----");
result = imageGeneration.asyncCall(param);
} catch (ApiException | NoApiKeyException | UploadFileException e) {
throw new RuntimeException(e.getMessage());
}
System.out.println("Task creation result:");
System.out.println(JsonUtils.toJson(result));
String taskId = result.getOutput().getTaskId();
// Wait for the task to complete
waitTask(taskId);
}
public static void waitTask(String taskId) throws ApiException, NoApiKeyException, IOException {
ImageGeneration imageGeneration = new ImageGeneration();
System.out.println("\n---waiting for task completion----");
ImageGenerationResult result = imageGeneration.wait(taskId, apiKey);
// Fetch the resulting image URL and save it to a local file
for (int i = 0; i < result.getOutput().getChoices().size(); i++) {
List<Map<String, Object>> contents = result.getOutput().getChoices().get(i)
.getMessage().getContent();
for (int j = 0; j < contents.size(); j++) {
if ("image".equals(contents.get(j).get("type"))) {
String imageUrl = (String) contents.get(j).get("image");
String fileName = "output_" + i + "_" + j + ".png";
// The result URL is valid for 24 hours. Download the image in a timely manner.
try (InputStream in = new URL(imageUrl).openStream()) {
Files.copy(in, Paths.get(fileName), StandardCopyOption.REPLACE_EXISTING);
}
System.out.println("Image saved to " + fileName);
}
}
}
}
public static void main(String[] args) throws ApiException, NoApiKeyException, UploadFileException, IOException {
asyncCall();
}
}
Exemplo de resposta
-
Exemplo de resposta ao criar uma tarefa
{ "requestId": "ccf4b2f4-bf30-9e13-9461-3a28c6a7bxxx", "output": { "task_id": "8811b4a4-00ac-4aa2-a2fd-017d3b90cxxx", "task_status": "PENDING" }, "status_code": 200, "code": "", "message": "" } -
Exemplo de resposta ao consultar o resultado de uma tarefa
A URL tem validade de 24 horas. Salve-a prontamente.
{ "requestId": "60a08540-f1c1-9e76-8cd3-d5949db8cxxx", "usage": { "input_tokens": 18711, "output_tokens": 2, "total_tokens": 18713, "image_count": 1, "size": "2985*1405" }, "output": { "choices": [ { "finish_reason": "stop", "message": { "role": "assistant", "content": [ { "image": "https://dashscope-result-bj.oss-cn-beijing.aliyuncs.com/xxxxxx.png?Expires=xxxxxx", "type": "image" } ] } } ], "task_id": "8811b4a4-00ac-4aa2-a2fd-017d3b90cxxx", "task_status": "SUCCEEDED", "finished": true, "submit_time": "2026-03-31 19:57:58.840", "scheduled_time": "2026-03-31 19:57:58.877", "end_time": "2026-03-31 19:58:11.563" }, "status_code": 200, "code": "", "message": "" }
curl
Etapa 1: Criar uma tarefa para obter o ID da tarefa
curl --location 'https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1/services/aigc/image-generation/generation' \
--header 'Content-Type: application/json' \
--header "Authorization: Bearer $DASHSCOPE_API_KEY" \
--header "X-DashScope-Async: enable" \
--data '{
"model": "wan2.7-image-pro",
"input": {
"messages": [
{
"role": "user",
"content": [
{"image": "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20251229/pjeqdf/car.webp"},
{"image": "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20251229/xsunlm/paint.webp"},
{"text": "Spray-paint the graffiti from image 2 onto the car in image 1"}
]
}
]
},
"parameters": {
"size": "2K",
"n": 1,
"watermark": false
}
}'
Exemplo de resposta
{
"output": {
"task_status": "PENDING",
"task_id": "0385dc79-5ff8-4d82-bcb6-xxxxxx"
},
"request_id": "4909100c-7b5a-9f92-bfe5-xxxxxx"
}
Etapa 2: Consultar o resultado pelo ID da tarefa
Use o task_id obtido na etapa anterior para consultar o status da tarefa via API até que o task_status seja SUCCEEDED ou FAILED.
Substitua {task_id} pelo valor de task_id retornado pela chamada de API anterior. O task_id permanece válido para consultas por 24 horas.
curl -X GET https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1/tasks/{task_id} \
--header "Authorization: Bearer $DASHSCOPE_API_KEY"
Exemplo de resposta
A URL da imagem tem validade de 24 horas. Baixe a imagem prontamente.
{
"request_id": "810fa5f5-334c-91f3-aaa4-ed89cf0caxxx",
"output": {
"task_id": "a81ee7cb-014c-473d-b842-76e98311cxxx",
"task_status": "SUCCEEDED",
"submit_time": "2026-03-26 17:16:01.663",
"scheduled_time": "2026-03-26 17:16:01.716",
"end_time": "2026-03-26 17:16:22.961",
"finished": true,
"choices": [
{
"finish_reason": "stop",
"message": {
"role": "assistant",
"content": [
{
"image": "https://dashscope-xxx.oss-xxx.aliyuncs.com/xxx.png?Expires=xxx",
"type": "image"
}
]
}
}
]
},
"usage": {
"size": "2976*1408",
"total_tokens": 11017,
"image_count": 1,
"output_tokens": 2,
"input_tokens": 11015
}
}
O modelo wan2.5-i2i-preview utiliza endpoints e parâmetros de API diferentes.
Seleção de modelo
-
wan2.7-image-pro e wan2.7-image (recomendado): Ideais para edição precisa ou geração de múltiplas imagens coerentes.
Edição local precisa: Selecione uma área específica para mover, substituir ou adicionar elementos. Recomendado para retoques em e-commerce e ajustes de design.
Geração de múltiplos painéis: Gere várias imagens com estilo consistente em uma única chamada. Mais indicado para storyboards de quadrinhos e séries de produtos.
wan2.6-image: Edição estilizada com mistura de texto e imagens ou múltiplas referências. Gera texto nas imagens e aceita até quatro imagens de referência.
wan2.5-i2i-preview: Adequado para edição simples de imagens e fusão de múltiplas imagens.
Para as especificações de entrada e saída de cada modelo, consulte Especificações de imagem de entrada e Resolução da imagem de saída.
Galeria de demonstração
Conjunto imagem para imagem
|
Imagem de entrada |
Imagem de saída |
|
|
|
|
|
|
Edição interativa
|
Imagem de entrada |
Imagem de saída |
|
|
Edite com base na imagem 1. Substitua a framboesa selecionada na caixa 1 por um limão, a framboesa na caixa 2 por um morango e a framboesa na caixa 3 por um mirtilo. O resultado deve integrar-se harmoniosamente à imagem original, sem as caixas de referência e números, mantendo o restante do conteúdo inalterado. |
|
|
Coloque o padrão selecionado da imagem 1 na área selecionada da imagem 2. |
Fusão de múltiplas imagens
|
Imagem de entrada |
Imagem de saída |
|
|
Faça um retrato do menino da imagem 1 e do cachorro da imagem 2. O menino está abraçando o cachorro, e ambos estão muito felizes. Iluminação suave de estúdio, fundo texturizado azul. |
|
|
Recoloque o vestido da imagem 1 usando as cores do pássaro na imagem 2. Torne-o artístico, mas mantenha o estilo do vestido e da modelo inalterados. |
Preservação de características do sujeito
|
Imagem de entrada |
Imagem de saída |
|
|
Gere um conjunto de quatro fotos estilo Polaroid com o tema "Mudanças Sazonais". Cada foto é tirada no mesmo local, sob uma árvore em um parque, mas mostra cenas de primavera, verão, outono e inverno, respectivamente. As roupas da pessoa também devem combinar com a estação: uma jaqueta leve na primavera, uma camisa de manga curta no verão, um sobretudo no outono, e um cachecol com casaco grosso no inverno. Coloque este conjunto de fotos sobre uma mesa de jantar. |
Detecção e segmentação
|
Imagem de entrada |
Imagem de saída |
|
|
Detecte o laptop e o despertador na imagem, desenhe caixas delimitadoras e rotule-os como "laptop" e "clock". |
|
|
Segmente o copo de vidro na imagem. |
Extração de elementos
|
Imagem de entrada |
Imagem de saída |
|
|
Extraia as peças de roupa da foto enviada e organize-as em uma exibição flat-lay sobre um fundo branco puro. Mantenha detalhes realistas e texturas de material. Estilo de e-commerce de moda, adequado para vitrine de roupas. |
Instruções
Leia o inglês para entender O QUE precisa ser comunicado
Escreva o português brasileiro DO ZERO — esqueça a estrutura da frase em inglês
Preserve toda a formatação markdown, blocos de código, links e imagens exatamente como estão
Tags xref (
<a data-tag="xref" ...>text</a>) — preserve a tag INTEIRA com todos os atributos na ordem e caixa originais, APENAS traduza o texto visível entre > eAplique todas as regras específicas de idioma rigorosamente
Aplique as regras de stopwords com tolerância zero
Use o modo imperativo em passos numerados e listas de procedimentos
Garanta consistência terminológica — mesmo termo = mesma tradução em todo o documento
Varie os inícios de frase em listas/tabelas — nenhum iniciador repetido mais de 3 vezes
-
Retorne APENAS o documento markdown em português brasileiro, sem explicações
Edição de texto
Imagem de entrada
Imagem de saída


Remove todas as marcas d'água da imagem.


Escreva casualmente "Time for Holiday?" na areia com a mão.


Altere 18 para 29 e JUNE para SEPTEMBER.
Edição de câmera e perspectiva
Imagem de entrada
Imagem de saída


Mantenha as características da pessoa inalteradas e gere vistas frontal, lateral e traseira.


Refotografe esta cena com uma lente olho de peixe.
Especificações de entrada
Especificações da imagem de entrada
|
Especificação |
wan2.7-image-pro, wan2.7-image |
wan2.6-image |
wan2.5-i2i-preview |
|
Quantidade de imagens de entrada |
0 a 9 (0 corresponde ao modo texto para imagem) |
Edição de imagem: 1 a 4 / Texto e imagem mistos: 0 a 1 |
1 a 3 |
|
Formato da imagem |
JPEG, JPG, PNG (canal alfa não suportado), BMP, WEBP |
JPEG, JPG, PNG (canal alfa não suportado), BMP, WEBP |
JPEG, JPG, PNG (canal alfa não suportado), BMP, WEBP |
|
Intervalo de largura e altura da imagem |
[240, 8000] pixels |
[240, 8000] pixels |
[384, 5000] pixels |
|
Tamanho do arquivo |
≤ 20 MB |
≤ 10 MB |
≤ 10 MB |
|
Proporção |
[1:8, 8:1] |
Ilimitada |
[1:4, 4:1] |
Ordem de entrada das imagens
Os números das imagens nos prompts correspondem à posição no array: a primeira imagem é "image 1", a segunda é "image 2". Também é possível usar marcadores como "[image 1]" e "[image 2]".
{
"content": [
{"text": "Editing instruction, for example: Place the alarm clock from image 1 next to the vase on the dining table in image 2"},
{"image": "https://example.com/image1.png"},
{"image": "https://example.com/image2.png"}
]
}
|
Imagem de entrada |
Imagem de saída |
||
|
Image 1 |
Image 2 |
Prompt: Move image 1 onto image 2 |
Prompt: Move image 2 onto image 1 |
Métodos de entrada de imagem
Forneça as imagens utilizando qualquer um dos métodos abaixo:
Recursos principais
1. Seguimento de instruções (prompts)
Parâmetros: messages.content.text ou input.prompt (obrigatório), negative_prompt (opcional).
text ou prompt (Prompt positivo): Descreva o conteúdo, sujeitos, cenas, estilos, iluminação e composição desejados para a imagem de saída.
negative_prompt (Prompt negativo): Especifique conteúdos indesejados, como "blurry" ou "extra fingers".
|
Parâmetro |
wan2.7-image-pro, wan2.7-image |
wan2.6-image |
wan2.5-i2i-preview |
|
text |
Obrigatório, até 5.000 caracteres |
Obrigatório, até 2.000 caracteres |
Não suportado |
|
prompt |
Não suportado |
Não suportado |
Obrigatório, até 2.000 caracteres |
|
negative_prompt |
Não suportado |
Suportado, até 500 caracteres |
Suportado, até 500 caracteres |
2. Ativar reescrita inteligente de prompts
Parâmetro: parameters.prompt_extend (bool, padrão true).
Expande prompts curtos para melhorar a qualidade da imagem, aumentando o tempo de resposta.
Melhores práticas:
Ative: Quando os prompts forem concisos ou genéricos.
Desative: Para controle fino de detalhes, descrições detalhadas ou cenários sensíveis à latência. Defina
prompt_extendcomofalse.
|
Parâmetro |
wan2.7-image-pro, wan2.7-image |
wan2.6-image |
wan2.5-i2i-preview |
|
prompt_extend |
Não suportado |
Suportado (apenas modo de edição de imagem) |
Suportado |
3. Definir a resolução da imagem de saída
Parâmetro: parameters.size (string), no formato "largura*altura".
|
Parâmetro |
wan2.7-image-pro, wan2.7-image |
wan2.6-image |
wan2.5-i2i-preview |
|
size |
Método 1: Especificar a resolução da imagem de saída (recomendado) No modo de edição (com pelo menos uma imagem fornecida), os níveis opcionais de resolução de saída são:
Método 2: Especificar os valores de largura e altura em pixels da imagem gerada
Apenas o wan2.7-image-pro em cenários de texto para imagem suporta resolução 4K. |
Método 1: Referenciar a proporção da imagem de entrada (recomendado) No modo de edição (
Método 2: Especificar os valores de largura e altura em pixels da imagem gerada
Os valores reais de pixels da imagem de saída serão o múltiplo de 16 mais próximo do valor especificado. |
Suporta apenas a especificação dos valores de largura e altura em pixels da imagem gerada
|
4. Edição precisa interativa
Utilize parameters.bbox_list para selecionar regiões específicas para edição. Suportado apenas por wan2.7-image-pro e wan2.7-image.
Tamanho da lista: Deve corresponder ao número de imagens de entrada. Use uma lista vazia
[]para imagens que não exigem edição.Formato das coordenadas:
[x1, y1, x2, y2](x superior esquerdo, y superior esquerdo, x inferior direito, y inferior direito). As coordenadas são valores absolutos em pixels com origem (0, 0) no canto superior esquerdo, eixo x para a direita e eixo y para baixo.Limite de quantidade: Máximo de 2 caixas delimitadoras por imagem.
Exemplo: 3 imagens de entrada, onde a imagem 1 possui duas caixas delimitadoras e a imagem 2 não possui nenhuma
[
[[0, 0, 12, 12], [25, 25, 100, 100]], # Image 1 (2 boxes)
[], # Image 2 (no box)
[[10, 10, 50, 50]] # Image 3 (1 box)
]
Faturamento e limites de taxa
Cota gratuita e preços: Lista de modelos e preços.
Para limites de taxa, consulte Wanxiang.
-
Faturamento:
As cobranças ocorrem por imagem gerada com sucesso. A cobrança acontece apenas quando a API retorna um
task_statusigual aSUCCEEDED.Chamadas de modelo falhas ou erros de processamento não geram taxas nem consomem a cota gratuita.
Referência da API
Cada modelo utiliza um endpoint e uma estrutura de solicitação diferentes:
|
Modelo |
Endpoint (Exemplo para a região Singapore) |
|
|
API síncrona: API assíncrona: Substitua |
|
|
API assíncrona: Substitua |
wan2.7/wan2.6: Utilize o formatomessages. No arraymessages[].content, passe a imagem no parâmetroimagee o prompt no parâmetrotext.wan2.5: Passe a imagem no arrayinput.imagese o prompt no parâmetroinput.prompt.
|
wan2.7-image-pro, wan2.7-image, wan2.6-image |
wan2.5-i2i-preview |
|
|
Para parâmetros de entrada e saída, consulte Wan2.7 - geração e edição de imagens, Wan2.6 - geração e edição de imagens, Wanxiang – Edição Geral de Imagens 2.5


























