Topik ini menjelaskan parameter input dan output model pengeditan citra umum Wan.
Model ini hanya tersedia di wilayah China (Beijing). Untuk menggunakan model ini, Anda harus menggunakan API key untuk wilayah China (Beijing).
Model ini mampu menjalankan berbagai tugas pengeditan citra berdasarkan instruksi sederhana, cocok untuk skenario seperti outpainting, penghapusan watermark, style transfer, restorasi citra, dan peningkatan citra. Fitur-fitur berikut didukung:
Stilisasi citra: Stilisasi global dan lokal.
Pengeditan konten citra: Pengeditan berbasis instruksi (menambah atau memodifikasi konten citra berdasarkan instruksi tanpa menentukan wilayah), inpainting (menambah, menghapus, atau memodifikasi konten citra di wilayah tertentu), serta penghapusan teks dan watermark (bahasa Tiongkok dan Inggris).
Optimisasi ukuran dan resolusi citra: Outpainting (memperluas citra berdasarkan rasio tertentu) dan super-resolusi citra (penskalaan definisi tinggi).
Pemrosesan warna citra: Pewarnaan citra (mengubah citra hitam-putih atau grayscale menjadi citra berwarna).
Generasi berdasarkan citra referensi: Line art ke citra (mengekstraksi line art dari citra input untuk menghasilkan citra baru) dan generasi berbasis referensi karakter kartun.
Panduan terkait: Pengeditan citra - Wan 2.1
Ikhtisar model
Model | Harga satuan | Batas laju (dibagi bersama oleh Akun Alibaba Cloud dan Pengguna RAM) | |
Batas RPS untuk pengiriman tugas | Jumlah tugas konkuren | ||
wanx2.1-imageedit | $0,020070/citra | 2 | 2 |
Peragaan kinerja
Fitur | Citra input | Prompt input | Citra keluaran |
Stilisasi global |
| Convert to French picture book style |
|
Stilisasi lokal |
| Change the house to a wooden style. |
|
Pengeditan berbasis instruksi |
| Change her hair to red. |
|
Inpainting | Input image
Input mask image (The white area is the mask area)
| A ceramic rabbit holding a ceramic flower. | Output image
|
Penghapusan teks dan watermark |
| Remove the text from the image. |
|
Outpainting |
| A green fairy. |
|
Super-resolusi citra | Blurry image
| Image super-resolution. | Clear image
|
Pewarnaan citra |
| Blue background, yellow leaves. |
|
Seni Garis ke Citra | Input image
| A living room in a minimalist Nordic style. | Extract the line art from the original image and generate a new image
|
Hasilkan citra berdasarkan referensi karakter kartun | Input reference image (cartoon character)
| The cartoon character cautiously peeks out, peering at a brilliant blue gem in the room. | Output image
|
Prasyarat
Anda dapat memanggil API pengeditan citra umum Wan menggunakan HTTP dan SDK DashScope.
Sebelum melakukan panggilan, dapatkan API key dan atur API key sebagai variabel lingkungan.
Untuk melakukan panggilan menggunakan SDK, instal SDK DashScope. SDK tersedia untuk Python dan Java.
HTTP
Model citra memerlukan waktu pemrosesan yang lama. Untuk menghindari timeout permintaan, panggilan HTTP hanya mendukung pengambilan hasil model secara asinkron. Anda harus membuat dua permintaan:
Buat tugas untuk mendapatkan ID tugas: Kirim permintaan untuk membuat tugas. Permintaan ini mengembalikan task_id.
Kueri hasil berdasarkan ID tugas: Gunakan ID tugas dari langkah sebelumnya untuk mengkueri status dan hasil tugas. Jika tugas berhasil dijalankan, URL citra akan dikembalikan. URL tersebut berlaku selama 24 jam.
Setelah tugas dibuat, tugas tersebut ditambahkan ke antrian dan menunggu penjadwalan. Anda kemudian harus memanggil API "kueri hasil berdasarkan ID tugas" untuk mengambil status dan hasil tugas.
Model pengeditan citra umum memerlukan waktu sekitar 5 hingga 15 detik untuk memproses permintaan. Waktu pemrosesan aktual bergantung pada jumlah tugas dalam antrian dan kondisi jaringan.
Langkah 1: Buat tugas dan dapatkan ID tugas
POST https://dashscope.aliyuncs.com/api/v1/services/aigc/image2image/image-synthesis
Parameter permintaan | Stilisasi globalPass a local file (base64)Contoh berikut menunjukkan cara meneruskan parameter dalam Base64 untuk stilisasi global. Karena string terenkripsi Base64 panjang, unduh image_base64 dan salin seluruh kontennya sebagai nilai parameter Untuk informasi lebih lanjut tentang format data, lihat Metode input. Stilisasi lokalPengeditan berbasis instruksiDeskripsi: Menambah atau memodifikasi konten citra berdasarkan instruksi tanpa menentukan wilayah. InpaintingDeskripsi: Menambah, menghapus, atau memodifikasi konten citra di wilayah tertentu. Penghapusan teks dan watermarkDeskripsi: Fitur ini mendukung penghapusan teks dan watermark dalam bahasa Tiongkok dan Inggris. OutpaintingDeskripsi: Fitur ini mendukung outpainting ke arah atas, bawah, kiri, dan kanan berdasarkan rasio tertentu. Super-resolusi citraDeskripsi: Fitur ini mendukung penskalaan definisi tinggi untuk citra buram. Pewarnaan citraDeskripsi: Mengubah citra hitam-putih atau grayscale menjadi citra berwarna. Line art ke citraDeskripsi: Mengekstraksi line art dari citra input dan menghasilkan citra baru berdasarkan line art yang diekstraksi. Hasilkan gambar dari referensi karakter kartunDeskripsi: Fitur ini mendukung generasi citra berdasarkan referensi karakter kartun. |
Header permintaan | |
Content-Type Tipe konten permintaan. Atur parameter ini ke | |
Authorization Kredensial otentikasi identitas untuk permintaan. API ini menggunakan Kunci API Model Studio untuk otentikasi identitas. Contoh: Bearer sk-xxxx. | |
X-DashScope-Async Parameter konfigurasi pemrosesan asinkron. Permintaan HTTP hanya mendukung pemrosesan asinkron. Anda harus mengatur parameter ini ke Penting Jika header permintaan ini tidak ada, pesan kesalahan "current user api does not support synchronous calls" dikembalikan. | |
Body permintaan | |
model Nama model. Contoh: wanx2.1-imageedit. | |
input Informasi input dasar, seperti prompt. | |
parameters Parameter pengeditan citra. |
Parameter respons | Respons berhasilSimpan task_id untuk mengkueri status dan hasil tugas. Respons kesalahanPembuatan tugas gagal. Untuk informasi lebih lanjut, lihat Pesan kesalahan untuk menyelesaikan masalah. |
output Informasi output tugas. | |
request_id ID permintaan unik. Anda dapat menggunakan ID ini untuk melacak dan memecahkan masalah. | |
code Kode kesalahan untuk permintaan yang gagal. Parameter ini tidak dikembalikan jika permintaan berhasil. Untuk informasi lebih lanjut, lihat Pesan kesalahan. | |
message Informasi detail tentang permintaan yang gagal. Parameter ini tidak dikembalikan jika permintaan berhasil. Untuk informasi lebih lanjut, lihat Pesan kesalahan. |
Langkah 2: Kueri hasil berdasarkan ID tugas
GET https://dashscope.aliyuncs.com/api/v1/tasks/{task_id}
Parameter permintaan | Kueri hasil tugasGanti |
Header permintaan | |
Authorization Kredensial otentikasi identitas untuk permintaan. API ini menggunakan Kunci API Model Studio untuk otentikasi identitas. Contoh: Bearer sk-xxxx. | |
Parameter Jalur | |
task_id ID tugas. |
Parameter respons | Eksekusi tugas berhasilData tugas, seperti status tugas dan URL citra, hanya disimpan selama 24 jam dan secara otomatis dihapus setelah periode ini. Anda harus segera menyimpan citra yang dihasilkan. Eksekusi tugas gagalJika tugas gagal, task_status diatur ke FAILED, dan kode kesalahan serta pesan disediakan. Untuk informasi lebih lanjut, lihat Pesan kesalahan untuk menyelesaikan masalah. Tugas sebagian gagalModel dapat menghasilkan beberapa citra dalam satu tugas. Jika setidaknya satu citra berhasil dihasilkan, status tugas ditandai sebagai |
output Informasi output tugas. | |
usage Statistik penggunaan untuk permintaan. Hanya citra yang berhasil dihasilkan yang dihitung. | |
request_id ID permintaan unik. Anda dapat menggunakan ID ini untuk melacak dan memecahkan masalah. |
DashScope SDK
Pastikan Anda telah menginstal versi terbaru SDK DashScope. Jika tidak, kesalahan mungkin terjadi.
SDK DashScope tersedia untuk Python dan Java.
Nama parameter dalam SDK sebagian besar sama dengan yang ada di API HTTP. Struktur parameter spesifik untuk enkapsulasi SDK untuk setiap bahasa. Untuk informasi lebih lanjut tentang parameter, lihat Panggilan HTTP.
Karena model citra memerlukan waktu pemrosesan yang lama, layanan dasar bersifat asinkron. SDK menyediakan lapisan enkapsulasi yang mendukung panggilan sinkron dan asinkron.
Model pengeditan citra umum memerlukan waktu sekitar 5 hingga 15 detik untuk memproses permintaan. Waktu pemrosesan aktual bergantung pada jumlah tugas dalam antrian dan kondisi jaringan.
Python SDK
Saat Anda menggunakan Python SDK untuk memproses file citra, Anda dapat menggunakan salah satu dari tiga metode berikut untuk memasukkan citra. Pilih metode yang paling sesuai dengan skenario Anda.
URL publik: URL citra yang dapat diakses publik menggunakan protokol HTTP atau HTTPS.
Pengkodean Base64: String file terenkripsi Base64 dalam format
data:{MIME_type};base64,{base64_data}.Jalur file lokal: Mendukung jalur absolut dan relatif. Untuk informasi tentang cara memberikan jalur file yang benar, lihat tabel berikut.
Sistem | Jalur file yang harus disediakan | 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 |
Kode contoh
Sebelum memanggil kode, pastikan Anda telah menginstal SDK Python DashScope. Kami menyarankan Anda memperbarui ke versi terbaru dengan menjalankan pip install -U dashscope. Untuk informasi lebih lanjut, lihat Instal SDK.
Panggilan sinkron
Contoh ini menunjukkan cara melakukan panggilan sinkron dan mendukung tiga metode input citra: URL publik, pengkodean Base64, dan jalur file lokal.
Permintaan contoh
import base64
import os
from http import HTTPStatus
from dashscope import ImageSynthesis
import mimetypes
"""
Persyaratan lingkungan:
dashscope python SDK >= 1.23.8
Instal/Perbarui SDK:
pip install -U dashscope
"""
# Jika Anda belum mengonfigurasi variabel lingkungan, ganti baris berikut dengan Kunci API Model Studio Anda: api_key="sk-xxx"
api_key = os.getenv("DASHSCOPE_API_KEY")
# --- Fungsi pembantu: untuk pengkodean Base64 ---
# Format: 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 citra 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}"
"""
Deskripsi metode input citra:
Tiga metode input citra berikut disediakan. Anda dapat memilih salah satunya.
1. Gunakan URL publik - cocok untuk citra yang dapat diakses publik.
2. Gunakan file lokal - cocok untuk pengembangan dan pengujian lokal.
3. Gunakan pengkodean Base64 - cocok untuk citra pribadi atau skenario yang memerlukan transmisi terenkripsi.
"""
# [Metode 1] Gunakan URL citra publik
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"
# [Metode 2] Gunakan file lokal (jalur absolut dan relatif didukung)
# Persyaratan format: file:// + jalur file
# Contoh (jalur absolut):
# mask_image_url = "file://" + "/path/to/your/mask_image.png" # Linux/macOS
# base_image_url = "file://" + "C:/path/to/your/base_image.jpeg" # Windows
# Contoh (jalur relatif):
# mask_image_url = "file://" + "./mask_image.png" # Sesuai jalur aktual
# base_image_url = "file://" + "./base_image.jpeg" # Sesuai jalur aktual
# [Metode 3] Gunakan citra terenkripsi Base64
# mask_image_url = encode_file("./mask_image.png") # Sesuai jalur aktual
# base_image_url = encode_file("./base_image.jpeg") # Sesuai jalur aktual
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()Respons contoh
URL berlaku selama 24 jam. Unduh citra segera.
{
"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
}
}Pemanggilan asinkron
Contoh ini hanya menunjukkan cara melakukan panggilan asinkron.
Permintaan contoh
import os
from http import HTTPStatus
from dashscope import ImageSynthesis
"""
Persyaratan lingkungan:
dashscope python SDK >= 1.23.4
Instal/Perbarui SDK:
pip install -U dashscope
"""
# Jika Anda belum mengonfigurasi variabel lingkungan, ganti baris berikut dengan Kunci API Model Studio Anda: api_key="sk-xxx"
api_key = os.getenv("DASHSCOPE_API_KEY")
# Gunakan URL citra publik
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"
def sample_async_call_imageedit():
# Panggilan asinkron, mengembalikan task_id
rsp = ImageSynthesis.async_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)
print(rsp)
if rsp.status_code == HTTPStatus.OK:
print("task_id: %s" % rsp.output.task_id)
else:
print('Failed, status_code: %s, code: %s, message: %s' %
(rsp.status_code, rsp.code, rsp.message))
# Dapatkan informasi tugas asinkron
status = ImageSynthesis.fetch(task=rsp, api_key=api_key)
if status.status_code == HTTPStatus.OK:
print(status.output.task_status) # periksa status tugas
else:
print('Failed, status_code: %s, code: %s, message: %s' %
(status.status_code, status.code, status.message))
# Tunggu hingga tugas asinkron selesai
rsp = ImageSynthesis.wait(rsp)
print(rsp)
if rsp.status_code == HTTPStatus.OK:
print(rsp.output)
for result in rsp.output.results:
print("---------------------------")
print(result.url)
else:
print('Failed, status_code: %s, code: %s, message: %s' %
(rsp.status_code, rsp.code, rsp.message))
if __name__ == '__main__':
sample_async_call_imageedit()
Respons contoh
1. Contoh respons untuk membuat tugas
{
"status_code": 200,
"request_id": "6dc3bf6c-be18-9268-9c27-xxxxxx",
"code": "",
"message": "",
"output": {
"task_id": "686391d9-7ecf-4290-a8e9-xxxxxx",
"task_status": "PENDING",
"video_url": ""
},
"usage": null
}2. Contoh respons untuk mengkueri hasil tugas
URL berlaku selama 24 jam. Unduh citra segera.
{
"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?Expires=17xxxxxx"
}
],
"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 SDK
Saat Anda menggunakan Java SDK untuk memproses file citra, Anda dapat menggunakan salah satu dari tiga metode berikut untuk memasukkan citra. Pilih metode yang paling sesuai dengan skenario Anda.
URL publik: URL citra yang dapat diakses publik menggunakan protokol HTTP atau HTTPS.
Pengkodean Base64: String file terenkripsi Base64 dalam format
data:{MIME_type};base64,{base64_data}.Jalur file lokal: Hanya jalur absolut yang didukung. Untuk informasi tentang cara memberikan jalur file yang benar, lihat tabel berikut.
Sistem | Jalur file yang harus disediakan | Contoh |
Linux atau macOS | file://{jalur absolut file} | file:///home/images/test.png |
Windows | file:///{jalur absolut file} | file:///D:/images/test.png |
Kode contoh
Sebelum memanggil kode, pastikan Anda telah menginstal SDK Java DashScope. Kami menyarankan Anda memperbarui ke versi terbaru. Untuk informasi lebih lanjut, lihat Instal SDK.
Panggilan sinkron
Contoh ini menunjukkan cara melakukan panggilan sinkron dan mendukung tiga metode input citra: URL publik, pengkodean Base64, dan jalur file lokal.
Permintaan contoh
// 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.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;
/**
* Persyaratan lingkungan
* dashscope java SDK >=2.20.9
* Perbarui dependensi Maven:
* https://mvnrepository.com/artifact/com.alibaba/dashscope-sdk-java
*/
public class ImageEditSync {
// Jika Anda belum mengonfigurasi variabel lingkungan, ganti baris berikut dengan Kunci API Model Studio Anda: apiKey="sk-xxx"
static String apiKey = System.getenv("DASHSCOPE_API_KEY");
/**
* Deskripsi metode input citra: Pilih salah satu dari tiga metode
*
* 1. Gunakan URL publik - cocok untuk citra yang dapat diakses publik.
* 2. Gunakan file lokal - cocok untuk pengembangan dan pengujian lokal.
* 3. Gunakan pengkodean Base64 - cocok untuk citra pribadi atau skenario yang memerlukan transmisi terenkripsi.
*/
//[Metode 1] URL publik
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";
//[Metode 2] Jalur file lokal (file://+jalur absolut atau file:///+jalur absolut)
// static String maskImageUrl = "file://" + "/your/path/to/mask_image.png"; // Linux/macOS
// static String baseImageUrl = "file:///" + "C:/your/path/to/base_image.png"; // Windows
//[Metode 3] Pengkodean Base64
// static String maskImageUrl = encodeFile("/your/path/to/mask_image.png");
// static String baseImageUrl = encodeFile("/your/path/to/base_image.png");
public static void syncCall() {
// Atur parameter parameters
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));
}
/**
* Mengenkripsi 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 tipe MIME
String mimeType = null;
try {
mimeType = Files.probeContentType(path);
} catch (IOException e) {
throw new IllegalArgumentException("Tidak dapat mendeteksi tipe file: " + filePath);
}
if (mimeType == null || !mimeType.startsWith("image/")) {
throw new IllegalArgumentException("Format citra tidak didukung atau tidak dikenali");
}
// Baca konten file dan enkripsi
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();
}
}
Respons contoh
URL berlaku selama 24 jam. Unduh citra segera.
{
"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
}
}Pemanggilan asinkron
Contoh ini hanya menunjukkan cara melakukan panggilan asinkron.
Permintaan contoh
// 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.JsonUtils;
import java.util.HashMap;
import java.util.Map;
/**
* Persyaratan lingkungan
* dashscope java SDK >= 2.20.1
* Perbarui dependensi Maven:
* https://mvnrepository.com/artifact/com.alibaba/dashscope-sdk-java
*/
public class ImageEditAsync {
// Jika Anda belum mengonfigurasi variabel lingkungan, ganti baris berikut dengan Kunci API Model Studio Anda: apiKey="sk-xxx"
static String apiKey = System.getenv("DASHSCOPE_API_KEY");
//[Metode 1] URL publik
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";
public static void asyncCall() {
// Atur parameter parameters
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("---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 DASHSCOPE_API_KEY diatur sebagai variabel lingkungan, apiKey dapat dikosongkan.
ImageSynthesisResult result = is.fetch(taskId, apiKey);
System.out.println(result.getOutput());
System.out.println(result.getUsage());
}
public static void main(String[] args) {
asyncCall();
}
}Respons contoh
1. Contoh respons untuk membuat tugas
{
"request_id": "5dbf9dc5-4f4c-9605-85ea-xxxxxxxx",
"output": {
"task_id": "7277e20e-aa01-4709-xxxxxxxx",
"task_status": "PENDING"
}
}2. Contoh respons untuk mengkueri hasil tugas
video_url kedaluwarsa dalam 24 jam. Unduh video segera.
{
"request_id": "3d740fc4-a968-9c36-b0e7-xxxxxxxx",
"output": {
"task_id": "34dcf4b0-ed84-441e-91cb-xxxxxxxx",
"task_status": "SUCCEEDED",
"video_url": "https://dashscope-result-hz.oss-cn-hangzhou.aliyuncs.com/aaaa.mp4"
},
"usage": {
"video_count": 1,
"video_duration": 5,
"video_ratio": "standard"
}
}Kode kesalahan
Jika panggilan gagal, lihat Pesan kesalahan untuk troubleshooting.
API ini juga mengembalikan kode kesalahan spesifik berikut.
Kode status HTTP | code (kode kesalahan API) | Pesan kesalahan API (message) | Deskripsi |
400 | InvalidParameter | InvalidParameter | Parameter permintaan tidak valid. |
400 | IPInfringementSuspect | Input data is suspected of being involved in IP infringement. | Data input (seperti prompt atau citra) dicurigai melanggar hak kekayaan intelektual. Periksa input untuk memastikan tidak mengandung konten yang berisiko melanggar. |
400 | DataInspectionFailed | Input data may contain inappropriate content. | Data input (seperti prompt atau citra) mungkin mengandung konten yang tidak pantas. Ubah input dan coba lagi. |
500 | InternalError | InternalError | Terjadi kesalahan layanan. Coba lagi untuk mengesampingkan kemungkinan kejadian insidental. |
Deskripsi citra input
Pass by value
Citra input dapat diberikan dalam berbagai format string. Tabel berikut menjelaskan format yang didukung untuk setiap metode panggilan.
Metode | HTTP | Python SDK | Java SDK |
Metode input citra yang didukung |
|
|
|
Metode 1: Gunakan URL publik
Berikan URL citra yang dapat diakses publik. HTTP dan HTTPS didukung.
Contoh:
https://xxxx/img.png.
Metode 2: Gunakan pengkodean Base64
Konversi file citra lokal menjadi string terenkripsi Base64 dan berikan dalam format data:{MIME_type};base64,{base64_data}.
Untuk kode konversi, lihat Kode contoh.
{MIME_type}: Tipe media citra. Harus sesuai dengan format file.
{base64_data}: Data citra terenkripsi Base64.
Pemetaan tipe MIME:
Format citra
Tipe MIME
JPEG
image/jpeg
JPG
image/jpeg
PNG
image/png
BMP
image/bmp
TIFF
image/tiff
WEBP
image/webp
Contoh:
"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABDg......".Catatan: String Base64 di atas dipotong untuk tujuan demonstrasi. Dalam praktiknya, Anda harus meneruskan string terenkripsi lengkap.
Metode 3: Gunakan jalur file lokal
Panggilan HTTP tidak mendukung jalur file lokal. Metode ini hanya didukung oleh SDK Python dan Java.
Untuk informasi lebih lanjut tentang aturan untuk meneruskan jalur file lokal, lihat Python SDK dan Java SDK.
Konfigurasi akses citra
Konfigurasikan daftar putih nama domain: Pastikan sistem bisnis Anda dapat mengakses tautan citra
Citra yang dihasilkan disimpan di OSS Alibaba Cloud. Setiap citra diberikan tautan OSS, seperti https://dashscope-result-xx.oss-cn-xxxx.aliyuncs.com/xxx.png. Tautan OSS memungkinkan akses publik, dan Anda dapat menggunakannya untuk melihat atau mengunduh citra. Tautan tersebut hanya berlaku selama 24 jam.
Jika bisnis Anda memiliki persyaratan keamanan tinggi dan tidak dapat mengakses tautan OSS Alibaba Cloud, Anda harus mengonfigurasi daftar putih untuk akses publik. Tambahkan nama domain berikut ke daftar putih Anda untuk mengakses tautan citra.
# Daftar nama domain OSS
dashscope-result-bj.oss-cn-beijing.aliyuncs.com
dashscope-result-hz.oss-cn-hangzhou.aliyuncs.com
dashscope-result-sh.oss-cn-shanghai.aliyuncs.com
dashscope-result-wlcb.oss-cn-wulanchabu.aliyuncs.com
dashscope-result-zjk.oss-cn-zhangjiakou.aliyuncs.com
dashscope-result-sz.oss-cn-shenzhen.aliyuncs.com
dashscope-result-hy.oss-cn-heyuan.aliyuncs.com
dashscope-result-cd.oss-cn-chengdu.aliyuncs.com
dashscope-result-gz.oss-cn-guangzhou.aliyuncs.com
dashscope-result-wlcb-acdr-1.oss-cn-wulanchabu-acdr-1.aliyuncs.comFAQ
Untuk pertanyaan umum tentang model citra, lihat dokumen FAQ. Dokumen ini mencakup topik seperti penagihan model, batas permintaan, dan solusi untuk kesalahan API umum.




















