全部产品
Search
文档中心

Alibaba Cloud Model Studio:Qwen - referensi API pengeditan citra

更新时间:Dec 13, 2025

Qwen-Image-Edit-Plus mendukung input dan output multi-citra. Model ini dapat memodifikasi teks dalam citra secara akurat, menambahkan, menghapus, atau memindahkan objek, mengubah aksi subjek, mentransfer gaya citra, serta meningkatkan detail citra.

Contoh

Fusi multi-citra

image99

image98

image89

image100

imageout2

Input image 1

Input image 2

Input image 3

Buat gadis dari Image 1 mengenakan gaun hitam dari Image 2 dan duduk dalam pose dari Image 3.

image83

image103

1

2

imageout2

Input image 1

Input image 2

Input image 3

Buat gadis dari Image 1 mengenakan kalung dari Image 2 dan membawa tas dari Image 3 di bahu kirinya.

Pengeditan citra tunggal

image36

image38

image

image

Original image

Hasilkan citra yang sesuai dengan depth map, mengikuti deskripsi berikut: Sebuah sepeda merah yang rusak diparkir di jalan berlumpur dengan hutan purba yang lebat di latar belakang.

Original image

Ganti kata "HEALTH INSURANCE" pada balok huruf dengan "明天会更好".

5

5out

6

6out

Original image

Ganti kemeja berpola titik dengan kemeja biru muda.

Original image

Ubah latar belakang citra menjadi Antarktika.

HTTP

Sebelum melakukan pemanggilan, dapatkan Kunci API dan atur Kunci API sebagai Variabel lingkungan.

Untuk melakukan pemanggilan menggunakan SDK, instal SDK DashScope. SDK tersedia untuk Python dan Java.

Penting

Wilayah Beijing dan Singapura memiliki Kunci API dan titik akhir permintaan yang terpisah. Jangan gunakan secara bergantian. Pemanggilan lintas wilayah menyebabkan kegagalan autentikasi atau kesalahan layanan.

Wilayah Singapura:POST https://dashscope-intl.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation

Wilayah Beijing:POST https://dashscope.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation

Parameter permintaan

Pengeditan citra tunggal

Contoh ini menggunakan model qwen-image-edit-plus untuk menghasilkan dua citra.

URL dalam contoh ini ditujukan untuk wilayah Singapura. Jika Anda menggunakan model di wilayah Beijing, ganti URL dengan: https://dashscope.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation

curl --location 'https://dashscope-intl.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation' \
--header 'Content-Type: application/json' \
--header "Authorization: Bearer $DASHSCOPE_API_KEY" \
--data '{
    "model": "qwen-image-edit-plus",
    "input": {
        "messages": [
            {
                "role": "user",
                "content": [
                    {
                        "image": "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20250925/fpakfo/image36.webp"
                    },
                    {
                        "text": "Generate an image that matches the depth map, following this description: A dilapidated red bicycle is parked on a muddy path with a dense primeval forest in the background."
                    }
                ]
            }
        ]
    },
    "parameters": {
        "n": 2,
        "negative_prompt": " ",
        "prompt_extend": true,
        "watermark": false
    }
}'

Fusi multi-citra

Contoh ini menggunakan model qwen-image-edit-plus untuk menghasilkan dua citra.

URL dalam contoh ini ditujukan untuk wilayah Singapura. Jika Anda menggunakan model di wilayah Beijing, ganti URL dengan: https://dashscope.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation

curl --location 'https://dashscope-intl.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation' \
--header 'Content-Type: application/json' \
--header "Authorization: Bearer $DASHSCOPE_API_KEY" \
--data '{
    "model": "qwen-image-edit-plus",
    "input": {
        "messages": [
            {
                "role": "user",
                "content": [
                    {
                        "image": "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20250925/thtclx/input1.png"
                    },
                    {
                        "image": "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20250925/iclsnx/input2.png"
                    },
                    {
                        "image": "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20250925/gborgw/input3.png"
                    },
                    {
                        "text": "The girl in Image 1 wears the black dress from Image 2 and sits down in the pose from Image 3."
                    }
                ]
            }
        ]
    },
    "parameters": {
        "n": 2,
        "negative_prompt": " ",
        "prompt_extend": true,
        "watermark": false
    }
}'
Header

Content-Type string (Wajib)

Tipe konten permintaan. Atur parameter ini ke application/json.

Authorization string (Wajib)

Kredensial autentikasi identitas untuk permintaan. API ini menggunakan Kunci API Model Studio untuk autentikasi identitas. Contoh: Bearer sk-xxxx.

Body permintaan

model string (Wajib)

Model yang digunakan. Model berikut tersedia:

qwen-image-edit-plus dan qwen-image-edit-plus-2025-10-30: Mendukung pembuatan 1 hingga 6 citra.

qwen-image-edit: Hanya mendukung pembuatan satu citra.

input object (Wajib)

Objek input, yang berisi bidang-bidang berikut:

Properti

messages array (Wajib)

Array yang berisi konten permintaan. Saat ini, hanya percakapan single-turn yang didukung. Oleh karena itu, array harus berisi tepat satu objek. Objek ini berisi properti role dan content.

Properti

role string (Wajib)

Peran pengirim pesan. Nilai ini harus diatur ke user.

content array (Wajib)

Konten pesan. Berisi satu hingga tiga citra dalam format {"image": "..."} dan satu instruksi pengeditan dalam format {"text": "..."}.

Properti

image string (Wajib)

URL atau data yang diencode Base64 dari citra input. Anda dapat memberikan 1 hingga 3 citra. Jika Anda memberikan beberapa citra, citra terakhir menentukan rasio aspek output.

Persyaratan citra:

  • Format citra yang didukung: JPG, JPEG, PNG, BMP, TIFF, WEBP, dan GIF.

    Citra output berformat PNG. Untuk GIF animasi, hanya frame pertama yang diproses.
  • Resolusi citra: Untuk hasil terbaik, lebar dan tinggi citra harus antara 384 hingga 3072 piksel. Resolusi terlalu rendah dapat menghasilkan citra buram, sedangkan resolusi terlalu tinggi meningkatkan waktu pemrosesan.

  • Ukuran citra: Tidak lebih dari 10 MB.

  • Jika URL berisi karakter non-ASCII, seperti karakter Tionghoa, Anda harus mengencode URL tersebut sebelum memasukkannya ke dalam permintaan.

    URL Encoding

    from urllib.parse import quote
    
    # Ganti URL berikut dengan URL yang ingin Anda encode.
    url = "https://example.com/search?q=test&page=1"
    encoded_url = quote(url, safe=':/?#[]@!$&\'()*+,;=%')
    print(f"Original URL: {url}")
    print(f"Encoded URL: {encoded_url}")

Metode 1: URL publik: URL HTTP atau HTTPS yang dapat diakses publik untuk citra.

  • Contoh: https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20250925/fpakfo/image36.webp

Metode 2: Encoding Base64: String harus dalam format data:{mime_type};base64,{base64_data}.

  • {mime_type}: Jenis media citra. Harus sesuai dengan format file.

  • {base64_data}: String yang diencode Base64 dari file.

  • Contoh nilai: data:image/jpeg;base64,GDU7MtCZz... (Contoh ini dipotong untuk tujuan demonstrasi.)

Untuk contoh kode lengkap, lihat SDK Python atau SDK Java.

text string (Wajib)

Instruksi pengeditan citra, juga dikenal sebagai Petunjuk positif. Menggambarkan elemen dan fitur visual yang Anda inginkan dalam citra yang dihasilkan.

Saat mengedit beberapa citra, Anda harus menggunakan deskripsi seperti "Image 1", "Image 2", dan "Image 3" dalam instruksi pengeditan untuk merujuk ke citra yang sesuai. Jika tidak, hasil pengeditan mungkin tidak sesuai harapan.

Parameter ini mendukung bahasa Tionghoa dan Inggris. Panjang maksimum adalah 800 karakter. Setiap karakter Tionghoa atau huruf dihitung sebagai satu karakter. Konten yang melebihi batas akan dipotong secara otomatis.

Contoh: Buat gadis dari Image 1 mengenakan gaun hitam dari Image 2 dan duduk dalam pose dari Image 3. Pertahankan pakaian, gaya rambut, dan ekspresinya, serta pastikan aksinya alami dan lancar.

parameters object (Opsional)

Parameter tambahan untuk mengontrol pembuatan citra.

Properti

n integer (Opsional)

Jumlah citra yang akan dihasilkan. Nilai default adalah 1.

Untuk qwen-image-edit-plus dan qwen-image-edit-plus-2025-10-30, Anda dapat menghasilkan 1 hingga 6 citra.

Untuk qwen-image-edit, hanya satu citra yang dapat dihasilkan.

negative_prompt string (Opsional)

Prompt negatif. Menggambarkan konten yang tidak ingin Anda lihat dalam citra dan dapat digunakan untuk membatasi output.

Parameter ini mendukung bahasa Tionghoa dan Inggris. Panjang maksimum adalah 500 karakter. Setiap karakter Tionghoa atau huruf dihitung sebagai satu karakter. Konten yang melebihi batas akan dipotong secara otomatis.

Contoh: low resolution, error, worst quality, low quality, disfigured, extra fingers, bad proportions.

size string (Opsional)

Menentukan resolusi citra output dalam format width*height, seperti "1024*2048". Nilai lebar dan tinggi harus dalam rentang [512, 2048] piksel.

Perilaku default: Jika Anda tidak mengatur parameter ini, citra output mempertahankan rasio aspek yang mirip dengan citra input, dengan resolusi mendekati 1024*1024.

Batasan: Parameter ini hanya tersedia ketika jumlah citra output (n) adalah 1. Jika tidak, kesalahan akan dilaporkan.

Model yang didukung: Hanya model qwen-image-edit-plus dan qwen-image-edit-plus-2025-10-30 yang mendukung parameter ini.

prompt_extend bool (Opsional)

Menentukan apakah akan mengaktifkan penulisan ulang prompt. Saat diaktifkan, model bahasa besar mengoptimalkan Petunjuk positif. Fitur ini secara signifikan meningkatkan hasil untuk prompt yang sederhana atau kurang deskriptif.

  • true (Default)

  • false

Model yang didukung: Hanya model qwen-image-edit-plus dan qwen-image-edit-plus-2025-10-30 yang mendukung parameter ini.

watermark bool (Opsional)

Menentukan apakah akan menambahkan watermark "Qwen-Image" di pojok kanan bawah citra. Nilai default adalah false. Watermark:

1

seed integer (Opsional)

Seed bilangan acak. Nilainya harus berupa integer dalam rentang [0, 2147483647].

Menggunakan nilai parameter seed yang sama membantu memastikan konsistensi konten yang dihasilkan. Jika Anda tidak menentukan parameter ini, algoritma menggunakan seed bilangan acak.

Catatan: Proses pembuatan model bersifat probabilistik. Bahkan jika Anda menggunakan seed yang sama, hasilnya tidak dijamin identik untuk setiap permintaan.

Parameter respons

Eksekusi tugas berhasil

Data 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.

{
    "output": {
        "choices": [
            {
                "finish_reason": "stop",
                "message": {
                    "role": "assistant",
                    "content": [
                        {
                            "image": "https://dashscope-result-sz.oss-cn-shenzhen.aliyuncs.com/xxx.png?Expires=xxx"
                        },
                        {
                            "image": "https://dashscope-result-sz.oss-cn-shenzhen.aliyuncs.com/xxx.png?Expires=xxx"
                        }
                    ]
                }
            }
        ]
    },
    "usage": {
        "width": 1248,
        "image_count": 2,
        "height": 832
    },
    "request_id": "bf37ca26-0abe-98e4-8065-xxxxxx"
}

Eksekusi tugas gagal

Jika tugas gagal, respons akan mengembalikan informasi terkait. Anda dapat mengidentifikasi penyebab kegagalan dari bidang `code` dan `message`. Untuk informasi lebih lanjut tentang cara menyelesaikan kesalahan, lihat Kode kesalahan.

{
    "request_id": "31f808fd-8eef-9004-xxxxx",
    "code": "InvalidApiKey",
    "message": "Invalid API-key provided."
}

output object

Hasil yang dihasilkan oleh model.

Properti

choices array

Daftar hasil yang dihasilkan.

Properti

finish_reason string

Alasan tugas pembuatan dihentikan. Nilai stop menunjukkan bahwa tugas berhenti secara alami.

message object

Pesan yang dikembalikan oleh model.

Properti

role string

Peran pengirim pesan. Nilainya adalah assistant.

content array

Konten pesan, yang berisi informasi tentang citra yang dihasilkan.

Properti

image string

URL citra yang dihasilkan. Tautan ini berlaku selama 24 jam. Unduh dan simpan citra tersebut segera.

Citra yang dihasilkan berformat PNG. Memiliki rasio aspek yang sama dengan citra input dan resolusi sekitar 1024*1024 piksel.

usage object

Penggunaan resource untuk permintaan ini. Parameter ini hanya dikembalikan jika permintaan berhasil.

Properti

image_count integer

Jumlah citra yang dihasilkan sama dengan jumlah citra output yang dipilih.

width integer

Lebar citra yang dihasilkan dalam piksel.

height integer

Tinggi citra yang dihasilkan dalam piksel.

request_id string

ID permintaan unik. Anda dapat menggunakan ID ini untuk melacak dan memecahkan masalah.

code string

Kode kesalahan untuk permintaan yang gagal. Parameter ini tidak dikembalikan jika permintaan berhasil. Untuk informasi lebih lanjut, lihat Pesan kesalahan.

message string

Informasi detail tentang permintaan yang gagal. Parameter ini tidak dikembalikan jika permintaan berhasil. Untuk informasi lebih lanjut, lihat Pesan kesalahan.

DashScope SDK

Nama parameter SDK sebagian besar konsisten dengan API HTTP. Struktur parameter disesuaikan untuk setiap bahasa pemrograman. Untuk daftar lengkap parameter, lihat Referensi API Qwen.

SDK Python

Catatan
  • Instal versi terbaru SDK Python DashScope. Jika tidak, kesalahan waktu proses dapat terjadi: Instal atau upgrade SDK.

  • API asinkron tidak didukung.

Contoh permintaan

Contoh ini menggunakan model qwen-image-edit-plus untuk menghasilkan dua citra.

Melewatkan citra menggunakan URL publik

import json
import os
import dashscope
from dashscope import MultiModalConversation

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

# Model mendukung satu hingga tiga citra input.
messages = [
    {
        "role": "user",
        "content": [
            {"image": "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20250925/thtclx/input1.png"},
            {"image": "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20250925/iclsnx/input2.png"},
            {"image": "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20250925/gborgw/input3.png"},
            {"text": "Make the girl from Image 1 wear the black dress from Image 2 and sit in the pose from Image 3."}
        ]
    }
]

# Kunci API untuk wilayah Singapura dan Beijing berbeda. Dapatkan Kunci API: https://www.alibabacloud.com/help/en/model-studio/get-api-key
# 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")


# qwen-image-edit-plus mendukung output 1 hingga 6 citra. Contoh ini menunjukkan cara menghasilkan 2 citra.
response = MultiModalConversation.call(
    api_key=api_key,
    model="qwen-image-edit-plus",
    messages=messages,
    stream=False,
    n=2,
    watermark=False,
    negative_prompt=" ",
    prompt_extend=True,
    # Parameter size hanya didukung ketika jumlah citra output n adalah 1. Jika tidak, kesalahan akan dilaporkan.
    # size="1024*2048",
)

if response.status_code == 200:
    # Untuk melihat respons lengkap, hapus komentar baris berikut.
    # print(json.dumps(response, ensure_ascii=False))
    for i, content in enumerate(response.output.choices[0].message.content):
        print(f"URL of output image {i+1}: {content['image']}")
else:
    print(f"HTTP status code: {response.status_code}")
    print(f"Error code: {response.code}")
    print(f"Error message: {response.message}")
    print("For more information, see the documentation: https://www.alibabacloud.com/help/en/model-studio/error-code")

Melewatkan citra menggunakan encoding Base64

import json
import os
import dashscope
from dashscope import MultiModalConversation
import base64
import mimetypes

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


# --- Untuk encoding 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("Unsupported or unrecognized image format")

    try:
        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}"
    except IOError as e:
        raise IOError(f"Error reading file: {file_path}, Error: {str(e)}")


# Dapatkan encoding Base64 dari citra.
# Panggil fungsi encoding. Ganti "/path/to/your/image.png" dengan path ke file citra lokal Anda. Jika tidak, kode tidak akan berjalan.
image = encode_file("/path/to/your/image.png")

messages = [
    {
        "role": "user",
        "content": [
            {"image": image},
            {"text": "Generate an image that matches the depth map, following this description: A dilapidated red bicycle is parked on a muddy path with a dense primeval forest in the background."}
        ]
    }
]

# Kunci API untuk wilayah Singapura dan Beijing berbeda. Dapatkan Kunci API: https://www.alibabacloud.com/help/en/model-studio/get-api-key
# 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")



# qwen-image-edit-plus mendukung output 1 hingga 6 citra. Contoh ini menunjukkan cara menghasilkan 2 citra.
response = MultiModalConversation.call(
    api_key=api_key,
    model="qwen-image-edit-plus",
    messages=messages,
    stream=False,
    n=2,
    watermark=False,
    negative_prompt=" ",
    prompt_extend=True,
    # Parameter size hanya didukung ketika jumlah citra output n adalah 1. Jika tidak, kesalahan akan dilaporkan.
    # size="2048*1024",
)

if response.status_code == 200:
    # Untuk melihat respons lengkap, hapus komentar baris berikut.
    # print(json.dumps(response, ensure_ascii=False))
    for i, content in enumerate(response.output.choices[0].message.content):
        print(f"URL of output image {i+1}: {content['image']}")
else:
    print(f"HTTP status code: {response.status_code}")
    print(f"Error code: {response.code}")
    print(f"Error message: {response.message}")
    print("For more information, see the documentation: https://www.alibabacloud.com/help/en/model-studio/error-code")

Mengunduh citra dari URL

# Anda perlu menginstal requests untuk mengunduh citra: pip install requests
import requests


def download_image(image_url, save_path='output.png'):
    try:
        response = requests.get(image_url, stream=True, timeout=300)  # Atur timeout
        response.raise_for_status()  # Bangkitkan pengecualian jika kode status HTTP bukan 200.
        with open(save_path, 'wb') as f:
            for chunk in response.iter_content(chunk_size=8192):
                f.write(chunk)
        print(f"Image downloaded successfully to: {save_path}")

    except requests.exceptions.RequestException as e:
        print(f"Image download failed: {e}")


image_url = "https://dashscope-result-sz.oss-cn-shenzhen.aliyuncs.com/xxx.png?Expires=xxx"
download_image(image_url, save_path='output.png')

Contoh respons

Tautan citra berlaku selama 24 jam. Unduh citra tersebut segera.

input_tokens dan output_tokens adalah bidang kompatibilitas. Nilainya saat ini tetap 0.
{
    "status_code": 200,
    "request_id": "121d8c7c-360b-4d22-a976-6dbb8bxxxxxx",
    "code": "",
    "message": "",
    "output": {
        "text": null,
        "finish_reason": null,
        "choices": [
            {
                "finish_reason": "stop",
                "message": {
                    "role": "assistant",
                    "content": [
                        {
                            "image": "https://dashscope-result-sz.oss-cn-shenzhen.aliyuncs.com/xxx.png?Expires=xxx"
                        },
                        {
                            "image": "https://dashscope-result-sz.oss-cn-shenzhen.aliyuncs.com/xxx.png?Expires=xxx"
                        }
                    ]
                }
            }
        ]
    },
    "usage": {
        "input_tokens": 0,
        "output_tokens": 0,
        "height": 1248,
        "image_count": 2,
        "width": 832
    }
}

SDK Java

Catatan

Instal versi terbaru SDK Java DashScope. Jika tidak, kesalahan waktu proses dapat terjadi: Instal atau upgrade SDK.

Contoh permintaan

Contoh berikut menunjukkan cara menggunakan model qwen-image-edit-plus untuk menghasilkan dua citra.

Melewatkan citra menggunakan URL publik

import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversation;
import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversationParam;
import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversationResult;
import com.alibaba.dashscope.common.MultiModalMessage;
import com.alibaba.dashscope.common.Role;
import com.alibaba.dashscope.exception.ApiException;
import com.alibaba.dashscope.exception.NoApiKeyException;
import com.alibaba.dashscope.exception.UploadFileException;
import com.alibaba.dashscope.utils.JsonUtils;
import com.alibaba.dashscope.utils.Constants;

import java.io.IOException;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
import java.util.List;

public class QwenImageEdit {

    static {
        // URL berikut untuk wilayah Singapura. Jika Anda menggunakan model di wilayah Beijing, ganti URL dengan https://dashscope.aliyuncs.com/api/v1.
        Constants.baseHttpApiUrl = "https://dashscope-intl.aliyuncs.com/api/v1";
    }
    
    // Kunci API untuk wilayah Singapura dan Beijing berbeda. Untuk mendapatkan kunci API, kunjungi https://www.alibabacloud.com/help/en/model-studio/get-api-key.
    // 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");

    public static void call() throws ApiException, NoApiKeyException, UploadFileException, IOException {

        MultiModalConversation conv = new MultiModalConversation();

        // Model mendukung satu hingga tiga citra input.
        MultiModalMessage userMessage = MultiModalMessage.builder().role(Role.USER.getValue())
                .content(Arrays.asList(
                        Collections.singletonMap("image", "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20250925/thtclx/input1.png"),
                        Collections.singletonMap("image", "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20250925/iclsnx/input2.png"),
                        Collections.singletonMap("image", "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20250925/gborgw/input3.png"),
                        Collections.singletonMap("text", "The girl in image 1 is wearing the black dress from image 2 and sitting in the pose from image 3.")
                )).build();
        // qwen-image-edit-plus mendukung output 1 hingga 6 citra. Contoh ini menunjukkan cara menghasilkan 2 citra.
        Map<String, Object> parameters = new HashMap<>();
        parameters.put("watermark", false);
        parameters.put("negative_prompt", " ");
        parameters.put("n", 2);
        parameters.put("prompt_extend", true);
        // Parameter size hanya didukung ketika jumlah citra output n adalah 1. Jika tidak, kesalahan akan dilaporkan.
        // parameters.put("size", "1024*2048");

        MultiModalConversationParam param = MultiModalConversationParam.builder()
                .apiKey(apiKey)
                .model("qwen-image-edit-plus")
                .messages(Collections.singletonList(userMessage))
                .parameters(parameters)
                .build();

        MultiModalConversationResult result = conv.call(param);
        // Untuk melihat respons lengkap, hapus komentar baris berikut.
        // System.out.println(JsonUtils.toJson(result));
        List<Map<String, Object>> contentList = result.getOutput().getChoices().get(0).getMessage().getContent();
        int imageIndex = 1;
        for (Map<String, Object> content : contentList) {
            if (content.containsKey("image")) {
                System.out.println("URL of output image " + imageIndex + ": " + content.get("image"));
                imageIndex++;
            }
        }
    }

    public static void main(String[] args) {
        try {
            call();
        } catch (ApiException | NoApiKeyException | UploadFileException | IOException e) {
            System.out.println(e.getMessage());
        }
    }
}

Melewatkan citra menggunakan encoding Base64

import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversation;
import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversationParam;
import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversationResult;
import com.alibaba.dashscope.common.MultiModalMessage;
import com.alibaba.dashscope.common.Role;
import com.alibaba.dashscope.exception.ApiException;
import com.alibaba.dashscope.exception.NoApiKeyException;
import com.alibaba.dashscope.exception.UploadFileException;
import com.alibaba.dashscope.utils.JsonUtils;
import com.alibaba.dashscope.utils.Constants;

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.Arrays;
import java.util.Base64;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
import java.util.List;

public class QwenImageEdit {

    static {
        // URL berikut untuk wilayah Singapura. Jika Anda menggunakan model di wilayah Beijing, ganti URL dengan https://dashscope.aliyuncs.com/api/v1.
        Constants.baseHttpApiUrl = "https://dashscope-intl.aliyuncs.com/api/v1";
    }
    
    // Kunci API untuk wilayah Singapura dan Beijing berbeda. Untuk mendapatkan kunci API, kunjungi https://www.alibabacloud.com/help/en/model-studio/get-api-key.
    // 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");

    public static void call() throws ApiException, NoApiKeyException, UploadFileException, IOException {

        // Ganti "/path/to/your/image.png" dengan path ke file citra lokal Anda. Jika tidak, kode tidak akan berjalan.
        String image = encodeFile("/path/to/your/image.png");

        MultiModalConversation conv = new MultiModalConversation();

        MultiModalMessage userMessage = MultiModalMessage.builder().role(Role.USER.getValue())
                .content(Arrays.asList(
                        Collections.singletonMap("image", image),
                        Collections.singletonMap("text", "Generate an image that matches the depth map and follows this description: A dilapidated red bicycle is parked on a muddy path, with a dense primeval forest in the background.")
                )).build();
        // qwen-image-edit-plus mendukung output 1 hingga 6 citra. Contoh ini menunjukkan cara menghasilkan 2 citra.
        Map<String, Object> parameters = new HashMap<>();
        parameters.put("watermark", false);
        parameters.put("negative_prompt", " ");
        parameters.put("n", 2);
        parameters.put("prompt_extend", true);
        // Parameter size hanya didukung ketika jumlah citra output n adalah 1. Jika tidak, kesalahan akan dilaporkan.
        // parameters.put("size", "2048*1024");

        MultiModalConversationParam param = MultiModalConversationParam.builder()
                .apiKey(apiKey)
                .model("qwen-image-edit-plus")
                .messages(Collections.singletonList(userMessage))
                .parameters(parameters)
                .build();

        MultiModalConversationResult result = conv.call(param);
        // Untuk melihat respons lengkap, hapus komentar baris berikut.
        // System.out.println(JsonUtils.toJson(result));
        List<Map<String, Object>> contentList = result.getOutput().getChoices().get(0).getMessage().getContent();
        int imageIndex = 1;
        for (Map<String, Object> content : contentList) {
            if (content.containsKey("image")) {
                System.out.println("URL of output image " + imageIndex + ": " + content.get("image"));
                imageIndex++;
            }
        }
    }

    /**
     * Mengencode file menjadi string Base64.
     * @param filePath Path 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 does not exist: " + filePath);
        }
        // Deteksi jenis MIME.
        String mimeType = null;
        try {
            mimeType = Files.probeContentType(path);
        } catch (IOException e) {
            throw new IllegalArgumentException("Cannot detect the file type: " + filePath);
        }
        if (mimeType == null || !mimeType.startsWith("image/")) {
            throw new IllegalArgumentException("Unsupported or unrecognized image format.");
        }
        // Baca konten file dan encode.
        byte[] fileBytes = null;
        try{
            fileBytes = Files.readAllBytes(path);
        } catch (IOException e) {
            throw new IllegalArgumentException("Cannot read the file content: " + filePath);
        }

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

    public static void main(String[] args) {
        try {
            call();
        } catch (ApiException | NoApiKeyException | UploadFileException | IOException e) {
            System.out.println(e.getMessage());
        }
    }
}

Mengunduh citra dari URL

import java.io.FileOutputStream;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
 
public class ImageDownloader {
    public static void downloadImage(String imageUrl, String savePath) {
        try {
            URL url = new URL(imageUrl);
            HttpURLConnection connection = (HttpURLConnection) url.openConnection();
            connection.setConnectTimeout(5000);
            connection.setReadTimeout(300000);
            connection.setRequestMethod("GET");
            InputStream inputStream = connection.getInputStream();
            FileOutputStream outputStream = new FileOutputStream(savePath);
            byte[] buffer = new byte[8192];
            int bytesRead;
            while ((bytesRead = inputStream.read(buffer)) != -1) {
                outputStream.write(buffer, 0, bytesRead);
            }
            inputStream.close();
            outputStream.close();
 
            System.out.println("Image downloaded successfully to: " + savePath);
        } catch (Exception e) {
            System.err.println("Image download failed: " + e.getMessage());
        }
    }
 
    public static void main(String[] args) {
        String imageUrl = "http://dashscope-result-bj.oss-cn-beijing.aliyuncs.com/xxx?Expires=xxx";
        String savePath = "output.png";
        downloadImage(imageUrl, savePath);
    }
}

Contoh respons

Tautan citra berlaku selama 24 jam. Unduh citra tersebut segera.

{
    "requestId": "46281da9-9e02-941c-ac78-be88b8xxxxxx",
    "usage": {
        "image_count": 2,
        "width": 1216,
        "height": 864
    },
    "output": {
        "choices": [
            {
                "finish_reason": "stop",
                "message": {
                    "role": "assistant",
                    "content": [
                        {
                            "image": "https://dashscope-result-sz.oss-cn-shenzhen.aliyuncs.com/xxx.png?Expires=xxx"
                        },
                        {
                            "image": "https://dashscope-result-sz.oss-cn-shenzhen.aliyuncs.com/xxx.png?Expires=xxx"
                        }
                    ]
                }
            }
        ]
    }
}

Penagihan dan Pembatasan laju

Wilayah Singapura

Model

Harga satuan

Batas laju (dibagi oleh Akun Alibaba Cloud dan Pengguna RAM)

Kuota gratis (Lihat)

Batas permintaan per detik (RPS)

Jumlah Tugas Konkuren

qwen-image-edit-plus

Currently same capabilities as qwen-image-edit-plus-2025-10-30

$0.03/citra

2

Tidak ada batas untuk API sinkron

100 citra

qwen-image-edit-plus-2025-10-30

$0.03/citra

2

Tidak ada batas untuk API sinkron

100 citra

qwen-image-edit

$0.045/citra

2

Tidak ada batas untuk API sinkron

100 citra

Wilayah Beijing

Model

Harga satuan

Batas laju (dibagi oleh Akun Alibaba Cloud dan Pengguna RAM)

Kuota gratis (Lihat)

Batas permintaan per detik (RPS)

Jumlah tugas konkuren

qwen-image-edit-plus

Currently same capabilities as qwen-image-edit-plus-2025-10-30

$0.028671/citra

2

Tidak ada batas untuk API sinkron

Tidak ada kuota gratis

qwen-image-edit-plus-2025-10-30

$0.028671/citra

2

Tidak ada batas untuk API sinkron

qwen-image-edit

$0.043/citra

2

Tidak ada batas untuk API sinkron

Deskripsi penagihan:

  • Anda dikenai biaya berdasarkan jumlah citra yang berhasil dihasilkan. Jika satu permintaan mengembalikan n citra, biaya untuk permintaan tersebut adalah n * harga satuan.

  • Pemanggilan model yang gagal atau kesalahan pemrosesan tidak dikenai biaya atau mengurangi kuota gratis.

  • Anda dapat mengaktifkan fitur "Hanya kuota gratis" untuk menghindari biaya tambahan setelah kuota gratis Anda habis. Untuk informasi lebih lanjut, lihat Kuota gratis untuk pengguna baru.

Konfigurasi izin akses citra

Citra yang dihasilkan oleh model disimpan di Object Storage Service (OSS). Setiap citra diberikan tautan OSS yang dapat diakses publik, seperti https://dashscope-result-xx.oss-cn-xxxx.aliyuncs.com/xxx.png. Anda dapat menggunakan tautan ini untuk melihat atau mengunduh citra. Tautan ini hanya berlaku selama 24 jam.

Jika bisnis Anda memiliki persyaratan keamanan tinggi dan Anda tidak dapat mengakses tautan OSS publik, Anda dapat mengonfigurasi daftar putih akses. Tambahkan nama domain berikut ke daftar putih Anda untuk memastikan Anda dapat mengakses tautan citra.

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.com

Kode kesalahan

Jika pemanggilan gagal, lihat Pesan kesalahan untuk troubleshooting.

FAQ

T: Apakah qwen-image-edit mendukung pengeditan percakapan multi-putaran?

J: Tidak. Model qwen-image-edit dirancang untuk eksekusi single-turn. Setiap pemanggilan merupakan tugas pengeditan independen tanpa status, dan model tidak menyimpan riwayat pengeditan Anda. Untuk melakukan pengeditan berkelanjutan, Anda dapat menggunakan citra output dari pengeditan sebelumnya sebagai citra input untuk permintaan baru.

T: Bahasa apa saja yang didukung oleh qwen-image dan qwen-image-plus?

J: Secara resmi mendukung Bahasa Tionghoa Sederhana dan Bahasa Inggris. Anda dapat mencoba bahasa lain, tetapi kinerjanya belum sepenuhnya diverifikasi dan tidak dijamin.

T: Jika saya mengunggah beberapa citra referensi dengan rasio aspek berbeda, citra mana yang menentukan rasio aspek citra output?

J: Citra output akan sesuai dengan rasio aspek citra referensi yang terakhir diunggah.

T: Bagaimana cara melihat penggunaan model?

J: Data pemanggilan model tersedia setelah penundaan satu jam. Anda dapat membuka halaman Observasi Model (Singapura atau Beijing) untuk melihat metrik seperti penggunaan panggilan, jumlah panggilan, dan tingkat keberhasilan. Untuk informasi lebih lanjut, lihat Cara melihat catatan panggilan model.