Wan2.7-Image mendukung teks-ke-gambar, teks-ke-set-gambar, gambar-ke-set-gambar, pengeditan gambar, dan pembuatan referensi multi-gambar.
Ikhtisar model
|
Model |
Deskripsi |
Spesifikasi gambar output |
|
wan2.7-image-pro |
Wan 2.7 image Pro. Mendukung output 4K untuk pembuatan teks-ke-gambar (tidak berlaku untuk set gambar). |
Format gambar: PNG. Untuk resolusi dan dimensi gambar, lihat parameter size. |
|
wan2.7-image |
Wan 2.7 image. Pembuatan lebih cepat. |
Sebelum memanggil model, periksa Daftar model dan harga untuk ketersediaan model di wilayah tertentu.
Prasyarat
Dapatkan Kunci API dan ekspor Kunci API sebagai Variabel lingkungan.
Wilayah China (Beijing) dan Singapura memiliki Kunci API dan titik akhir permintaan yang terpisah. Keduanya tidak dapat saling dipertukarkan. Pemanggilan lintas-wilayah menyebabkan kegagalan otentikasi atau error layanan.
HTTP sinkron
Mengembalikan hasil dalam satu permintaan. Direkomendasikan untuk sebagian besar kasus penggunaan.
Singapura
POST https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation
Saat memanggil, ganti WorkspaceId dengan ID ruang kerja Anda yang sebenarnya.
Beijing
POST https://{WorkspaceId}.cn-beijing.maas.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation
Saat memanggil, ganti WorkspaceId dengan ID ruang kerja Anda yang sebenarnya.
Parameter permintaan |
Teks-ke-gambarModel wan2.7-image-pro hanya mendukung resolusi 4K untuk pembuatan teks-ke-gambar. Pengeditan gambar dan pembuatan set gambar mendukung resolusi hingga 2K.
Pengeditan gambar
Pengeditan interaktif
Pembuatan set gambar
|
Header |
|
|
Content-Type Tipe konten dari permintaan. Harus |
|
|
Authorization Mengotentikasi permintaan dengan Kunci API Model Studio. Contoh: Bearer sk-xxxx. |
|
Body permintaan |
|
|
model Nama model. Nilai yang valid: |
|
|
input Objek input. |
|
|
parameters Pengaturan parameter model. |
Parameter respons |
Eksekusi tugas berhasilData tugas (status tugas dan URL gambar) hanya disimpan selama 24 jam lalu secara otomatis dihapus. Segera simpan gambar yang dihasilkan.
Eksekusi tugas abnormalJika tugas gagal, bidang
|
|
output Informasi output tugas. |
|
|
usage Statistik penggunaan untuk permintaan. Hanya hasil yang berhasil yang dihitung. |
|
|
request_id Pengidentifikasi permintaan unik untuk pelacakan dan troubleshooting. |
|
|
code Kode error. Dikembalikan hanya untuk permintaan yang gagal. Lihat 错误码. |
|
|
message Pesan error detail. Dikembalikan hanya untuk permintaan yang gagal. Lihat 错误码. |
HTTP asinkron
Paling cocok untuk tugas berdurasi panjang. Kirim tugas, lalu polling status dan hasilnya.
Langkah 1: Buat tugas untuk mendapatkan ID tugas
Singapura
POST https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1/services/aigc/image-generation/generation
Saat memanggil, ganti WorkspaceId dengan ID ruang kerja Anda yang sebenarnya.
Beijing
POST https://{WorkspaceId}.cn-beijing.maas.aliyuncs.com/api/v1/services/aigc/image-generation/generation
Saat memanggil, ganti WorkspaceId dengan ID ruang kerja Anda yang sebenarnya.
Parameter permintaan |
Teks-ke-gambarModel wan2.7-image-pro hanya mendukung resolusi 4K untuk pembuatan teks-ke-gambar. Pengeditan gambar dan pembuatan set gambar mendukung resolusi hingga 2K.
Pengeditan gambar
Pengeditan interaktif
Pembuatan set gambarModel wan2.7-image-pro mendukung resolusi hingga 2K untuk pembuatan set gambar.
|
Header |
|
|
Content-Type Tipe konten dari permintaan. Harus |
|
|
Authorization Mengotentikasi permintaan dengan Kunci API Model Studio. Contoh: Bearer sk-xxxx. |
|
|
X-DashScope-Async Mengaktifkan pemrosesan asinkron. Permintaan HTTP hanya mendukung pemanggilan asinkron. Harus Penting
Jika header permintaan ini tidak ada, error "current user api does not support synchronous calls" dikembalikan. |
|
Body permintaan |
|
|
model Nama model. Nilai yang valid: |
|
|
input Objek input. |
|
|
parameters Pengaturan parameter model. |
Parameter respons |
Respons berhasilSimpan
Respons errorPembuatan tugas gagal. Lihat Kode Galat.
|
|
output Informasi output tugas. |
|
|
request_id Pengidentifikasi permintaan unik untuk pelacakan dan troubleshooting. |
|
|
code Kode error. Dikembalikan hanya untuk permintaan yang gagal. Lihat 错误码. |
|
|
message Pesan error detail. Dikembalikan hanya untuk permintaan yang gagal. Lihat 错误码. |
Langkah 2: Tanyakan hasil berdasarkan ID tugas
Singapura
GET https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1/tasks/{task_id}
Beijing
GET https://{WorkspaceId}.cn-beijing.maas.aliyuncs.com/api/v1/tasks/{task_id}
Parameter permintaan |
Tanyakan hasil tugasGanti |
Tajuk |
|
|
Authorization Mengotentikasi permintaan dengan Kunci API Model Studio. Contoh: Bearer sk-xxxx. |
|
Parameter path |
|
|
task_id ID tugas. |
Parameter respons |
Eksekusi tugas berhasilData tugas (status tugas dan URL gambar) hanya disimpan selama 24 jam lalu secara otomatis dihapus. Segera simpan gambar yang dihasilkan.
Eksekusi tugas abnormalJika tugas gagal, bidang
|
|
output Informasi output tugas. |
|
|
usage Statistik penggunaan untuk permintaan. Hanya hasil yang berhasil yang dihitung. |
|
|
request_id Pengidentifikasi permintaan unik untuk pelacakan dan troubleshooting. |
|
|
code Kode error. Dikembalikan hanya untuk permintaan yang gagal. Lihat 错误码. |
|
|
message Pesan error detail. Dikembalikan hanya untuk permintaan yang gagal. Lihat 错误码. |
Python SDK
Nama parameter SDK sebagian besar konsisten dengan HTTP API.
Tugas pembuatan gambar bisa memakan waktu, sehingga SDK membungkus alur kerja asinkron HTTP. Pemanggilan sinkron dan asinkron didukung.
Durasi tugas tergantung pada panjang antrian dan status layanan.
Pastikan versi DashScope Python SDK Anda adalah 1.25.15 atau lebih baru. Untuk memperbarui, lihat Instal SDK.
Baik base_url maupun Kunci API bersifat spesifik wilayah. Contoh berikut menggunakan wilayah Singapura:
Singapura
https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1
Saat memanggil, ganti WorkspaceId dengan ID ruang kerja Anda yang sebenarnya.
China (Beijing)
https://{WorkspaceId}.cn-beijing.maas.aliyuncs.com/api/v1
Saat memanggil, ganti WorkspaceId dengan ID ruang kerja Anda yang sebenarnya.
Pengeditan gambar
Pemanggilan sinkron
Contoh permintaan
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
# Berikut adalah base_url untuk wilayah Singapura. base_url bervariasi berdasarkan wilayah.
dashscope.base_http_api_url = "https://{WorkspaceId}.ap-southeast-1.maas.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 bervariasi berdasarkan wilayah. Untuk mendapatkan Kunci API, kunjungi: https://www.alibabacloud.com/help/en/model-studio/get-api-key
api_key = os.getenv("DASHSCOPE_API_KEY")
# --- Fungsi 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:
Berikut tiga metode input gambar. Anda perlu memilih hanya satu.
1. Gunakan URL publik: Metode ini cocok untuk gambar yang dapat diakses publik.
2. Gunakan file lokal: Metode ini cocok untuk pengembangan dan pengujian lokal.
3. Gunakan encoding Base64: Metode ini cocok untuk gambar pribadi atau skenario yang memerlukan transmisi terenkripsi.
"""
# [Metode 1] Gunakan URL gambar publik
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"
# [Metode 2] Gunakan file lokal (mendukung path absolut dan relatif)
# image_1 = "file:///path/to/your/car.png"
# image_2 = "file:///path/to/your/paint.png"
# [Metode 3] Gunakan gambar Base64-encoded
# 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 hanya mendukung resolusi 4K untuk pembuatan teks-ke-gambar. Pengeditan gambar dan pembuatan multi-gambar mendukung resolusi maksimum 2K.
)
# Ekstrak URL gambar hasil dan simpan gambar ke file lokal.
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"
# URL hasil berlaku selama 24 jam. Silakan unduh tepat waktu.
urllib.request.urlretrieve(image_url, file_name)
print(f"Gambar disimpan ke {file_name}")
else:
print(f"Gagal: status_code={rsp.status_code}, message={rsp.message}")
Contoh respons
URL berlaku selama 24 jam. Segera unduh gambar.
{
"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
}
}
Pemanggilan asinkron
Contoh permintaan
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
# Berikut adalah base_url untuk wilayah Singapura. base_url bervariasi berdasarkan wilayah.
dashscope.base_http_api_url = "https://{WorkspaceId}.ap-southeast-1.maas.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 bervariasi berdasarkan wilayah. Untuk mendapatkan Kunci API, kunjungi https://www.alibabacloud.com/help/en/model-studio/get-api-key
api_key = os.getenv("DASHSCOPE_API_KEY")
# --- Fungsi 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:
Tiga metode input gambar disediakan di bawah ini. Pilih salah satu.
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_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"
# [Metode 2] Gunakan file lokal (mendukung path absolut dan relatif)
# image_1 = "file:///path/to/your/car.png"
# image_2 = "file:///path/to/your/paint.png"
# [Metode 3] Gunakan gambar Base64-encoded
# image_1 = encode_file("/path/to/your/car.png")
# image_2 = encode_file("/path/to/your/paint.png")
# Buat tugas asinkron.
def create_async_task():
print("Membuat tugas asinkron...")
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 hanya mendukung resolusi 4K untuk skenario pembuatan teks-ke-gambar. Pengeditan gambar dan pembuatan kolase mendukung resolusi maksimum 2K.
)
if response.status_code == 200:
print("Tugas berhasil dibuat:", response)
return response
else:
raise Exception(f"Gagal membuat tugas: {response.code} - {response.message}")
# Tunggu hingga tugas selesai.
def wait_for_completion(task_response):
print("Menunggu tugas selesai...")
status = ImageGeneration.wait(task=task_response, api_key=api_key)
if status.output.task_status == "SUCCEEDED":
print("Tugas berhasil!")
# Ekstrak URL gambar hasil dan simpan gambar ke file lokal.
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"
# URL hasil berlaku selama 24 jam. Unduh gambar tepat waktu.
urllib.request.urlretrieve(image_url, file_name)
print(f"Gambar disimpan ke {file_name}")
else:
raise Exception(f"Tugas gagal dengan status: {status.output.task_status}")
# Dapatkan informasi tentang tugas asinkron.
def fetch_task_status(task):
print("Mengambil status tugas...")
status = ImageGeneration.fetch(task=task, api_key=api_key)
if status.status_code == HTTPStatus.OK:
print("Status tugas:", status.output.task_status)
print("Detail respons:", status)
else:
print(f"Gagal mengambil status: {status.code} - {status.message}")
# Batalkan tugas asinkron.
def cancel_task(task):
print("Membatalkan tugas...")
response = ImageGeneration.cancel(task=task, api_key=api_key)
if response.status_code == HTTPStatus.OK:
print("Tugas berhasil dibatalkan:", response.output.task_status)
else:
print(f"Gagal membatalkan tugas: {response.code} - {response.message}")
# Alur eksekusi utama.
if __name__ == "__main__":
task = create_async_task()
wait_for_completion(task)
Contoh respons
-
Contoh respons untuk membuat tugas
{ "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 } } -
Contoh respons untuk menanyakan hasil tugas
URL berlaku selama 24 jam. Segera unduh gambar.
{ "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 } }
Pembuatan set gambar
Pemanggilan sinkron
Contoh permintaan
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
# Berikut adalah base_url untuk wilayah Singapura. base_url bervariasi berdasarkan wilayah.
dashscope.base_http_api_url = "https://{WorkspaceId}.ap-southeast-1.maas.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 bervariasi berdasarkan wilayah. Untuk mendapatkan Kunci API, kunjungi: https://www.alibabacloud.com/help/en/model-studio/get-api-key
api_key = os.getenv("DASHSCOPE_API_KEY")
# --- Fungsi 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}"
"""
Deskripsi metode input gambar (untuk pembuatan urutan gambar-gambar):
Pilih salah satu dari tiga metode input gambar 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_1 = "https://img.alicdn.com/imgextra/i4/O1CN01IM44WN23dq5uY1yla_!!6000000007279-49-tps-1024-1024.webp"
# [Metode 2] Gunakan file lokal (mendukung path absolut dan relatif)
# image_1 = "file:///path/to/your/image.png"
# [Metode 3] Gunakan gambar Base64-encoded
# image_1 = encode_file("/path/to/your/image.png")
message = Message(
role="user",
content=[
{
"text": "A cinematic image sequence featuring the same stray orange cat, whose features must be consistent across all images. First image: In spring, the orange cat weaves through blooming cherry blossom trees. Second image: In summer, the orange cat cools off in the shade of a tree on an old street. Third image: In autumn, the orange cat walks on a carpet of golden fallen leaves. Fourth image: In winter, the orange cat leaves footprints as it walks on the snow."
}
# Untuk pembuatan urutan gambar-gambar: Hapus komentar baris berikut dan beri komentar pada teks biasa di atas.
# {"text": "Generate a four-seasons image sequence based on the style of the reference image"},
# {"image": image_1}
],
)
print("----sync call, please wait a moment----")
rsp = ImageGeneration.call(
model="wan2.7-image-pro",
api_key=api_key,
messages=[message],
enable_sequential=True,
n=4,
size="2K", # wan2.7-image-pro hanya mendukung resolusi 4K dalam skenario teks-ke-gambar. Pengeditan gambar dan pembuatan urutan gambar mendukung resolusi maksimum 2K.
)
# Ekstrak URL gambar hasil dan simpan gambar secara lokal.
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"
# URL hasil berlaku selama 24 jam. Unduh gambar tepat waktu.
urllib.request.urlretrieve(image_url, file_name)
print(f"Gambar disimpan ke {file_name}")
else:
print(f"Gagal: status_code={rsp.status_code}, message={rsp.message}")
Contoh respons
URL berlaku selama 24 jam. Segera unduh gambar.
{
"status_code": 200,
"request_id": "56e318fd-ed60-99e8-8ca1-cdef25ca4xxx",
"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"
},
{
"image": "https://dashscope-result-bj.oss-cn-beijing.aliyuncs.com/xxxxxx.png?Expires=xxxxxx",
"type": "image"
},
{
"image": "https://dashscope-result-bj.oss-cn-beijing.aliyuncs.com/xxxxxx.png?Expires=xxxxxx",
"type": "image"
},
{
"image": "https://dashscope-result-bj.oss-cn-beijing.aliyuncs.com/xxxxxx.png?Expires=xxxxxx",
"type": "image"
}
]
}
}
],
"audio": null,
"finished": true
},
"usage": {
"input_tokens": 720,
"output_tokens": 11,
"characters": 0,
"image_count": 4,
"size": "2048*2048",
"total_tokens": 731
}
}
Pemanggilan asinkron
Contoh permintaan
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
# base_url berikut untuk wilayah Singapura. base_url bervariasi berdasarkan wilayah.
dashscope.base_http_api_url = "https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1"
# Jika Anda belum mengonfigurasi variabel lingkungan DASHSCOPE_API_KEY, ganti baris berikut dengan Kunci API Model Studio Anda: api_key="sk-xxx"
# Kunci API bervariasi berdasarkan wilayah. Untuk mendapatkan Kunci API, kunjungi: https://www.alibabacloud.com/help/en/model-studio/get-api-key
api_key = os.getenv("DASHSCOPE_API_KEY")
# --- Fungsi encoding Base64 ---
# Skema URI data 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}"
"""
Deskripsi metode input gambar (untuk pembuatan urutan gambar-gambar):
Tiga metode input gambar berikut disediakan. Pilih salah satunya.
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_1 = "https://img.alicdn.com/imgextra/i4/O1CN01IM44WN23dq5uY1yla_!!6000000007279-49-tps-1024-1024.webp"
# [Metode 2] Gunakan file lokal (path absolut dan relatif didukung)
# image_1 = "file:///path/to/your/image.png"
# [Metode 3] Gunakan gambar Base64-encoded
# image_1 = encode_file("/path/to/your/image.png")
def main():
message = Message(
role="user",
content=[
{
"text": "A cinematic sequence of images documenting the same stray orange cat, whose features must remain consistent across all images. Image 1: In spring, the cat weaves through blooming cherry blossom trees. Image 2: In summer, the cat cools off in the shade of trees on an old street. Image 3: In autumn, the cat steps on a carpet of golden fallen leaves. Image 4: In winter, the cat walks on the snow, leaving footprints."
}
# Skenario pembuatan urutan gambar-gambar: Hapus komentar baris berikut dan beri komentar pada teks biasa di atas.
# {"text": "Generate a sequence of four seasonal images based on the style of the reference image."},
# {"image": image_1}
],
)
# Kirim tugas asinkron
print("Mengirim tugas asinkron...")
response = ImageGeneration.async_call(
model="wan2.7-image-pro",
api_key=api_key,
messages=[message],
enable_sequential=True,
n=4,
size="2K", # wan2.7-image-pro hanya mendukung resolusi 4K dalam skenario teks-ke-gambar. Pengeditan gambar dan pembuatan urutan gambar mendukung resolusi maksimum 2K.
)
if response.status_code == 200:
print(f"Tugas berhasil dikirim. ID Tugas: {response.output.task_id}")
# Tunggu hingga tugas selesai
status = ImageGeneration.wait(task=response, api_key=api_key)
if status.output.task_status == "SUCCEEDED":
print("Tugas selesai!")
# Ekstrak URL gambar hasil dan simpan ke perangkat lokal.
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"
# URL hasil berlaku selama 24 jam. Unduh gambar tepat waktu.
urllib.request.urlretrieve(image_url, file_name)
print(f"Gambar disimpan ke {file_name}")
else:
print(f"Tugas gagal. Status: {status.output.task_status}")
else:
print(f"Gagal membuat tugas: {response.code} - {response.message}")
if __name__ == "__main__":
try:
main()
except Exception as e:
print(f"Error: {e}")
Contoh respons
-
Contoh respons untuk membuat tugas
{ "status_code": 200, "request_id": "4fb3050f-de57-4a24-84ff-e37ee5xxxxxx", "code": "", "message": "", "output": { "text": null, "finish_reason": null, "choices": null, "audio": null, "task_id": "77093787-a217-4c29-9cd4-ca7b5ac86xxx", "task_status": "PENDING" }, "usage": { "input_tokens": 0, "output_tokens": 0, "characters": 0 } } -
Contoh respons untuk menanyakan hasil tugas
URL berlaku selama 24 jam. Segera unduh gambar.
{ "status_code": 200, "request_id": "56e318fd-ed60-99e8-8ca1-cdef25ca4xxx", "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" }, { "image": "https://dashscope-result-bj.oss-cn-beijing.aliyuncs.com/xxxxxx.png?Expires=xxxxxx", "type": "image" }, { "image": "https://dashscope-result-bj.oss-cn-beijing.aliyuncs.com/xxxxxx.png?Expires=xxxxxx", "type": "image" }, { "image": "https://dashscope-result-bj.oss-cn-beijing.aliyuncs.com/xxxxxx.png?Expires=xxxxxx", "type": "image" } ] } } ], "audio": null, "task_id": "77093787-a217-4c29-9cd4-ca7b5ac86xxx", "task_status": "SUCCEEDED", "submit_time": "2026-03-31 23:04:46.166", "scheduled_time": "2026-03-31 23:04:46.208", "end_time": "2026-03-31 23:05:11.664", "finished": true }, "usage": { "input_tokens": 720, "output_tokens": 11, "characters": 0, "size": "2048*2048", "total_tokens": 731, "image_count": 4 } }
Java SDK
Nama parameter SDK sebagian besar konsisten dengan HTTP API.
Tugas pembuatan gambar bisa memakan waktu, sehingga SDK membungkus alur kerja asinkron HTTP. Pemanggilan sinkron dan asinkron didukung.
Pastikan versi DashScope Java SDK Anda adalah 2.22.13 atau lebih baru.
Singapura
https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1
Saat memanggil, ganti WorkspaceId dengan ID ruang kerja Anda yang sebenarnya.
China (Beijing)
https://{WorkspaceId}.cn-beijing.maas.aliyuncs.com/api/v1
Saat memanggil, ganti WorkspaceId dengan ID ruang kerja Anda yang sebenarnya.
Pengeditan gambar
Pemanggilan sinkron
Contoh permintaan
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;
/**
* Contoh Pemanggilan Sinkron Pengeditan Gambar wan2.7-image-pro
*/
public class Main {
static {
// Berikut adalah URL untuk wilayah Singapura. base_url bervariasi berdasarkan wilayah.
Constants.baseHttpApiUrl = "https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1";
}
// Jika Anda belum mengonfigurasi variabel lingkungan, ganti baris berikut dengan Kunci API Model Studio Anda: apiKey="sk-xxx"
// Kunci API bervariasi berdasarkan wilayah. Untuk mendapatkan Kunci API, kunjungi https://www.alibabacloud.com/help/en/model-studio/get-api-key
static String apiKey = System.getenv("DASHSCOPE_API_KEY");
// --- Fungsi encoding Base64 ---
// Format encoding Base64: 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 {
/*
* Deskripsi metode input gambar:
* Tiga metode input gambar disediakan di bawah ini. Pilih salah satu.
* 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.
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";
// Metode 2: Gunakan file lokal. Path absolut dan relatif didukung.
// Format: file:// + path file
// String image1 = "file:///path/to/your/car.png";
// String image2 = "file:///path/to/your/paint.png";
// Metode 3: Gunakan gambar Base64-encoded.
// String image1 = encodeFile("/path/to/your/car.png");
// String image2 = encodeFile("/path/to/your/paint.png");
// Bangun pesan input multi-gambar.
ImageGenerationMessage message = ImageGenerationMessage.builder()
.role("user")
.content(Arrays.asList(
// Input multi-gambar didukung. Anda dapat memberikan beberapa gambar referensi.
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") // Untuk wan2.7-image-pro, hanya skenario pembuatan teks-ke-gambar yang mendukung resolusi 4K. Pengeditan gambar dan pembuatan kolase mendukung resolusi maksimum 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());
}
// Ekstrak URL gambar hasil dan simpan ke file lokal.
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";
// URL hasil berlaku selama 24 jam. Unduh gambar tepat waktu.
try (InputStream in = new URL(imageUrl).openStream()) {
Files.copy(in, Paths.get(fileName), StandardCopyOption.REPLACE_EXISTING);
}
System.out.println("Gambar disimpan ke " + fileName);
}
}
}
}
public static void main(String[] args) throws ApiException, NoApiKeyException, UploadFileException, IOException {
basicCall();
}
}
Contoh respons
URL berlaku selama 24 jam. Simpan tepat waktu.
{
"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": ""
}
Pemanggilan asinkron
Contoh permintaan
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;
/**
* Contoh Pemanggilan Asinkron Pengeditan Gambar wan2.7-image-pro
*/
public class Main {
static {
// URL berikut untuk wilayah Singapura. base_url bervariasi berdasarkan wilayah.
Constants.baseHttpApiUrl = "https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1";
}
// Jika Anda belum mengonfigurasi variabel lingkungan, ganti baris berikut dengan Kunci API Model Studio Anda: apiKey="sk-xxx"
// Kunci API bervariasi berdasarkan wilayah. Untuk mendapatkan Kunci API, kunjungi: https://www.alibabacloud.com/help/en/model-studio/get-api-key
static String apiKey = System.getenv("DASHSCOPE_API_KEY");
// --- Fungsi encoding Base64 ---
// Format encoding Base64 adalah 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 {
/*
* Deskripsi metode input gambar:
* Tiga metode input gambar berikut disediakan. Anda dapat memilih salah satunya.
* 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 skenario yang melibatkan gambar pribadi atau memerlukan transmisi terenkripsi.
*/
// [Metode 1] Gunakan URL gambar publik
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";
// [Metode 2] Gunakan file lokal (mendukung path absolut dan relatif)
// Format wajib: file:// + path file
// String image1 = "file:///path/to/your/car.png";
// String image2 = "file:///path/to/your/paint.png";
// [Metode 3] Gunakan gambar Base64-encoded
// String image1 = encodeFile("/path/to/your/car.png");
// String image2 = encodeFile("/path/to/your/paint.png");
// Bangun pesan input multi-gambar
ImageGenerationMessage message = ImageGenerationMessage.builder()
.role("user")
.content(Arrays.asList(
// Mendukung input multi-gambar. Anda dapat memberikan beberapa gambar referensi.
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") // Model wan2.7-image-pro hanya mendukung resolusi 4K untuk pembuatan teks-ke-gambar. Untuk pengeditan dan pembuatan gambar komposit, resolusi maksimum yang didukung adalah 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("Hasil pembuatan tugas:");
System.out.println(JsonUtils.toJson(result));
String taskId = result.getOutput().getTaskId();
// Tunggu hingga tugas selesai
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);
// Ambil URL gambar hasil dan simpan ke file lokal
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";
// URL hasil berlaku selama 24 jam. Unduh gambar tepat waktu.
try (InputStream in = new URL(imageUrl).openStream()) {
Files.copy(in, Paths.get(fileName), StandardCopyOption.REPLACE_EXISTING);
}
System.out.println("Gambar disimpan ke " + fileName);
}
}
}
}
public static void main(String[] args) throws ApiException, NoApiKeyException, UploadFileException, IOException {
asyncCall();
}
}
Contoh respons
-
Contoh respons untuk membuat tugas
{ "requestId": "ccf4b2f4-bf30-9e13-9461-3a28c6a7bxxx", "output": { "task_id": "8811b4a4-00ac-4aa2-a2fd-017d3b90cxxx", "task_status": "PENDING" }, "status_code": 200, "code": "", "message": "" } -
Contoh respons untuk menanyakan hasil tugas
URL berlaku selama 24 jam. Simpan tepat waktu.
{ "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": "" }
Pembuatan set gambar
Pemanggilan sinkron
Contoh permintaan
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;
/**
* Contoh penggunaan wan2.7-image-pro untuk pembuatan seri gambar melalui pemanggilan sinkron di wilayah Singapura.
*/
public class Main {
static {
// URL berikut untuk wilayah Singapura. base_url bervariasi berdasarkan wilayah.
Constants.baseHttpApiUrl = "https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1";
}
// Jika Anda belum mengonfigurasi variabel lingkungan, ganti baris berikut dengan Kunci API Model Studio Anda: apiKey="sk-xxx"
// Kunci API bervariasi berdasarkan wilayah. Untuk mendapatkan Kunci API, kunjungi: https://www.alibabacloud.com/help/en/model-studio/get-api-key
static String apiKey = System.getenv("DASHSCOPE_API_KEY");
// --- Fungsi encoding Base64 ---
// Format untuk encoding Base64 adalah 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 {
/*
* Metode input gambar (untuk pembuatan seri gambar-gambar):
* Tiga metode input gambar disediakan di bawah ini. Pilih salah satu.
* 1. URL publik: Cocok untuk gambar yang sudah dapat diakses publik.
* 2. File lokal: Cocok untuk pengembangan dan pengujian lokal.
* 3. Encoding Base64: Cocok untuk gambar pribadi atau skenario yang memerlukan transmisi terenkripsi.
*/
// Metode 1: Gunakan URL gambar publik
// String image1 = "https://img.alicdn.com/imgextra/i4/O1CN01IM44WN23dq5uY1yla_!!6000000007279-49-tps-1024-1024.webp";
// Metode 2: Gunakan file lokal (mendukung path absolut dan relatif)
// Format: file:// + path file
// String image1 = "file:///path/to/your/image.png";
// Metode 3: Gunakan gambar Base64-encoded
// String image1 = encodeFile("/path/to/your/image.png");
// Bangun pesan input teks. Ini mendukung pembuatan seri teks-ke-gambar dan gambar-ke-gambar. Contoh ini menunjukkan pembuatan seri teks-ke-gambar.
ImageGenerationMessage message = ImageGenerationMessage.builder()
.role("user")
.content(Collections.singletonList(
Collections.singletonMap("text", "A cinematic image series documenting the same stray orange cat, whose features must remain consistent. First image: In spring, the cat weaves through blooming cherry blossom trees. Second image: In summer, the cat cools off in the shade on an old street. Third image: In autumn, the cat walks on a carpet of golden fallen leaves. Fourth image: In winter, the cat leaves footprints in the snow.")
)).build();
// Untuk pembuatan seri gambar-gambar, hapus komentar kode berikut dan beri komentar pada pembangun pesan teks biasa di atas.
// ImageGenerationMessage message = ImageGenerationMessage.builder()
// .role("user")
// .content(Arrays.asList(
// Collections.singletonMap("text", "Generate a four-season image series based on the style of the reference image."),
// Collections.singletonMap("image", image1)
// )).build();
ImageGenerationParam param = ImageGenerationParam.builder()
.apiKey(apiKey)
.model("wan2.7-image-pro")
.messages(Collections.singletonList(message))
.enableSequential(true)
.n(4)
.size("2K") // Model wan2.7-image-pro hanya mendukung resolusi 4K untuk pembuatan teks-ke-gambar. Pengeditan gambar dan pembuatan seri gambar mendukung resolusi maksimum 2K.
.build();
ImageGeneration imageGeneration = new ImageGeneration();
ImageGenerationResult result = null;
try {
System.out.println("----sync call, please wait a moment----");
result = imageGeneration.call(param);
} catch (ApiException | NoApiKeyException | UploadFileException e) {
throw new RuntimeException(e.getMessage());
}
// Ekstrak URL gambar hasil dan simpan ke direktori lokal.
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";
// URL hasil berlaku selama 24 jam. Pastikan untuk mengunduhnya tepat waktu.
try (InputStream in = new URL(imageUrl).openStream()) {
Files.copy(in, Paths.get(fileName), StandardCopyOption.REPLACE_EXISTING);
}
System.out.println("Gambar disimpan ke " + fileName);
}
}
}
}
public static void main(String[] args) throws ApiException, NoApiKeyException, UploadFileException, IOException {
basicCall();
}
}
Contoh respons
URL berlaku selama 24 jam. Simpan tepat waktu.
{
"requestId": "4678c314-b37a-91c9-a2ae-2d3cd54bbxxx",
"usage": {
"input_tokens": 720,
"output_tokens": 11,
"total_tokens": 731,
"image_count": 4,
"size": "2048*2048"
},
"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"
},
{
"image": "https://dashscope-result-bj.oss-cn-beijing.aliyuncs.com/xxxxxx.png?Expires=xxxxxx",
"type": "image"
},
{
"image": "https://dashscope-result-bj.oss-cn-beijing.aliyuncs.com/xxxxxx.png?Expires=xxxxxx",
"type": "image"
},
{
"image": "https://dashscope-result-bj.oss-cn-beijing.aliyuncs.com/xxxxxx.png?Expires=xxxxxx",
"type": "image"
}
]
}
}
],
"finished": true
},
"status_code": 200,
"code": "",
"message": ""
}
Pemanggilan asinkron
Contoh permintaan
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;
/**
* Pembuatan Set Gambar wan2.7-image-pro - Contoh Pemanggilan Asinkron (Wilayah Singapura)
*/
public class Main {
static {
// URL berikut untuk wilayah Singapura. base_url bervariasi berdasarkan wilayah.
Constants.baseHttpApiUrl = "https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1";
}
// Jika Anda belum mengonfigurasi variabel lingkungan, ganti baris berikut dengan Kunci API Model Studio Anda: apiKey="sk-xxx"
// Kunci API bervariasi berdasarkan wilayah. Untuk mendapatkan Kunci API, kunjungi https://www.alibabacloud.com/help/en/model-studio/get-api-key
static String apiKey = System.getenv("DASHSCOPE_API_KEY");
// --- Fungsi encoding Base64 ---
// Format encoding Base64 adalah 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 ImageGenerationResult waitTask(String taskId)
throws ApiException, NoApiKeyException {
ImageGeneration imageGeneration = new ImageGeneration();
return imageGeneration.wait(taskId, apiKey);
}
public static void asyncCall() throws ApiException, NoApiKeyException, UploadFileException, IOException {
/*
* Deskripsi metode input gambar (untuk skenario pembuatan set gambar-gambar):
* Tiga metode input gambar berikut disediakan. Anda dapat memilih salah satunya.
* 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
// String image1 = "https://img.alicdn.com/imgextra/i4/O1CN01IM44WN23dq5uY1yla_!!6000000007279-49-tps-1024-1024.webp";
// [Metode 2] Gunakan file lokal (mendukung path absolut dan relatif)
// Format: file:// + path file
// String image1 = "file:///path/to/your/image.png";
// [Metode 3] Gunakan gambar Base64-encoded
// String image1 = encodeFile("/path/to/your/image.png");
// Bangun pesan input teks (mendukung pembuatan set teks-ke-gambar dan gambar-ke-gambar. Contoh ini menggunakan pembuatan set teks-ke-gambar.)
ImageGenerationMessage message = ImageGenerationMessage.builder()
.role("user")
.content(Collections.singletonList(
Collections.singletonMap("text", "A cinematic image set documenting the same stray orange cat. Its features must be consistent across all images. Image 1: In spring, the orange cat weaves through blooming cherry blossom trees. Image 2: In summer, the orange cat cools off in the shade of a tree on an old street. Image 3: In autumn, the orange cat steps on a carpet of golden fallen leaves. Image 4: In winter, the orange cat leaves footprints as it walks on the snow.")
)).build();
// Untuk skenario pembuatan set gambar-gambar: hapus komentar kode berikut dan beri komentar pada konstruksi teks biasa di atas.
// ImageGenerationMessage message = ImageGenerationMessage.builder()
// .role("user")
// .content(Arrays.asList(
// Collections.singletonMap("text", "Generate an image set of the four seasons based on the style of the reference image."),
// Collections.singletonMap("image", image1)
// )).build();
ImageGenerationParam param = ImageGenerationParam.builder()
.apiKey(apiKey)
.model("wan2.7-image-pro")
.messages(Collections.singletonList(message))
.enableSequential(true)
.n(4)
.size("2K") // Model wan2.7-image-pro hanya mendukung resolusi 4K untuk pembuatan teks-ke-gambar. Pengeditan gambar dan pembuatan set gambar mendukung resolusi maksimum 2K.
.build();
ImageGeneration imageGeneration = new ImageGeneration();
ImageGenerationResult taskResult = null;
try {
System.out.println("----async call, creating task----");
taskResult = imageGeneration.asyncCall(param);
} catch (ApiException | NoApiKeyException | UploadFileException e) {
throw new RuntimeException(e.getMessage());
}
System.out.println("Tugas dibuat: " + JsonUtils.toJson(taskResult));
// Tunggu hingga tugas selesai.
String taskId = taskResult.getOutput().getTaskId();
ImageGenerationResult result = waitTask(taskId);
// Ambil URL gambar hasil dan simpan ke direktori lokal.
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";
// URL hasil berlaku selama 24 jam. Unduh gambar tepat waktu.
try (InputStream in = new URL(imageUrl).openStream()) {
Files.copy(in, Paths.get(fileName), StandardCopyOption.REPLACE_EXISTING);
}
System.out.println("Gambar disimpan ke " + fileName);
}
}
}
}
public static void main(String[] args) throws ApiException, NoApiKeyException, UploadFileException, IOException {
asyncCall();
}
}
Contoh respons
-
Contoh respons untuk membuat tugas
{ "requestId": "7d026dc1-e8c9-9caa-84ac-e82e2da97xxx", "output": { "task_id": "2de18c56-c151-4b80-8105-1d164733exxx", "task_status": "PENDING" }, "status_code": 200, "code": "", "message": "" } -
Contoh respons untuk menanyakan hasil tugas
URL berlaku selama 24 jam. Simpan tepat waktu.
{ "requestId": "daea7295-4ce0-928a-9a11-4d2bea058xxx", "usage": { "input_tokens": 720, "output_tokens": 11, "total_tokens": 731, "image_count": 4, "size": "2048*2048" }, "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" }, { "image": "https://dashscope-result-bj.oss-cn-beijing.aliyuncs.com/xxxxxx.png?Expires=xxxxxx", "type": "image" }, { "image": "https://dashscope-result-bj.oss-cn-beijing.aliyuncs.com/xxxxxx.png?Expires=xxxxxx", "type": "image" }, { "image": "https://dashscope-result-bj.oss-cn-beijing.aliyuncs.com/xxxxxx.png?Expires=xxxxxx", "type": "image" } ] } } ], "task_id": "2de18c56-c151-4b80-8105-1d164733exxx", "task_status": "SUCCEEDED", "finished": true, "submit_time": "2026-03-31 19:49:53.124", "scheduled_time": "2026-03-31 19:49:53.175", "end_time": "2026-03-31 19:50:53.160" }, "status_code": 200, "code": "", "message": "" }
Penagihan dan pembatasan laju
-
Untuk kuota gratis dan harga satuan model, lihat Harga model.
-
Untuk pembatasan laju model, lihat Wanxiang.
-
Detail penagihan: Anda ditagih berdasarkan jumlah gambar yang berhasil dihasilkan. Pemanggilan yang gagal dan error pemrosesan tidak dikenai biaya atau mengurangi kuota gratis untuk pengguna baru Anda.
Kode error
Jika panggilan model gagal dan mengembalikan pesan kesalahan, lihat Kode Kesalahan untuk resolusi.