すべてのプロダクト
Search
ドキュメントセンター

Alibaba Cloud Model Studio:Qwen - 画像編集 API リファレンス

最終更新日:Dec 13, 2025

Qwen-Image-Edit-Plus は、複数画像の入出力に対応しています。画像内のテキストを正確に修正したり、オブジェクトを追加、削除、移動したり、主題のアクションを変更したり、画像スタイルを転送したり、画像の詳細を強調したりすることができます。

複数画像の融合

image99

image98

image89

image100

imageout2

入力画像 1

入力画像 2

入力画像 3

画像 1 の少女に、画像 2 の黒いドレスを着せ、画像 3 のポーズで座らせます。

image83

image103

1

2

imageout2

入力画像 1

入力画像 2

入力画像 3

画像 1 の少女に、画像 2 のネックレスをつけさせ、画像 3 のバッグを左肩にかけさせます。

単一画像の編集

image36

image38

image

image

元の画像

深度マップに一致させ、以下の説明文に従って画像を生成します:荒廃した赤い自転車が、背景に鬱蒼とした原生林が広がる泥道に停められています。

元の画像

文字ブロックの「HEALTH INSURANCE」という単語を「明天会更好」に置き換えます。

5

5out

6

6out

元の画像

水玉模様のシャツを水色のシャツに置き換えます。

元の画像

画像の背景を南極に変更します。

HTTP

呼び出しを行う前に、API キーを取得し、API キーを環境変数として設定してください。

SDK を使用して呼び出しを行うには、DashScope SDK をインストールしてください。SDK は Python と Java で利用できます。

重要

北京リージョンとシンガポールリージョンでは、API キーリクエストエンドポイントが異なります。これらを相互に使用しないでください。リージョンをまたいだ呼び出しは、認証失敗やサービスエラーの原因となります。

シンガポールリージョン:POST https://dashscope-intl.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation

北京リージョン:POST https://dashscope.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation

リクエストパラメーター

単一画像の編集

この例では、qwen-image-edit-plus モデルを使用して 2 枚の画像を生成します。

この例の URL はシンガポールリージョン用です。北京リージョンのモデルを使用する場合は、URL を 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
    }
}'

複数画像の融合

この例では、qwen-image-edit-plus モデルを使用して 2 枚の画像を生成します。

この例の URL はシンガポールリージョン用です。北京リージョンのモデルを使用する場合は、URL を 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
    }
}'
ヘッダー

Content-Type string (必須)

リクエストのコンテンツタイプ。このパラメーターを application/json に設定します。

Authorization string (必須)

リクエストの身分認証情報。この API は、身分認証に Model Studio API キーを使用します。例:Bearer sk-xxxx。

リクエストボディ

model string (必須)

使用するモデル。以下のモデルが利用可能です:

qwen-image-edit-plus および qwen-image-edit-plus-2025-10-30:1〜6 枚の画像の生成をサポートします。

qwen-image-edit:1 枚の画像のみ生成をサポートします。

input object (必須)

入力オブジェクト。以下のフィールドが含まれます:

プロパティ

messages array (必須)

リクエストのコンテンツを含む配列。現在、シングルターン対話のみがサポートされています。そのため、配列にはオブジェクトを 1 つだけ含める必要があります。このオブジェクトには、rolecontent プロパティが含まれます。

プロパティ

role string (必須)

メッセージ送信者のロール。これは user に設定する必要があります。

content array (必須)

メッセージのコンテンツ。{"image": "..."} 形式の画像 1〜3 枚と、{"text": "..."} 形式の編集命令 1 つが含まれます。

プロパティ

image string (必須)

入力画像の URL または Base64 エンコードされたデータ。1〜3 枚の画像を提供できます。複数の画像を提供する場合、最後の画像が出力のアスペクト比を決定します。

画像要件:

  • サポートされる画像フォーマット:JPG、JPEG、PNG、BMP、TIFF、WEBP、GIF。

    出力画像は PNG 形式です。アニメーション GIF の場合、最初のフレームのみが処理されます。
  • 画像解像度:最良の結果を得るには、画像の幅と高さの両方が 384〜3072 ピクセルの間である必要があります。解像度が低すぎると画像がぼやける可能性があり、高すぎると処理時間が増加します。

  • 画像サイズ:10 MB 以下。

  • URL に中国語文字などの非 ASCII 文字が含まれている場合は、リクエストに含める前に URL をエンコードする必要があります。

    URL エンコーディング

    from urllib.parse import quote
    
    # 以下の URL をエンコードしたい URL に置き換えてください。
    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}")

方法 1:パブリック URL:画像へのパブリックにアクセス可能な HTTP または HTTPS の URL。

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

方法 2:Base64 エンコーディング:文字列は data:{mime_type};base64,{base64_data} 形式である必要があります。

  • {mime_type}:画像のメディアタイプ。ファイル形式に対応している必要があります。

  • {base64_data}:ファイルの Base64 エンコードされた文字列。

  • 値の例:data:image/jpeg;base64,GDU7MtCZz... (この例はデモンストレーションのために切り捨てられています。)

完全なコードサンプルについては、「Python SDK」または「Java SDK」をご参照ください。

text string (必須)

画像編集命令。ポジティブプロンプトとも呼ばれます。生成される画像に含めたい要素や視覚的特徴を記述します。

複数の画像を編集する場合、編集命令で「画像 1」「画像 2」「画像 3」などの記述を使用して対応する画像を参照する必要があります。そうしないと、編集結果が期待通りにならない可能性があります。

このパラメーターは中国語と英語をサポートしています。最大長は 800 文字です。各中国語文字または英字は 1 文字としてカウントされます。制限を超えたコンテンツは自動的に切り捨てられます。

例:画像 1 の少女に画像 2 の黒いドレスを着せ、画像 3 のポーズで座らせます。服装、髪型、表情は変えず、アクションが自然で滑らかになるようにします。

parameters object (任意)

画像生成を制御するための追加パラメーター。

プロパティ

n integer (任意)

生成する画像の数。デフォルト値は 1 です。

qwen-image-edit-plus および qwen-image-edit-plus-2025-10-30 では、1〜6 枚の画像を生成できます。

qwen-image-edit では、1 枚の画像しか生成できません。

negative_prompt string (任意)

ネガティブプロンプト。画像に表示したくないコンテンツを記述し、出力を制約するために使用できます。

このパラメーターは中国語と英語をサポートしています。最大長は 500 文字です。各中国語文字または英字は 1 文字としてカウントされます。制限を超えたコンテンツは自動的に切り捨てられます。

例:低解像度、エラー、最低品質、低品質、変形、指が多い、プロポーションが悪い。

size string (任意)

出力画像の解像度を width*height 形式で指定します。例:"1024*2048"。幅と高さの値は [512, 2048] ピクセルの範囲内である必要があります。

デフォルトの動作:このパラメーターを設定しない場合、出力画像は入力画像と同様のアスペクト比を維持し、解像度は 1024*1024 に近くなります。

制限:このパラメーターは、出力画像数 (n) が 1 の場合にのみ利用可能です。それ以外の場合はエラーが報告されます。

サポートされるモデルqwen-image-edit-plus および qwen-image-edit-plus-2025-10-30 モデルのみがこのパラメーターをサポートします。

prompt_extend bool (任意)

プロンプトの書き換えを有効にするかどうかを指定します。有効にすると、大規模言語モデルがポジティブプロンプトを最適化します。この機能は、単純または説明の少ないプロンプトに対して結果を大幅に改善します。

  • true (デフォルト)

  • false

サポートされるモデルqwen-image-edit-plus および qwen-image-edit-plus-2025-10-30 モデルのみがこのパラメーターをサポートします。

watermark bool (任意)

画像の右下隅に「Qwen-Image」のウォーターマークを追加するかどうかを指定します。デフォルト値は false です。ウォーターマーク:

1

seed integer (任意)

乱数シード。値は [0, 2147483647] の範囲の整数である必要があります。

同じ seed パラメーター値を使用すると、生成されるコンテンツの一貫性を確保するのに役立ちます。このパラメーターを指定しない場合、アルゴリズムは乱数シードを使用します。

注意:モデルの生成プロセスは確率的です。同じ seed を使用しても、リクエストごとに結果が同一であることは保証されません。

レスポンスパラメーター

タスクの正常な実行

タスクステータスや画像 URL などのタスクデータは 24 時間のみ保持され、この期間が過ぎると自動的に消去されます。生成された画像は速やかに保存する必要があります。

{
    "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"
}

タスクの異常な実行

タスクが失敗した場合、レスポンスに関連情報が返されます。`code` と `message` フィールドから失敗の原因を特定できます。エラーの解決方法の詳細については、「エラーコード」をご参照ください。

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

output object

モデルによって生成された結果。

プロパティ

choices array

生成された結果のリスト。

プロパティ

finish_reason string

生成タスクが停止した理由。値が stop の場合、タスクが自然に停止したことを示します。

message object

モデルから返されたメッセージ。

プロパティ

role string

メッセージ送信者のロール。値は assistant です。

content array

メッセージのコンテンツ。生成された画像に関する情報が含まれます。

プロパティ

image string

生成された画像の URL。リンクは 24 時間有効です。画像を速やかにダウンロードして保存してください。

生成された画像は PNG 形式です。入力画像と同じアスペクト比を維持し、解像度は約 1024*1024 ピクセルです。

usage object

このリクエストのリソース使用量。このパラメーターは、リクエストが成功した場合にのみ返されます。

プロパティ

image_count integer

生成された画像の数は、選択された出力画像の数と等しくなります。

width integer

生成された画像の幅 (ピクセル単位)。

height integer

生成された画像の高さ (ピクセル単位)。

request_id string

一意のリクエスト ID。この ID を使用して問題を追跡し、トラブルシューティングできます。

code string

失敗したリクエストのエラーコード。リクエストが成功した場合、このパラメーターは返されません。詳細については、「エラーメッセージ」をご参照ください。

message string

失敗したリクエストの詳細情報。リクエストが成功した場合、このパラメーターは返されません。詳細については、「エラーメッセージ」をご参照ください。

DashScope SDK

SDK のパラメーター名は、ほとんどが HTTP API と一致しています。パラメーターの構造は、各プログラミング言語に合わせて調整されています。パラメーターの完全なリストについては、「Qwen API リファレンス」をご参照ください。

Python SDK

説明
  • DashScope Python SDK の最新バージョンをインストールしてください。そうしないと、実行時エラーが発生する可能性があります:「SDK のインストールまたはアップグレード」。

  • 非同期 API はサポートされていません。

リクエスト例

この例では、qwen-image-edit-plus モデルを使用して 2 枚の画像を生成する方法を示します。

パブリック URL を使用して画像を渡す

import json
import os
import dashscope
from dashscope import MultiModalConversation

# 以下はシンガポールリージョンの URL です。北京リージョンのモデルを使用する場合は、URL を https://dashscope.aliyuncs.com/api/v1 に置き換えてください。
dashscope.base_http_api_url = 'https://dashscope-intl.aliyuncs.com/api/v1'

# モデルは 1〜3 枚の入力画像をサポートします。
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."}
        ]
    }
]

# シンガポールリージョンと北京リージョンの API キーは異なります。API キーの取得:https://www.alibabacloud.com/help/model-studio/get-api-key
# 環境変数を設定していない場合は、次の行を実際の Model Studio API キーに置き換えてください:api_key="sk-xxx"
api_key = os.getenv("DASHSCOPE_API_KEY")


# qwen-image-edit-plus は 1〜6 枚の画像出力をサポートします。この例では 2 枚の画像を出力する方法を示します。
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,
    # size パラメーターは、出力画像数 n が 1 の場合にのみサポートされます。それ以外の場合はエラーが報告されます。
    # size="1024*2048",
)

if response.status_code == 200:
    # 完全なレスポンスを表示するには、次の行のコメントを解除してください。
    # 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/model-studio/error-code")

Base64 エンコーディングを使用して画像を渡す

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

# 以下はシンガポールリージョンの URL です。北京リージョンのモデルを使用する場合は、URL を https://dashscope.aliyuncs.com/api/v1 に置き換えてください。
dashscope.base_http_api_url = 'https://dashscope-intl.aliyuncs.com/api/v1'


# --- Base64 エンコーディング用 ---
# フォーマット: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)}")


# 画像の Base64 エンコーディングを取得します。
# エンコーディング関数を呼び出します。「/path/to/your/image.png」をローカル画像ファイルのパスに置き換えてください。そうしないと、コードは実行されません。
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."}
        ]
    }
]

# シンガポールリージョンと北京リージョンの API キーは異なります。API キーの取得:https://www.alibabacloud.com/help/model-studio/get-api-key
# 環境変数を設定していない場合は、次の行を実際の Model Studio API キーに置き換えてください:api_key="sk-xxx"
api_key = os.getenv("DASHSCOPE_API_KEY")



# qwen-image-edit-plus は 1〜6 枚の画像出力をサポートします。この例では 2 枚の画像を出力する方法を示します。
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,
    # size パラメーターは、出力画像数 n が 1 の場合にのみサポートされます。それ以外の場合はエラーが報告されます。
    # size="2048*1024",
)

if response.status_code == 200:
    # 完全なレスポンスを表示するには、次の行のコメントを解除してください。
    # 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/model-studio/error-code")

URL から画像をダウンロードする

# 画像をダウンロードするには requests をインストールする必要があります:pip install requests
import requests


def download_image(image_url, save_path='output.png'):
    try:
        response = requests.get(image_url, stream=True, timeout=300)  # タイムアウトを設定
        response.raise_for_status()  # HTTP ステータスコードが 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')

レスポンス例

画像リンクは 24 時間有効です。速やかに画像をダウンロードしてください。

input_tokensoutput_tokens は互換性のためのフィールドです。現在の値は 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
    }
}

Java SDK

説明

DashScope Java SDK の最新バージョンをインストールしてください。そうしないと、実行時エラーが発生する可能性があります:「SDK のインストールまたはアップグレード」。

リクエスト例

次の例では、qwen-image-edit-plus モデルを使用して 2 枚の画像を生成する方法を示します。

パブリック URL を使用して画像を渡す

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 はシンガポールリージョン用です。北京リージョンのモデルを使用する場合は、URL を https://dashscope.aliyuncs.com/api/v1 に置き換えてください。
        Constants.baseHttpApiUrl = "https://dashscope-intl.aliyuncs.com/api/v1";
    }
    
    // シンガポールリージョンと北京リージョンの API キーは異なります。API キーを取得するには、https://www.alibabacloud.com/help/model-studio/get-api-key をご覧ください。
    // 環境変数を設定していない場合は、次の行を実際の Model Studio API キーに置き換えてください:apiKey="sk-xxx"
    static String apiKey = System.getenv("DASHSCOPE_API_KEY");

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

        MultiModalConversation conv = new MultiModalConversation();

        // モデルは 1〜3 枚の入力画像をサポートします。
        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 は 1〜6 枚の画像出力をサポートします。この例では 2 枚の画像を出力する方法を示します。
        Map<String, Object> parameters = new HashMap<>();
        parameters.put("watermark", false);
        parameters.put("negative_prompt", " ");
        parameters.put("n", 2);
        parameters.put("prompt_extend", true);
        // size パラメーターは、出力画像数 n が 1 の場合にのみサポートされます。それ以外の場合はエラーが報告されます。
        // 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);
        // 完全なレスポンスを表示するには、次の行のコメントを解除してください。
        // 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());
        }
    }
}

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 はシンガポールリージョン用です。北京リージョンのモデルを使用する場合は、URL を https://dashscope.aliyuncs.com/api/v1 に置き換えてください。
        Constants.baseHttpApiUrl = "https://dashscope-intl.aliyuncs.com/api/v1";
    }
    
    // シンガポールリージョンと北京リージョンの API キーは異なります。API キーを取得するには、https://www.alibabacloud.com/help/model-studio/get-api-key をご覧ください。
    // 環境変数を設定していない場合は、次の行を実際の Model Studio API キーに置き換えてください:apiKey="sk-xxx"
    static String apiKey = System.getenv("DASHSCOPE_API_KEY");

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

        // 「/path/to/your/image.png」をローカル画像ファイルのパスに置き換えてください。そうしないと、コードは実行されません。
        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 は 1〜6 枚の画像出力をサポートします。この例では 2 枚の画像を出力する方法を示します。
        Map<String, Object> parameters = new HashMap<>();
        parameters.put("watermark", false);
        parameters.put("negative_prompt", " ");
        parameters.put("n", 2);
        parameters.put("prompt_extend", true);
        // size パラメーターは、出力画像数 n が 1 の場合にのみサポートされます。それ以外の場合はエラーが報告されます。
        // 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);
        // 完全なレスポンスを表示するには、次の行のコメントを解除してください。
        // 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++;
            }
        }
    }

    /**
     * ファイルを Base64 文字列にエンコードします。
     * @param filePath ファイルパス。
     * @return data:{mime_type};base64,{base64_data} 形式の Base64 文字列。
     */
    public static String encodeFile(String filePath) {
        Path path = Paths.get(filePath);
        if (!Files.exists(path)) {
            throw new IllegalArgumentException("File does not exist: " + filePath);
        }
        // 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.");
        }
        // ファイルの内容を読み取り、エンコードします。
        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());
        }
    }
}

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);
    }
}

レスポンス例

画像リンクは 24 時間有効です。速やかに画像をダウンロードしてください。

{
    "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"
                        }
                    ]
                }
            }
        ]
    }
}

課金とレート制限

シンガポールリージョン

モデル

単価

レート制限 (Alibaba Cloud アカウントと RAM ユーザーで共有)

無料クォータ(表示)

1 秒あたりのリクエスト数 (RPS) の上限

同時タスク数

qwen-image-edit-plus

現在、qwen-image-edit-plus-2025-10-30 と同じ機能

$0.03/画像

2

同期 API の制限なし

100 枚

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

$0.03/画像

2

同期 API の制限なし

100 枚

qwen-image-edit

$0.045/画像

2

同期 API の制限なし

100 枚

北京リージョン

モデル

単価

レート制限 (Alibaba Cloud アカウントと RAM ユーザーで共有)

無料クォータ(表示)

1 秒あたりのリクエスト数 (RPS) の上限

同時タスク数

qwen-image-edit-plus

現在、qwen-image-edit-plus-2025-10-30 と同じ機能

$0.028671/画像

2

同期 API の制限なし

無料クォータなし

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

$0.028671/画像

2

同期 API の制限なし

qwen-image-edit

$0.043/画像

2

同期 API の制限なし

課金の説明:

  • 正常に生成された画像数に基づいて課金されます。1 回のリクエストで n 枚の画像が返された場合、そのリクエストの料金は n * 単価となります。

  • モデルの呼び出し失敗や処理エラーは、料金が発生したり、無料クォータを消費したりすることはありません。

  • 「無料クォータのみ」機能を有効にすると、無料クォータを使い切った後の追加料金を回避できます。詳細については、「新規ユーザー向けの無料クォータ」をご参照ください。

画像アクセス権限の設定

モデルによって生成された画像は Object Storage Service (OSS) に保存されます。各画像には、https://dashscope-result-xx.oss-cn-xxxx.aliyuncs.com/xxx.png のようなパブリックにアクセス可能な OSS リンクが割り当てられます。このリンクを使用して、画像を表示またはダウンロードできます。リンクは 24 時間のみ有効です。

ビジネス上のセキュリティ要件が高く、パブリックな 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.com

エラーコード

呼び出しが失敗した場合は、「エラーメッセージ」を参照してトラブルシューティングを行ってください。

よくある質問

Q: qwen-image-edit はマルチターン対話による編集に対応していますか?

A: いいえ、できません。 qwen-image-edit モデルは、シングルターン実行用に設計されています。各呼び出しは独立したステートレスな編集タスクであり、モデルは編集履歴を保存しません。連続した編集を行うには、前の編集の出力イメージを新しいリクエストの入力イメージとして使用できます。

Q:qwen-image と qwen-image-plus はどの言語をサポートしていますか?

A:公式には簡体字中国語と英語をサポートしています。他の言語も試すことはできますが、そのパフォーマンスは完全には検証されておらず、保証もされていません。

Q:アスペクト比の異なる複数の参照画像をアップロードした場合、どの画像が出力画像のアスペクト比を決定しますか?

A:出力画像は、最後にアップロードされた参照画像のアスペクト比と一致します。

Q:モデルの使用状況を確認するにはどうすればよいですか?

A:モデルの呼び出しデータは 1 時間の遅延後に利用可能になります。モデル観測 (シンガポールまたは北京) ページに移動して、呼び出し使用量、呼び出し回数、成功率などのメトリックを表示できます。詳細については、「モデル呼び出し記録の表示方法」をご参照ください。