Edite imágenes con prompts de texto utilizando el modelo Wan: outpainting, eliminación de marcas de agua, transferencia de estilo, edición basada en instrucciones, inpainting y restauración.
ImportanteEste documento se aplica únicamente a la región China (Beijing). Debe utilizar una clave de API de la región China (Beijing) para usar el modelo.
Resumen de modelos
Demostración de rendimiento
Imagen original |
Cambiar su cabello a rojo |
Añadir un par de gafas de sol a la niña |
Convertir al estilo de libro ilustrado francés |
PreciosConsulte Características clave.
Región de Pekín
ImportanteLa región de Pekín no ofrece una cuota gratuita. Todas las llamadas son facturables. Confirm antes de continuar.
Modelo | Precio unitario | Límite de tasa (compartido por la cuenta de Alibaba Cloud y los usuarios RAM) | |
|---|---|---|---|
Límite de RPS para envío de tareas | Número de tareas simultáneas | ||
wanx2.1-imageedit | $0.020070/imagen | 2 | 2 |
Introducción
Requisitos previos
Obtenga una clave de API y configúrela como variable de entorno. Si utiliza el SDK de DashScope para realizar llamadas, también necesita instalar el SDK.
Código de ejemplo
Llame a la API de edición de imágenes para realizar inpainting local.
El SDK encapsula el procesamiento asíncrono, por lo que la interfaz se comporta de manera síncrona: una sola solicitud espera el resultado. El ejemplo de curl muestra dos operaciones asíncronas separadas: enviar tarea y consultar resultado.
Python
Admite tres métodos de entrada: URL pública, codificación Base64 o ruta de archivo local.
Ejemplo de solicitud
import base64
import os
from http import HTTPStatus
from dashscope import ImageSynthesis
import dashscope
import mimetypes
"""
Environment requirements:
dashscope python SDK >= 1.23.8
Install/Upgrade SDK:
pip install -U dashscope
"""
dashscope.base_http_api_url = "https://{WorkspaceId}.cn-beijing.maas.aliyuncs.com/api/v1"
# If the environment variable is not configured, replace the following line with: api_key="sk-xxx"
api_key = os.getenv("DASHSCOPE_API_KEY")
# --- Helper function: for 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:
Choose one of the following three methods.
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 requiring encrypted transmission.
"""
# [Method 1] Use a public image URL
mask_image_url = "http://wanx.alicdn.com/material/20250318/description_edit_with_mask_3_mask.png"
base_image_url = "http://wanx.alicdn.com/material/20250318/description_edit_with_mask_3.jpeg"
# [Method 2] Use a local file (supports absolute and relative paths)
# Format requirement: file:// + file path
# Example (absolute path):
# mask_image_url = "file://" + "/path/to/your/mask_image.png" # Linux/macOS
# base_image_url = "file://" + "C:/path/to/your/base_image.jpeg" # Windows
# Example (relative path):
# mask_image_url = "file://" + "./mask_image.png" # Based on the actual path
# base_image_url = "file://" + "./base_image.jpeg" # Based on the actual path
# [Method 3] Use a Base64-encoded image
# mask_image_url = encode_file("./mask_image.png") # Based on the actual path
# base_image_url = encode_file("./base_image.jpeg") # Based on the actual path
def sample_sync_call_imageedit():
print('please wait...')
rsp = ImageSynthesis.call(api_key=api_key,
model="wanx2.1-imageedit",
function="description_edit_with_mask",
prompt="A ceramic rabbit holding a ceramic flower",
mask_image_url=mask_image_url,
base_image_url=base_image_url,
n=1)
assert rsp.status_code == HTTPStatus.OK
print('response: %s' % rsp)
if rsp.status_code == HTTPStatus.OK:
for result in rsp.output.results:
print("---------------------------")
print(result.url)
else:
print('sync_call Failed, status_code: %s, code: %s, message: %s' %
(rsp.status_code, rsp.code, rsp.message))
if __name__ == '__main__':
sample_sync_call_imageedit()
Ejemplo de respuesta
La URL es válida durante 24 horas. Descargue la imagen oportunamente.
{
"status_code": 200,
"request_id": "dc41682c-4e4a-9010-bc6f-xxxxxx",
"code": null,
"message": "",
"output": {
"task_id": "6e319d88-a07a-420c-9493-xxxxxx",
"task_status": "SUCCEEDED",
"results": [
{
"url": "https://dashscope-result-wlcb-acdr-1.oss-cn-wulanchabu-acdr-1.aliyuncs.com/xxx.png?xxxxxx"
}
],
"submit_time": "2025-05-26 14:58:27.320",
"scheduled_time": "2025-05-26 14:58:27.339",
"end_time": "2025-05-26 14:58:39.170",
"task_metrics": {
"TOTAL": 1,
"SUCCEEDED": 1,
"FAILED": 0
}
},
"usage": {
"image_count": 1
}
}
Java
Admite tres métodos de entrada: URL pública, codificación Base64 o ruta de archivo local.
Ejemplo de solicitud
// Copyright (c) Alibaba, Inc. and its affiliates.
import com.alibaba.dashscope.aigc.imagesynthesis.ImageSynthesis;
import com.alibaba.dashscope.aigc.imagesynthesis.ImageSynthesisParam;
import com.alibaba.dashscope.aigc.imagesynthesis.ImageSynthesisResult;
import com.alibaba.dashscope.exception.ApiException;
import com.alibaba.dashscope.exception.NoApiKeyException;
import com.alibaba.dashscope.utils.Constants;
import com.alibaba.dashscope.utils.JsonUtils;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.Base64;
import java.util.HashMap;
import java.util.Map;
/**
* Environment requirements
* dashscope java SDK >=2.20.9
* Update Maven dependency:
* https://mvnrepository.com/artifact/com.alibaba/dashscope-sdk-java
*/
public class ImageEditSync {
static {Constants.baseHttpApiUrl="https://{WorkspaceId}.cn-beijing.maas.aliyuncs.com/api/v1";}
// If the environment variable is not configured, replace the following line with: apiKey="sk-xxx"
static String apiKey = System.getenv("DASHSCOPE_API_KEY");
/**
* Image input methods: Choose one of the following three.
*
* 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 requiring encrypted transmission.
*/
//[Method 1] Public URL
static String maskImageUrl = "http://wanx.alicdn.com/material/20250318/description_edit_with_mask_3_mask.png";
static String baseImageUrl = "http://wanx.alicdn.com/material/20250318/description_edit_with_mask_3.jpeg";
//[Method 2] Local file path (file://+absolute path or file:///+absolute path)
// static String maskImageUrl = "file://" + "/your/path/to/mask_image.png"; // Linux/macOS
// static String baseImageUrl = "file:///" + "C:/your/path/to/base_image.png"; // Windows
//[Method 3] Base64 encoding
// static String maskImageUrl = encodeFile("/your/path/to/mask_image.png");
// static String baseImageUrl = encodeFile("/your/path/to/base_image.png");
public static void syncCall() {
// Set the parameters parameter
Map<String, Object> parameters = new HashMap<>();
parameters.put("prompt_extend", true);
ImageSynthesisParam param =
ImageSynthesisParam.builder()
.apiKey(apiKey)
.model("wanx2.1-imageedit")
.function(ImageSynthesis.ImageEditFunction.DESCRIPTION_EDIT_WITH_MASK)
.prompt("A ceramic rabbit holding a ceramic flower")
.maskImageUrl(maskImageUrl)
.baseImageUrl(baseImageUrl)
.n(1)
.size("1024*1024")
.parameters(parameters)
.build();
ImageSynthesis imageSynthesis = new ImageSynthesis();
ImageSynthesisResult result = null;
try {
System.out.println("---sync call, please wait a moment----");
result = imageSynthesis.call(param);
} catch (ApiException | NoApiKeyException e){
throw new RuntimeException(e.getMessage());
}
System.out.println(JsonUtils.toJson(result));
}
/**
* Encodes a file into a Base64 string
* @param filePath The file path
* @return A Base64 string in the format data:{MIME_type};base64,{base64_data}
*/
public static String encodeFile(String filePath) {
Path path = Paths.get(filePath);
if (!Files.exists(path)) {
throw new IllegalArgumentException("File does not exist: " + filePath);
}
// Detect the MIME type
String mimeType = null;
try {
mimeType = Files.probeContentType(path);
} catch (IOException e) {
throw new IllegalArgumentException("Cannot detect file type: " + filePath);
}
if (mimeType == null || !mimeType.startsWith("image/")) {
throw new IllegalArgumentException("Unsupported or unrecognized image format");
}
// Read the file content and encode it
byte[] fileBytes = null;
try{
fileBytes = Files.readAllBytes(path);
} catch (IOException e) {
throw new IllegalArgumentException("Cannot read file content: " + filePath);
}
String encodedString = Base64.getEncoder().encodeToString(fileBytes);
return "data:" + mimeType + ";base64," + encodedString;
}
public static void main(String[] args) {
syncCall();
}
}
Ejemplo de respuesta
La URL es válida durante 24 horas. Descargue la imagen oportunamente.
{
"request_id": "bf6c6361-f0fc-949c-9d60-xxxxxx",
"output": {
"task_id": "958db858-153b-4c81-b243-xxxxxx",
"task_status": "SUCCEEDED",
"results": [
{
"url": "https://dashscope-result-wlcb-acdr-1.oss-cn-wulanchabu-acdr-1.aliyuncs.com/xxx.png?xxxxxx"
}
],
"task_metrics": {
"TOTAL": 1,
"SUCCEEDED": 1,
"FAILED": 0
}
},
"usage": {
"image_count": 1
}
}
curl
Cubre el flujo de trabajo completo: crear tarea, sondear estado, recuperar y guardar resultados.
Nota
- Configure el encabezado
X-DashScope-Asyncenenablepara llamadas asíncronas. - Los ID de tarea caducan después de 24 horas y el estado cambia a
UNKNOWN.
Paso 1: Crear una tarea
Devuelve task_id.
curl --location 'https://{WorkspaceId}.cn-beijing.maas.aliyuncs.com/api/v1/services/aigc/image2image/image-synthesis' \
--header 'X-DashScope-Async: enable' \
--header "Authorization: Bearer $DASHSCOPE_API_KEY" \
--header 'Content-Type: application/json' \
--data '{
"model": "wanx2.1-imageedit",
"input": {
"function": "description_edit_with_mask",
"prompt": "A ceramic rabbit holding a ceramic flower.",
"base_image_url": "http://wanx.alicdn.com/material/20250318/description_edit_with_mask_3.jpeg",
"mask_image_url": "http://wanx.alicdn.com/material/20250318/description_edit_with_mask_3_mask.png"
},
"parameters": {
"n": 1
}
}'
Respuesta de ejemplo{
"output": {
"task_status": "PENDING",
"task_id": "0385dc79-5ff8-4d82-bcb6-xxxxxx"
},
"request_id": "4909100c-7b5a-9f92-bfe5-xxxxxx"
}
Paso 2: Consultar el resultado por ID de tarea
Sondee el estado de la tarea con task_id hasta que task_status sea SUCCEEDED o FAILED.
Reemplace 86ecf553-d340-4e21-xxxxxxxxx con su task_id real.
curl -X GET https://{WorkspaceId}.cn-beijing.maas.aliyuncs.com/api/v1/tasks/86ecf553-d340-4e21-xxxxxxxxx \
--header "Authorization: Bearer $DASHSCOPE_API_KEY"
Ejemplo de respuestaLas URL de las imágenes caducan después de 24 horas; descárguelas prontamente.
{
"request_id": "eeef0935-02e9-9742-bb55-xxxxxx",
"output": {
"task_id": "a425c46f-dc0a-400f-879e-xxxxxx",
"task_status": "SUCCEEDED",
"submit_time": "2025-02-21 17:56:31.786",
"scheduled_time": "2025-02-21 17:56:31.821",
"end_time": "2025-02-21 17:56:42.530",
"results": [
{
"url": "https://dashscope-result-sh.oss-cn-shanghai.aliyuncs.com/aaa.png"
}
],
"task_metrics": {
"TOTAL": 1,
"SUCCEEDED": 1,
"FAILED": 0
}
},
"usage": {
"image_count": 1
}
}
Características clave
Utilice el parámetro function para especificar funciones de edición. Todas las funciones siguen el mismo método de llamada descrito en Primeros pasos.
Cada sección a continuación muestra el JSON específico de la función para input y parameters para curl.
Una solicitud completa de curl debe incluir campos de nivel superior como model, input y parameters, tal como se describe en la Referencia de la API de edición general de imágenes.
Estilización global
Aplica un estilo artístico a toda la imagen; ideal para libros ilustrados, fondos de redes sociales o arte conceptual.
-
Establezca
functionenstylization_all. -
Estilos admitidos:
- Estilo de libro ilustrado francés
- Estilo artístico de pan de oro
-
parameters.strength(0.0–1.0, valor predeterminado: 0.5) controla la intensidad de la modificación. Los valores más bajos conservan más del original. -
Formato del prompt: "Convertir a [estilo]" (por ejemplo, "Convertir a estilo de libro ilustrado francés").
Imagen de entrada | Imagen de salida | |
|---|---|---|
Prompt: Convertir a estilo de libro ilustrado francés | Prompt: Convertir a estilo artístico de pan de oro | |
|
|
|
|
|
|
Controle el grado de modificación de la imagen con strength
El parámetro parameters.strength (0.0–1.0, valor predeterminado: 0.5) controla la intensidad de la modificación: los valores cercanos a 0 conservan el original, los valores cercanos a 1 modifican más.
Prompt de entrada: Convertir a estilo de libro ilustrado francés.
Imagen de entrada | Imagen de salida | ||
|---|---|---|---|
strength=0.0 (valor mínimo) | strength=0.5 (valor predeterminado) | strength=1.0 (valor máximo) | |
|
|
|
|
Estilización local
Aplica un estilo a un área específica; ideal para personalización de personajes o resaltado de productos publicitarios.
-
Establezca
functionenstylization_local. -
Estilos admitidos y valores de parámetros:
- Escultura de hielo: ice
- Nube: cloud
- Farol festivo chino: chinese festive lantern
- Tablón: wooden
- Porcelana azul y blanca: blue and white porcelain
- Esponjoso: fluffy
- Hilo: weaving
- Globo: balloon
-
Formato del prompt: "Cambiar [objeto] a [estilo]" (por ejemplo, "Cambiar la casa a estilo de madera").
Imagen de entrada | Imagen de salida | |||
|---|---|---|---|---|
|
Escultura de hielo |
Nube |
Farol festivo chino |
Madera |
Porcelana azul y blanca |
Esponjoso |
|
Globo | |
Edición basada en instrucciones
Agrega o modifica contenido mediante instrucciones de texto, sin especificar áreas; ideal para ediciones simples como agregar accesorios o cambiar el color del cabello.
- Establezca
functionendescription_edit. parameters.strength(0.0–1.0, valor predeterminado: 0.5) controla la intensidad de la modificación. Los valores más bajos conservan más del original.- Prompt: Incluya verbos de acción como "agregar" o "modificar". Para eliminaciones, utilice Inpainting local en su lugar.
Capacidades | Imagen de entrada | Imagen de salida |
|---|---|---|
Añadir un elemento |
|
Añadir un par de gafas de sol al gatito. |
Modificar un elemento |
|
Cambiar su cabello a rojo. |
Controle el grado de modificación de la imagen con strength
El parámetro parameters.strength (0.0–1.0, valor predeterminado: 0.5) controla la intensidad de la modificación: los valores cercanos a 0 conservan el original, los valores cercanos a 1 modifican más.
Prompt de entrada: Cambiar su ropa por una camisa de playa estampada y colorida.
Imagen de entrada | Imagen de salida | ||
|---|---|---|---|
strength=0.0 (valor mínimo) | strength=0.5 (valor predeterminado) | strength=1.0 (valor máximo) | |
|
|
|
|
Inpainting local
Edita un área enmascarada: agregue, modifique o elimine contenido con control preciso sobre ropa, objetos o elementos no deseados.
-
Establezca
functionendescription_edit_with_mask. -
Requisitos de máscara: Proporcione
mask_image_urldonde blanco = área a editar, negro = área a conservar. -
Prompt: Incluya acciones ("agregar", "modificar") y describa el contenido posterior a la eliminación para las supresiones.
- Añadir/Modificar: Describa la acción o el resultado final.
- Eliminar: Deje
promptvacío para objetos pequeños. Para objetos grandes, describa el fondo deseado después de la eliminación, no la acción de eliminación en sí.
| Capacidades | Imagen de entrada | Imagen de máscara de entrada(El blanco es el área a editar) | Imagen de salida |
|---|---|---|---|
| Añadir un elemento | ![]() | ![]() | ![]() Añadir un sombrero al cachorro.
|
| Modificar un elemento | ![]() | ![]() | ![]() Un conejo de cerámica sosteniendo una flor de cerámica.
|
| Eliminar un elemento | ![]() | ![]() | ![]() Un jarrón de vidrio transparente sobre la mesa.
|
Eliminación de texto y marcas de agua
Nota
Advertencia de riesgo legalEl uso de esta función para procesar imágenes protegidas por derechos de autor (como eliminar la marca de agua de otra marca) puede constituir una infracción de derechos de autor. Asegúrese de tener el derecho legal de utilizar la imagen procesada y asuma todas las responsabilidades legales relacionadas.
Elimina texto en chino/inglés o marcas de agua de las imágenes; útil para procesamiento de materiales o limpieza de anuncios.
- Establezca
functionenremove_watermark. - Prompt: Use instrucciones generales ("Eliminar el texto") o especifique el tipo ("Eliminar texto en inglés").
Imagen de entrada | Imagen de salida (Eliminar el texto en la imagen) |
|---|---|
|
|
|
|
Outpainting
Expande la imagen proporcionalmente en todas las direcciones con relleno inteligente; ideal para ajustar la composición o convertir relaciones de aspecto.
- Establezca
functionenexpand. - Parámetros relacionados:
top_scale,bottom_scale,left_scaleyright_scalecontrolan las proporciones de expansión por dirección (por ejemplo, 1.5 = 1.5× tamaño). - Consejo de prompt: Describa la escena completa que espera ver después de la expansión.
Imagen de entrada | Imagen de salida |
|---|---|
|
|
Superresolución de imágenes
Mejora la claridad y aumenta la resolución de imágenes borrosas o de baja resolución; ideal para restaurar fotos antiguas o preparar impresiones en HD.
- Establezca
functionensuper_resolution. parameters.upscale_factor(1–4, predeterminado: 1) controla el escalado. El valor 1 mejora solo la nitidez, sin ampliar.- Consejo de prompt: Use "Superresolución de imagen" o describa el contenido de la imagen.
Imagen de entrada (imagen borrosa) | Imagen de salida (imagen nítida) |
|---|---|
|
|
Colorización de imágenes
Coloriza imágenes en blanco y negro o en escala de grises; útil para fotos históricas o arte lineal.
- Establezca
functionencolorization. - Prompt: Déjelo vacío para la colorización automática o especifique los colores de los elementos clave (por ejemplo, "fondo azul, hojas amarillas").
Imagen de entrada | Imagen de salida |
|---|---|
|
|
De arte lineal a imagen
Genera imágenes a partir de arte lineal y prompts de texto, incluyendo dibujo basado en garabatos; útil para conceptos arquitectónicos e ilustraciones.
-
Establezca
functionendoodle. -
Parámetro relacionado:
parameters.is_sketch— controla cómo el modelo procesa la entrada.false(predeterminado): El modelo extrae arte lineal de la entrada RGB y luego genera la imagen (RGB → arte lineal → imagen).true: El modelo genera directamente desde la entrada RGB como garabatos (RGB → imagen).
-
Prompt: Describa el contenido esperado; más detalle produce mejores resultados.
Ejemplo de solicitud 1: Arte lineal a imagen
{
"input": {
"function": "doodle",
"prompt": "A living room in a minimalist Nordic style.",
"base_image_url": "http://wanx.alicdn.com/material/20250318/doodle_1.png"
},
"parameters": {
"is_sketch": false
}
}
Capacidades | Imagen de entrada | Imagen de salida |
|---|---|---|
De arte lineal a imagen (is_sketch=false) |
|
Una sala de estar en un estilo nórdico minimalista. |
Dibujo basado en garabatos (is_sketch=true) |
|
Un árbol, en estilo de anime bidimensional. |
Generar imagen basada en un personaje de caricatura de referencia
Nota
Advertencia de riesgo legalEl uso de esta función para procesar personajes de caricatura protegidos por derechos de autor puede constituir una infracción de derechos de autor. Debe tener el derecho legal de utilizar el personaje referenciado o usar su propio personaje original. También debe asumir todas las responsabilidades legales relacionadas.
- Establezca
functionencontrol_cartoon_feature. - Formato de prompt: "El personaje de dibujos animados [detalles de acción/entorno]..."
Imagen de entrada | Imagen de salida |
|---|---|
|
|
Puesta en marcha
Mejores prácticas
- Sondeo asíncrono: Utilice intervalos de sondeo graduales (por ejemplo, cada 3 s durante 30 s, y luego aumente) para evitar límites de tasa.
- Ajuste de parámetros: Pruebe parámetros clave como
strengthen ensayos a pequeña escala antes de la producción para encontrar los valores óptimos. - Almacenamiento de imágenes: Las URL de resultados caducan después de 24 horas. Descargue y transfiera al almacenamiento persistente (por ejemplo, OSS) de inmediato.
Prevención de riesgos
- Manejo de errores: Verifique
task_statusen los resultados de la consulta. Si esFAILED, registrecodeymessagepara la solución de problemas. Los errores transitorios (por ejemplo, tiempos de espera agotados) pueden resolverse al reintentar. - Moderación de contenido: Todo el contenido de entrada y salida se revisa para garantizar el cumplimiento. El contenido que no cumpla las normas devuelve
DataInspectionFailed.
Referencia de API
Los parámetros de entrada y respuesta están documentados en la Referencia de la API de edición general de imágenes.
Facturación y limitación de tasa
-
Cuotas gratuitas y precios: Wan edición de imágenes 2.1.
-
Para la limitación de tasa del modelo, consulte Wanxiang.
-
Detalles de facturación:
- Facturado por imagen generada exitosamente. Los cargos se aplican solo cuando
task_statusesSUCCEEDED. - Las llamadas fallidas no generan cargos ni consumen la Cuota gratuita para nuevos usuarios.
- Facturado por imagen generada exitosamente. Los cargos se aplican solo cuando
Códigos de error
Si la llamada al modelo falla y devuelve un mensaje de error, consulte Códigos de error para su resolución.
FAQ
P: ¿Por qué falló mi tarea (FAILED)?Causas comunes:
- Fallo en la moderación de contenido: La entrada o la salida activó la política de seguridad.
- Error de parámetro: Parámetros de solicitud no válidos (por ejemplo, nombre de
functionincorrecto o URL inaccesible). - Error interno del modelo: problema de procesamiento inesperado. Verifique los campos
codeyerroren la respuesta de la consulta.





















Tejido






























