全部产品
Search
文档中心

Alibaba Cloud Model Studio:Pengeditan gambar - Wan2.5

更新时间:Dec 06, 2025

Model pengeditan gambar Wan2.5 mendukung satu hingga tiga gambar input dan satu hingga empat gambar output. Anda dapat menggunakan instruksi teks untuk melakukan pengeditan gambar tunggal dengan subjek yang konsisten, deteksi objek dan segmentasi, serta fusi multi-gambar.

Mulai

Prasyarat

Sebelum melakukan pemanggilan, dapatkan Kunci API dan atur Kunci API tersebut sebagai Variabel lingkungan. Untuk melakukan pemanggilan menggunakan SDK, instal SDK DashScope.

Contoh kode

Proses pemanggilan API dengan satu atau beberapa gambar input hampir identik.

Contoh ini menunjukkan fusi multi-gambar. Masukkan dua gambar ke dalam array images. Model akan menghasilkan satu gambar hasil fusi berdasarkan prompt teks.

Prompt input: Tempatkan jam alarm dari gambar 1 di samping vas bunga di atas meja makan pada gambar 2.

Gambar input 1

Gambar input 2

Gambar output

p1011667 (2)

p1011669 (2)

p1028883

Pemanggilan sinkron

Penting

Pastikan SDK Python DashScope versi 1.25.2 atau lebih baru dan SDK Java DashScope versi 2.22.2 atau lebih baru.

Versi lama dapat memicu error seperti "url error, please check url!". Instal atau upgrade SDK.

Python

Contoh ini mendukung tiga metode input gambar: URL publik, encoding Base64, dan jalur file lokal.

Contoh permintaan
import base64
import mimetypes
from http import HTTPStatus
from urllib.parse import urlparse, unquote
from pathlib import PurePosixPath

import dashscope
import requests
from dashscope import ImageSynthesis
import os

# Berikut adalah URL untuk wilayah Singapura. Jika Anda menggunakan model di wilayah China (Beijing), ganti URL dengan: https://dashscope.aliyuncs.com/api/v1
dashscope.base_http_api_url = 'https://dashscope-intl.aliyuncs.com/api/v1'

# Jika Anda belum mengonfigurasi variabel lingkungan, ganti baris berikut dengan Kunci API Model Studio Anda: api_key="sk-xxx"
# Kunci API untuk wilayah Singapura dan China (Beijing) berbeda. Dapatkan Kunci API: https://www.alibabacloud.com/help/en/model-studio/get-api-key
api_key = os.getenv("DASHSCOPE_API_KEY")

# --- Input gambar: Gunakan encoding Base64 ---
# Format encoding Base64 adalah 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("Format gambar tidak didukung atau tidak dikenali")
    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}"

"""
Metode input gambar:
Pilih salah satu dari tiga metode berikut.

1. Gunakan URL publik - Cocok untuk gambar yang dapat diakses publik.
2. Gunakan file lokal - Cocok untuk pengembangan dan pengujian lokal.
3. Gunakan encoding Base64 - Cocok untuk gambar pribadi atau skenario yang memerlukan transmisi terenkripsi.
"""

# [Metode 1] Gunakan URL gambar publik
image_url_1 = "https://img.alicdn.com/imgextra/i3/O1CN0157XGE51l6iL9441yX_!!6000000004770-49-tps-1104-1472.webp"
image_url_2 = "https://img.alicdn.com/imgextra/i3/O1CN01SfG4J41UYn9WNt4X1_!!6000000002530-49-tps-1696-960.webp"

# [Metode 2] Gunakan file lokal (mendukung jalur absolut dan relatif)
# Persyaratan format: file:// + jalur file
# Contoh (jalur absolut):
# image_url_1 = "file://" + "/path/to/your/image_1.png"     # Linux/macOS
# image_url_2 = "file://" + "C:/path/to/your/image_2.png"  # Windows
# Contoh (jalur relatif):
# image_url_1 = "file://" + "./image_1.png"                 # Gunakan jalur aktual Anda
# image_url_2 = "file://" + "./image_2.png"                # Gunakan jalur aktual Anda

# [Metode 3] Gunakan gambar yang di-encode Base64
# image_url_1 = encode_file("./image_1.png")               # Gunakan jalur aktual Anda
# image_url_2 = encode_file("./image_2.png")              # Gunakan jalur aktual Anda

print('----sync call, please wait a moment----')
rsp = ImageSynthesis.call(api_key=api_key,
                          model="wan2.5-i2i-preview",
                          prompt="Place the alarm clock from Image 1 next to the vase on the dining table in Image 2.",
                          images=[image_url_1, image_url_2],
                          negative_prompt="",
                          n=1,
                          # size="1280*1280",
                          prompt_extend=True,
                          watermark=False,
                          seed=12345)
print('response: %s' % rsp)
if rsp.status_code == HTTPStatus.OK:
    # Simpan gambar di direktori saat ini
    for result in rsp.output.results:
        file_name = PurePosixPath(unquote(urlparse(result.url).path)).parts[-1]
        with open('./%s' % file_name, 'wb+') as f:
            f.write(requests.get(result.url).content)
else:
    print('sync_call Failed, status_code: %s, code: %s, message: %s' %
          (rsp.status_code, rsp.code, rsp.message))
Contoh respons
URL berlaku selama 24 jam. Unduh gambar segera.
{
    "status_code": 200,
    "request_id": "8ad45834-4321-44ed-adf5-xxxxxx",
    "code": null,
    "message": "",
    "output": {
        "task_id": "3aff9ebd-35fc-4339-98a3-xxxxxx",
        "task_status": "SUCCEEDED",
        "results": [
            {
                "url": "https://dashscope-result-sh.oss-cn-shanghai.aliyuncs.com/xxx.png?Expires=xxx",
                "orig_prompt": "Place the alarm clock from Image 1 next to the vase on the dining table in Image 2.",
                "actual_prompt": "Place the blue alarm clock from Image 1 to the right of the vase on the dining table in Image 2, near the edge of the tablecloth. Keep the alarm clock facing the camera, parallel to the table, with its shadow naturally cast on the table."
            }
        ],
        "submit_time": "2025-10-23 16:18:16.009",
        "scheduled_time": "2025-10-23 16:18:16.040",
        "end_time": "2025-10-23 16:19:09.591",
        "task_metrics": {
            "TOTAL": 1,
            "FAILED": 0,
            "SUCCEEDED": 1
        }
    },
    "usage": {
        "image_count": 1
    }
}

Java

Contoh ini mendukung tiga metode input gambar: URL publik, encoding Base64, dan jalur file lokal.

Contoh permintaan
// 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.*;

public class Image2Image {

    static {
        // Berikut adalah URL untuk wilayah Singapura. Jika Anda menggunakan model di wilayah China (Beijing), ganti URL dengan: https://dashscope.aliyuncs.com/api/v1
        Constants.baseHttpApiUrl = "https://dashscope-intl.aliyuncs.com/api/v1";
    }

    // Jika Anda belum mengonfigurasi variabel lingkungan, ganti baris berikut dengan Kunci API Model Studio Anda: apiKey="sk-xxx"
    // Kunci API untuk wilayah Singapura dan China (Beijing) berbeda. Dapatkan Kunci API: https://www.alibabacloud.com/help/en/model-studio/get-api-key
    static String apiKey = System.getenv("DASHSCOPE_API_KEY");

    /**
     * Metode input gambar: Pilih salah satu dari tiga metode berikut.
     *
     * 1. Gunakan URL publik - Cocok untuk gambar yang dapat diakses publik.
     * 2. Gunakan file lokal - Cocok untuk pengembangan dan pengujian lokal.
     * 3. Gunakan encoding Base64 - Cocok untuk gambar pribadi atau skenario yang memerlukan transmisi terenkripsi.
     */

    //[Metode 1] URL publik
    static String imageUrl_1 = "https://img.alicdn.com/imgextra/i3/O1CN0157XGE51l6iL9441yX_!!6000000004770-49-tps-1104-1472.webp";
    static String imageUrl_2 = "https://img.alicdn.com/imgextra/i3/O1CN01SfG4J41UYn9WNt4X1_!!6000000002530-49-tps-1696-960.webp";

    //[Metode 2] Jalur file lokal (file://+jalur absolut atau file:///+jalur absolut)
    // static String imageUrl_1 = "file://" + "/your/path/to/image_1.png";    // Linux/macOS
    // static String imageUrl_2 = "file:///" + "C:/your/path/to/image_2.png";  // Windows

    //[Metode 3] Encoding Base64
    // static String imageUrl_1 = encodeFile("/your/path/to/image_1.png");
    // static String imageUrl_2 = encodeFile("/your/path/to/image_2.png");

    // Tetapkan daftar gambar yang akan diedit
    static List<String> imageUrls = new ArrayList<>();
    static {
        imageUrls.add(imageUrl_1);
        imageUrls.add(imageUrl_2);
    }

    public static void syncCall() {
        // Tetapkan parameter
        Map<String, Object> parameters = new HashMap<>();
        parameters.put("prompt_extend", true);
        parameters.put("watermark", false);
        parameters.put("seed", "12345");

        ImageSynthesisParam param =
                ImageSynthesisParam.builder()
                        .apiKey(apiKey)
                        .model("wan2.5-i2i-preview")
                        .prompt("Place the alarm clock from Image 1 next to the vase on the dining table in Image 2.")
                        .images(imageUrls)
                        .n(1)
                         //.size("1280*1280")
                        .negativePrompt("")
                        .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));
    }

    /**
     * Meng-encode file menjadi string Base64.
     * @param filePath Jalur file.
     * @return String Base64 dalam 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 tidak ada: " + filePath);
        }
        // Deteksi jenis MIME
        String mimeType = null;
        try {
            mimeType = Files.probeContentType(path);
        } catch (IOException e) {
            throw new IllegalArgumentException("Tidak dapat mendeteksi jenis file: " + filePath);
        }
        if (mimeType == null || !mimeType.startsWith("image/")) {
            throw new IllegalArgumentException("Format gambar tidak didukung atau tidak dikenali");
        }
        // Baca konten file dan encode
        byte[] fileBytes = null;
        try{
            fileBytes = Files.readAllBytes(path);
        } catch (IOException e) {
            throw new IllegalArgumentException("Tidak dapat membaca konten file: " + filePath);
        }

        String encodedString = Base64.getEncoder().encodeToString(fileBytes);
        return "data:" + mimeType + ";base64," + encodedString;
    }

    public static void main(String[] args) {
        syncCall();
    }
}
Contoh respons
URL berlaku selama 24 jam. Unduh gambar segera.
{
    "request_id": "d362685b-757f-4eac-bab5-xxxxxx",
    "output": {
        "task_id": "bfa7fc39-3d87-4fa7-b1e6-xxxxxx",
        "task_status": "SUCCEEDED",
        "results": [
            {
                "orig_prompt": "Place the alarm clock from Image 1 next to the vase on the dining table in Image 2.",
                "actual_prompt": "Place the blue alarm clock from Image 1 to the right of the vase on the dining table in Image 2, near the edge of the tablecloth. Keep the front of the alarm clock facing the camera, parallel to the vase.",
                "url": "https://dashscope-result-sh.oss-cn-shanghai.aliyuncs.com/xxx.png?Expires=xxx"
            }
        ],
        "task_metrics": {
            "TOTAL": 1,
            "SUCCEEDED": 1,
            "FAILED": 0
        }
    },
    "usage": {
        "image_count": 1
    }
}

Pemanggilan asinkron

Penting

Pastikan SDK Python DashScope versi 1.25.2 atau lebih baru dan SDK Java DashScope versi 2.22.2 atau lebih baru.

Versi lama dapat memicu error seperti "url error, please check url!". Instal atau upgrade SDK.

Python

Contoh ini menggunakan URL publik untuk mengirimkan gambar.

Contoh permintaan

import os
from http import HTTPStatus
from urllib.parse import urlparse, unquote
from pathlib import PurePosixPath
import dashscope
import requests
from dashscope import ImageSynthesis

# Berikut adalah URL untuk wilayah Singapura. Jika Anda menggunakan model di wilayah China (Beijing), ganti URL dengan: https://dashscope.aliyuncs.com/api/v1
dashscope.base_http_api_url = 'https://dashscope-intl.aliyuncs.com/api/v1'

# Jika Anda belum mengonfigurasi variabel lingkungan, ganti baris berikut dengan Kunci API Model Studio Anda: api_key="sk-xxx"
# Kunci API untuk wilayah Singapura dan China (Beijing) berbeda. Dapatkan Kunci API: https://www.alibabacloud.com/help/en/model-studio/get-api-key
api_key = os.getenv("DASHSCOPE_API_KEY")

# Gunakan URL gambar publik
image_url_1 = "https://img.alicdn.com/imgextra/i3/O1CN0157XGE51l6iL9441yX_!!6000000004770-49-tps-1104-1472.webp"
image_url_2 = "https://img.alicdn.com/imgextra/i3/O1CN01SfG4J41UYn9WNt4X1_!!6000000002530-49-tps-1696-960.webp"


def async_call():
    print('----create task----')
    task_info = create_async_task()
    print('----wait task----')
    wait_async_task(task_info)


# Buat tugas asinkron
def create_async_task():
    rsp = ImageSynthesis.async_call(api_key=api_key,
                                    model="wan2.5-i2i-preview",
                                    prompt="Place the alarm clock from Image 1 next to the vase on the dining table in Image 2.",
                                    images=[image_url_1, image_url_2],
                                    negative_prompt="",
                                    n=1,
                                    # size="1280*1280",
                                    prompt_extend=True,
                                    watermark=False,
                                    seed=12345)
    print(rsp)
    if rsp.status_code == HTTPStatus.OK:
        print(rsp.output)
    else:
        print('Failed, status_code: %s, code: %s, message: %s' %
              (rsp.status_code, rsp.code, rsp.message))
    return rsp


# Tunggu hingga tugas asinkron selesai
def wait_async_task(task):
    rsp = ImageSynthesis.wait(task=task, api_key=api_key)
    print(rsp)
    if rsp.status_code == HTTPStatus.OK:
        print(rsp.output)
        # simpan file ke direktori saat ini
        for result in rsp.output.results:
            file_name = PurePosixPath(unquote(urlparse(result.url).path)).parts[-1]
            with open('./%s' % file_name, 'wb+') as f:
                f.write(requests.get(result.url).content)
    else:
        print('Failed, status_code: %s, code: %s, message: %s' %
              (rsp.status_code, rsp.code, rsp.message))


# Dapatkan informasi tugas asinkron
def fetch_task_status(task):
    status = ImageSynthesis.fetch(task=task, api_key=api_key)
    print(status)
    if status.status_code == HTTPStatus.OK:
        print(status.output.task_status)
    else:
        print('Failed, status_code: %s, code: %s, message: %s' %
              (status.status_code, status.code, status.message))


# Batalkan tugas asinkron. Hanya tugas dalam status PENDING yang dapat dibatalkan.
def cancel_task(task):
    rsp = ImageSynthesis.cancel(task=task, api_key=api_key)
    print(rsp)
    if rsp.status_code == HTTPStatus.OK:
        print(rsp.output.task_status)
    else:
        print('Failed, status_code: %s, code: %s, message: %s' %
              (rsp.status_code, rsp.code, rsp.message))


if __name__ == '__main__':
    async_call()

Contoh respons

1. Contoh respons untuk permintaan pembuatan tugas

{
	"status_code": 200,
	"request_id": "31b04171-011c-96bd-ac00-f0383b669cc7",
	"code": "",
	"message": "",
	"output": {
		"task_id": "4f90cf14-a34e-4eae-xxxxxxxx",
		"task_status": "PENDING",
		"results": []
	},
	"usage": null
}

2. Contoh respons untuk permintaan kueri tugas

URL berlaku selama 24 jam. Unduh gambar segera.
{
    "status_code": 200,
    "request_id": "8ad45834-4321-44ed-adf5-xxxxxx",
    "code": null,
    "message": "",
    "output": {
        "task_id": "3aff9ebd-35fc-4339-98a3-xxxxxx",
        "task_status": "SUCCEEDED",
        "results": [
            {
                "url": "https://dashscope-result-sh.oss-cn-shanghai.aliyuncs.com/xxx.png?Expires=xxx",
                "orig_prompt": "Place the alarm clock from Image 1 next to the vase on the dining table in Image 2.",
                "actual_prompt": "Place the blue alarm clock from Image 1 to the right of the vase on the dining table in Image 2, near the edge of the tablecloth. Keep the alarm clock facing the camera, parallel to the table, with its shadow naturally cast on the table."
            }
        ],
        "submit_time": "2025-10-23 16:18:16.009",
        "scheduled_time": "2025-10-23 16:18:16.040",
        "end_time": "2025-10-23 16:19:09.591",
        "task_metrics": {
            "TOTAL": 1,
            "FAILED": 0,
            "SUCCEEDED": 1
        }
    },
    "usage": {
        "image_count": 1
    }
}

Java

Contoh ini secara default menggunakan URL publik untuk mengirimkan gambar.

Contoh permintaan

// Copyright (c) Alibaba, Inc. and its affiliates.

import com.alibaba.dashscope.aigc.imagesynthesis.ImageSynthesis;
import com.alibaba.dashscope.aigc.imagesynthesis.ImageSynthesisListResult;
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.task.AsyncTaskListParam;
import com.alibaba.dashscope.utils.Constants;
import com.alibaba.dashscope.utils.JsonUtils;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class Image2Image {

    static {
        // Berikut adalah URL untuk wilayah Singapura. Jika Anda menggunakan model di wilayah China (Beijing), ganti URL dengan: https://dashscope.aliyuncs.com/api/v1
        Constants.baseHttpApiUrl = "https://dashscope-intl.aliyuncs.com/api/v1";
    }

    // Jika Anda belum mengonfigurasi variabel lingkungan, ganti baris berikut dengan Kunci API Model Studio Anda: apiKey="sk-xxx"
    // Kunci API untuk wilayah Singapura dan China (Beijing) berbeda. Dapatkan Kunci API: https://www.alibabacloud.com/help/en/model-studio/get-api-key
    static String apiKey = System.getenv("DASHSCOPE_API_KEY");

    //URL publik
    static String imageUrl_1 = "https://img.alicdn.com/imgextra/i3/O1CN0157XGE51l6iL9441yX_!!6000000004770-49-tps-1104-1472.webp";
    static String imageUrl_2 = "https://img.alicdn.com/imgextra/i3/O1CN01SfG4J41UYn9WNt4X1_!!6000000002530-49-tps-1696-960.webp";

    // Tetapkan daftar gambar yang akan diedit
    static List<String> imageUrls = new ArrayList<>();
    static {
        imageUrls.add(imageUrl_1);
        imageUrls.add(imageUrl_2);
    }

    public static void asyncCall() {
        // Tetapkan parameter
        Map<String, Object> parameters = new HashMap<>();
        parameters.put("prompt_extend", true);
        parameters.put("watermark", false);
        parameters.put("seed", "12345");

        ImageSynthesisParam param =
                ImageSynthesisParam.builder()
                        .apiKey(apiKey)
                        .model("wan2.5-i2i-preview")
                        .prompt("Place the alarm clock from Image 1 next to the vase on the dining table in Image 2.")
                        .images(imageUrls)
                        .n(1)
                        //.size("1280*1280")
                        .negativePrompt("")
                        .parameters(parameters)
                        .build();
        ImageSynthesis imageSynthesis = new ImageSynthesis();
        ImageSynthesisResult result = null;
        try {
            System.out.println("---async call, please wait a moment----");
            result = imageSynthesis.asyncCall(param);
        } catch (ApiException | NoApiKeyException e){
            throw new RuntimeException(e.getMessage());
        }

        System.out.println(JsonUtils.toJson(result));

        String taskId = result.getOutput().getTaskId();

        System.out.println("taskId=" + taskId);


        try {
            result = imageSynthesis.wait(taskId, apiKey);
        } catch (ApiException | NoApiKeyException e){
            throw new RuntimeException(e.getMessage());
        }
        System.out.println(JsonUtils.toJson(result));
        System.out.println(JsonUtils.toJson(result.getOutput()));
    }

    public static void listTask() throws ApiException, NoApiKeyException {
        ImageSynthesis is = new ImageSynthesis();
        AsyncTaskListParam param = AsyncTaskListParam.builder().build();
        param.setApiKey(apiKey);
        ImageSynthesisListResult result = is.list(param);
        System.out.println(result);
    }

    public void fetchTask(String taskId) throws ApiException, NoApiKeyException {
        ImageSynthesis is = new ImageSynthesis();
        // Jika Anda telah menyetel DASHSCOPE_API_KEY sebagai variabel lingkungan, Anda dapat mengosongkan apiKey.
        ImageSynthesisResult result = is.fetch(taskId, apiKey);
        System.out.println(result.getOutput());
        System.out.println(result.getUsage());
    }


    public static void main(String[] args) {
        asyncCall();
    }
}

Contoh respons

1. Contoh respons untuk permintaan pembuatan tugas

{
	"request_id": "5dbf9dc5-4f4c-9605-85ea-542f97709ba8",
	"output": {
		"task_id": "7277e20e-aa01-4709-xxxxxxxx",
		"task_status": "PENDING"
	}
}

2. Contoh respons untuk permintaan kueri tugas

URL berlaku selama 24 jam. Unduh gambar segera.
{
    "request_id": "d362685b-757f-4eac-bab5-xxxxxx",
    "output": {
        "task_id": "bfa7fc39-3d87-4fa7-b1e6-xxxxxx",
        "task_status": "SUCCEEDED",
        "results": [
            {
                "orig_prompt": "Place the alarm clock from Image 1 next to the vase on the dining table in Image 2.",
                "actual_prompt": "Place the blue alarm clock from Image 1 to the right of the vase on the dining table in Image 2, near the edge of the tablecloth. Keep the front of the alarm clock facing the camera, parallel to the vase.",
                "url": "https://dashscope-result-sh.oss-cn-shanghai.aliyuncs.com/xxx.png?Expires=xxx"
            }
        ],
        "task_metrics": {
            "TOTAL": 1,
            "SUCCEEDED": 1,
            "FAILED": 0
        }
    },
    "usage": {
        "image_count": 1
    }
}

curl

Contoh ini mencakup dua langkah: membuat tugas dan mengkueri hasilnya.

Catatan
  • Untuk pemanggilan asinkron, Anda harus menyetel parameter header X-DashScope-Async ke enable.

  • task_id untuk tugas asinkron berlaku untuk kueri selama 24 jam. Setelah periode ini, status tugas berubah menjadi UNKNOWN.

Langkah 1: Kirim permintaan untuk membuat tugas

Permintaan ini mengembalikan ID tugas (task_id).

Contoh permintaan
 curl --location 'https://dashscope-intl.aliyuncs.com/api/v1/services/aigc/image2image/image-synthesis' \
    -H 'X-DashScope-Async: enable' \
    -H "Authorization: Bearer $DASHSCOPE_API_KEY" \
    -H 'Content-Type: application/json' \
    -d '{
    "model": "wan2.5-i2i-preview",
    "input": {
        "prompt": "Place the alarm clock from Image 1 next to the vase on the dining table in Image 2.",
        "images": [
            "https://img.alicdn.com/imgextra/i3/O1CN0157XGE51l6iL9441yX_!!6000000004770-49-tps-1104-1472.webp",
            "https://img.alicdn.com/imgextra/i3/O1CN01SfG4J41UYn9WNt4X1_!!6000000002530-49-tps-1696-960.webp"
        ]
    },
    "parameters": {
        "n": 1
    }
}'

Contoh respons

{
    "output": {
        "task_status": "PENDING",
        "task_id": "0385dc79-5ff8-4d82-bcb6-xxxxxx"
    },
    "request_id": "4909100c-7b5a-9f92-bfe5-xxxxxx"
}

Langkah 2: Kueri hasil berdasarkan ID tugas

Gunakan task_id dari langkah sebelumnya untuk melakukan polling status tugas melalui API hingga task_status berubah menjadi SUCCEEDED atau FAILED.

Contoh permintaan

Ganti 86ecf553-d340-4e21-xxxxxxxxx dengan ID tugas yang sebenarnya.

Kunci API untuk wilayah Singapura dan Beijing berbeda. Buat Kunci API.
`base_url` berikut untuk wilayah Singapura. Untuk model di wilayah Beijing, ganti `base_url` dengan `https://dashscope.aliyuncs.com/api/v1/tasks/86ecf553-d340-4e21-xxxxxxxxx`.
curl -X GET https://dashscope-intl.aliyuncs.com/api/v1/tasks/86ecf553-d340-4e21-xxxxxxxxx \
--header "Authorization: Bearer $DASHSCOPE_API_KEY"

Contoh respons

URL gambar berlaku selama 24 jam. Harap unduh gambar segera.
{
    "request_id": "d1f2a1be-9c58-48af-b43f-xxxxxx",
    "output": {
        "task_id": "7f4836cd-1c47-41b3-b3a4-xxxxxx",
        "task_status": "SUCCEEDED",
        "submit_time": "2025-09-23 22:14:10.800",
        "scheduled_time": "2025-09-23 22:14:10.825",
        "end_time": "2025-09-23 22:15:23.456",
        "results": [
            {
                "orig_prompt": "Place the alarm clock from image 1 next to the vase on the dining table in image 2.",
                "url": "https://dashscope-result-sh.oss-cn-shanghai.aliyuncs.com/xxx.png?Expires=xxx"
            }
        ],
        "task_metrics": {
            "TOTAL": 1,
            "FAILED": 0,
            "SUCCEEDED": 1
        }
    },
    "usage": {
        "image_count": 1
    }
}

Ketersediaan model

Untuk daftar model dan harga, lihat Pengeditan gambar umum Wan2.5.

Parameter input

Gambar input (images)

images adalah array yang mendukung pengiriman satu hingga tiga gambar untuk diedit atau difusikan. Gambar input harus memenuhi persyaratan berikut:

  • Format gambar: JPEG, JPG, PNG (saluran alfa tidak didukung), BMP, dan WEBP didukung.

  • Resolusi gambar: Lebar dan tinggi gambar harus berada dalam rentang 384 hingga 5.000 piksel.

  • Ukuran file: Satu file gambar tidak boleh melebihi 10 MB.

// Contoh ini hanya menunjukkan struktur bidang images. Input berisi 2 gambar.
{
    "images": [
        "https://img.alicdn.com/imgextra/i4/O1CN01TlDlJe1LR9zso3xAC_!!6000000001295-2-tps-1104-1472.png",
        "https://img.alicdn.com/imgextra/i4/O1CN01M9azZ41YdblclkU6Z_!!6000000003082-2-tps-1696-960.png"
    ]
}

Urutan input gambar

Untuk input multi-gambar, urutan gambar ditentukan oleh posisinya dalam array. Oleh karena itu, nomor gambar yang dirujuk dalam prompt harus sesuai dengan urutan dalam array gambar. Misalnya, gambar pertama dalam array adalah "gambar 1", yang kedua adalah "gambar 2", atau Anda dapat menggunakan penanda seperti "[Gambar 1]" dan "[Gambar 2]".

Gambar input

Gambar output

image (19)-转换自-png

Gambar 1

image (20)-转换自-png

Gambar 2

04e0fc39-7ad6-41e0-9df9-1f69ac3ce825-转换自-png

Prompt: Pindahkan gambar 1 ke atas gambar 2

36ed450d-bd54-4169-b13f-3d0f26d9d360-转换自-png

Prompt: Pindahkan gambar 2 ke atas gambar 1

Metode input gambar

Model ini mendukung tiga metode berikut untuk mengirimkan gambar:

Metode 1: URL publik

  • Sediakan URL gambar yang dapat diakses publik dan mendukung protokol HTTP atau HTTPS.

  • Nilai contoh: https://xxxx/img.png.

  • Skenario yang berlaku: Gambar sudah di-hosting di Object Storage Service (OSS) atau layanan hosting gambar publik.

Metode 2: Encoding Base64

Ubah file gambar menjadi string yang di-encode Base64 dan gabungkan dalam format: data:{MIME_type};base64,{base64_data}.

  • Nilai contoh: data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABDg...... (Ini hanya cuplikan karena batasan panjang.) Saat memanggil API, Anda harus mengirimkan string lengkapnya.

  • {base64_data}: Mewakili string yang di-encode Base64 dari file gambar.

  • {MIME_type}: Mewakili jenis media gambar, yang harus sesuai dengan format file.

    Format gambar

    Jenis MIME

    JPEG

    image/jpeg

    JPG

    image/jpeg

    PNG

    image/png

    BMP

    image/bmp

    WEBP

    image/webp

  • Skenario yang berlaku: Cocok untuk gambar pribadi atau skenario yang memerlukan transmisi terenkripsi.

Contoh kode: Encoding Base64 gambar

import os
import base64
import mimetypes

# Formatnya adalah data:{mime_type};base64,{base64_data}
def encode_file(file_path):
    mime_type, _ = mimetypes.guess_type(file_path)
    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}"
        
        
# Panggil fungsi encoding. Ganti "/path/to/your/image.png" dengan jalur ke file gambar lokal Anda, jika tidak kode tidak akan berjalan.
image = encode_file("/path/to/your/image.png")

Metode 3: Jalur file lokal (hanya SDK)

  • SDK Python: Mendukung pengiriman jalur absolut dan relatif file. Aturan jalur file sebagai berikut:

    Sistem

    Jalur file yang dikirim

    Contoh (jalur absolut)

    Contoh (jalur relatif)

    Linux atau macOS

    file://{jalur absolut atau relatif file}

    file:///home/images/test.png

    file://./images/test.png

    Windows

    file://D:/images/test.png

    file://./images/test.png

  • SDK Java: Hanya mendukung pengiriman jalur absolut file. Aturan jalur file sebagai berikut:

    Sistem

    Jalur file yang dikirim

    Contoh (jalur absolut)

    Linux atau macOS

    file://{jalur absolut file}

    file:///home/images/test.png

    Windows

    file:///{jalur absolut file}

    file:///D:/images/test.png

  • Skenario yang berlaku: Cocok untuk pengujian cepat di lingkungan pengembangan lokal.

Parameter opsional

Model ini juga menyediakan beberapa parameter opsional untuk menyesuaikan efek generasi gambar. Parameter terpenting meliputi:

  • size: Menentukan resolusi gambar output dalam piksel, menggunakan format lebar*tinggi. Nilai default adalah 1280*1280. Resolusi harus berada dalam rentang 768×768 hingga 1280×1280 piksel. Rasio aspek harus antara 1:4 dan 4:1.

    Resolusi dan rasio aspek yang direkomendasikan

    • 1280*1280: 1:1

    • 1024*1024: 1:1

    • 800*1200: 2:3

    • 1200*800: 3:2

    • 960*1280: 3:4

    • 1280*960: 4:3

    • 720*1280: 9:16

    • 1280*720: 16:9

    • 1344*576: 21:9

    Jika Anda tidak menentukan parameter size, sistem akan menghasilkan gambar berukuran 1280×1280 piksel secara default dan berusaha mempertahankan rasio aspek gambar input:

    • Untuk input gambar tunggal, rasio aspek sama dengan gambar input.

    • Untuk input multi-gambar, rasio aspek sama dengan gambar terakhir dalam array input.

  • n: Menetapkan jumlah gambar output. Nilainya dapat berupa bilangan bulat dari 1 hingga 4. Default-nya adalah 4. Kami merekomendasikan menyetelnya ke 1 untuk pengujian.

  • negative_prompt: Prompt negatif menggambarkan konten yang tidak ingin muncul dalam gambar, seperti "blurry" atau "extra fingers". Parameter ini hanya digunakan untuk membantu mengoptimalkan kualitas generasi.

  • watermark: Menentukan apakah akan menambahkan Watermark. Watermark terletak di pojok kanan bawah gambar dengan tulisan "AI-generated". Default-nya adalah false, yang berarti tidak ada Watermark yang ditambahkan.

  • seed: Seed bilangan acak. Nilainya harus berada dalam rentang [0, 2147483647]. Jika Anda tidak memberikan seed, algoritma akan secara otomatis menghasilkan bilangan acak untuk digunakan. Untuk menjaga agar konten yang dihasilkan relatif konsisten, gunakan nilai seed yang sama untuk setiap permintaan.

    Catatan: Karena generasi model bersifat probabilistik, penggunaan seed yang sama tidak menjamin hasilnya identik setiap kali.

Parameter output

  • Format gambar: PNG.

  • Jumlah gambar: Satu hingga empat.

  • Resolusi gambar: Anda dapat menentukan resolusi menggunakan parameter input size. Jika parameter ini tidak ditentukan, lihat deskripsi parameter size.

    Semua gambar output akan memiliki resolusi yang sama.

Contoh

Model pengeditan gambar Wan2.5 saat ini tidak mendukung pembuatan set gambar.

Fusi multi-gambar

Gambar input

Gambar output

p1020900-转换自-png

p1020802-转换自-png

Pindahkan lukisan malam berbintang dari gambar 2 ke casing ponsel pada gambar 1.

p1020907-转换自-png

p1020740-转换自-png

Gunakan font dan gaya teks "Wan2.5" dari [Gambar 1] sebagai satu-satunya referensi. Pertahankan lebar goresan dan kurva tanpa perubahan. Pindahkan secara tepat tekstur kertas berlapis dari [Gambar 2] ke teks tersebut.

p1020909-转换自-png

image.png

Gunakan dua gambar referensi untuk menggambar ulang secara terarah: Gunakan [Gambar 2] sebagai referensi bentuk dan struktur tas. Gunakan bulu burung beo di [Gambar 1] sebagai referensi warna dan tekstur. Pindahkan secara tepat warna dan tekstur bulu burung beo ke material permukaan tas di [Gambar 2].

p1020911-转换自-png

p1020881-转换自-png

Gunakan komposisi dan tekstur kaca buram desain kartu nama di [Gambar 1] sebagai templat untuk menghasilkan kartu kerja vertikal bagi orang di [Gambar 2]. Kartunya memiliki sudut membulat dan semi-transparan, dengan highlight lembut dan bayangan ringan. Bust orang tersebut ditempatkan di area tengah atas. Nama, jabatan, perusahaan, dan nomor telepon disusun di pojok kiri bawah menggunakan font sans-serif minimalis dengan ruang putih seimbang. Di pojok kanan atas, tempatkan gambar kartun 3D lucu orang tersebut dari [Gambar 1], menembus batas hingga setengah mengambang keluar dari kartu dan melemparkan bayangan ringan, menciptakan lapisan dan fokus visual. Pencahayaan keseluruhan cerah dan alami, dengan detail material realistis. Jangan tambahkan pola atau elemen ekstra apa pun.

Pemahaman gambar

Deteksi objek dan pelokalisasi
Mendeteksi objek tertentu dalam gambar dan menghasilkan gambar dengan Kotak pembatas dan Label.

Gambar input

Gambar output

p1020870-转换自-png

p1020739-转换自-png (1)

Detect the sunflowers and pumpkins in the image. Draw bounding boxes and add labels.

Segmentasi instans
Model menghasilkan wilayah warna unik untuk setiap objek individual dalam gambar, menunjukkan garis besar lengkapnya. Misalnya, area ungu pada gambar output mewakili instans headphone yang telah disegmentasi.

Gambar input

Gambar output

p1020871-转换自-png

p1020872-转换自-png

Segment the headphones in the image.

Pelestarian fitur subjek

Input image

Output image

p1020767-转换自-png

p1020768-转换自-png

Hasilkan foto yang sangat detail dari seorang gadis yang melakukan cosplay berdasarkan ilustrasi ini, di Comiket. Harus merupakan orang sungguhan yang sedang cosplay. Tiru secara persis pose, postur tubuh, gerakan tangan, ekspresi wajah, dan framing kamera seperti pada ilustrasi aslinya. Pertahankan sudut, perspektif, dan komposisi yang sama tanpa penyimpangan apa pun.

p1020761-转换自-png

p1020759-转换自-png

Hasilkan tiga instans orang dari foto tersebut dalam sebuah adegan kantor. Satu sedang duduk di meja sambil bekerja. Yang lain berdiri sambil minum kopi. Yang ketiga bersandar di meja sambil membaca buku. Ketiganya adalah orang yang sama dari foto tersebut.

p1020799-转换自-png

p1020756-转换自-png

Hasilkan rangkaian citra empat panel dari foto ini. Pada panel pertama, gadis tersebut menghadap kamera. Pada panel kedua, ia mengangkat tangan kanannya untuk menyisir rambutnya. Pada panel ketiga, ia melambaikan tangan dengan antusias kepada penonton. Pada panel keempat, ia tersenyum dengan mata tertutup.

Modifikasi dan peningkatan skala

Feature

Input image

Output image

Modify element

image

image

Ubah gaun bermotif bunga menjadi gaun panjang berenda bergaya vintage dengan detail bordir indah pada kerah dan manset.

Modify lighting

p1020752-转换自-png

p1020753-转换自-png

Tambahkan highlight kecil yang berkilauan pada permukaan bintang laut agar tampak bercahaya terhadap latar belakang matahari terbenam.

Upscale subject element

p1020744-转换自-png

p1020742-转换自-png

Perbesar sapi dalam citra.

Upscale image details

image (18)-转换自-png

5eecdaf48460cde5c4be102460b058055561df7a15a7389475b8339e1c4c24831b75b38faadcd24bec177c308ebd5304b8b330b51f13ddb214325c71432889afadec7664fb1a132d34d1f46a5de9c95c9f982413966336104fb4c8ed7016461c-转换自-png

Perbesar tampilan dan tunjukkan cabang tempat burung beo bertengger.

Ekstraksi elemen

Input image

Output image

20251029170404

image

Ekstrak semua item pakaian yang dikenakan oleh orang dalam citra tersebut. Susun secara rapi di latar belakang putih.

Generasi gambar dari sketsa

Input image

Output image

p1020874-转换自-png

p1020875-转换自-png

Hasilkan citra nyata baru berdasarkan sketsa ini, yaitu pemandangan desa Mediterania yang menawan dengan bangunan batu rustic yang memiliki atap terakota, daun jendela kayu, serta balkon yang dihiasi pakaian yang sedang dijemur. Latar depan dipenuhi tanaman hijau subur, termasuk tanaman merambat dan bunga-bunga yang sedang mekar, menciptakan suasana yang hidup dan bersemangat. Arsitekturnya menampilkan detail rumit seperti pintu lengkung dan susunan batu bermotif, yang membangkitkan kesan sejarah dan kehangatan], [hari yang cerah dan bersinar dengan langit biru jernih, menghasilkan bayangan lembut di jalanan berbatu dan memperkuat nuansa hangat pada bangunan-bangunan tersebut. Di latar belakang, perbukitan bergelombang dan pegunungan yang jauh memberikan latar yang indah, menambah kedalaman dan ketenangan pada pemandangan ini.

Generasi teks

Gambar input

Gambar output

p1020745-转换自-png

p1020738-转换自-png

Add the title "微距摄影" in large, rounded, white font to the upper-left corner of the image. Below the title, add the subtitle "勤劳就有收获" in a smaller, light green font.

Penghapusan Tanda Air

Gambar input

Gambar output

p1020805-转换自-png

p1020743-转换自-png

Remove all text from the upper-left corner.

Outpainting

Gambar input

Gambar output

image (18)-转换自-png

5eecdaf48460cde5c4be102460b058055561df7a15a7389475b8339e1c4c24831b75b38faadcd24bec177c308ebd53049e07d7fc490946139fdff014838b673b9dff828674c79200daa0c9c7ebedc8db2df6ace13bf592fa4fb4c8ed7016461c-转换自-png

Outpaint the image to generate a long shot photo.

Penagihan dan Pembatasan laju

  • Untuk kuota gratis dan harga satuan, lihat Model dan harga.

  • Untuk batas laju, lihat Wan.

  • Deskripsi penagihan:

    • Penagihan didasarkan pada jumlah gambar yang berhasil dihasilkan. Anda hanya dikenai biaya ketika API mengembalikan task_status bernilai SUCCEEDED dan gambar berhasil dihasilkan.

    • Pemanggilan model yang gagal atau error pemrosesan tidak dikenai biaya dan tidak mengurangi kuota gratis Anda.

Referensi API

Untuk parameter input dan output, lihat Referensi API Pengeditan Gambar Umum Wan 2.5.

FAQ

T: Saya menggunakan Pengeditan Gambar Umum Wan2.1. Jika saya beralih ke wan2.5, apakah saya perlu mengubah cara memanggil SDK?

J: Ya. Desain parameter berbeda untuk kedua versi tersebut: