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

Alibaba Cloud Model Studio:Qwen-Image Edit API リファレンス

最終更新日:Jun 26, 2026

Qwen-Image Edit は、複数画像の入出力をサポートしています。自然言語プロンプトを通じて、画像内のテキスト編集、オブジェクトの追加・削除・移動、被写体のポーズ変更、スタイルの転送、ディテールの強調など、あらゆる操作が可能です。

モデルの概要

入力画像 1

入力画像 2

入力画像 3

出力画像 (複数)

image99

image98

image89

image100

imageout2

プロンプト: 画像 1 の女の子が、画像 2 の黒いドレスを着て、画像 3 のポーズで座っています。

モデル名

モデルの説明

出力画像の仕様

qwen-image-2.0-pro 推奨

現在、qwen-image-2.0-pro-2026-04-22 と同じ機能を持ちます

Qwen 画像生成・編集モデルの Pro シリーズは、テキストレンダリング、リアルなテクスチャ、セマンティックな忠実度において強化された機能を提供します。

画像生成については、「Qwen-Text to Image」をご参照ください。

画像解像度:

  • カスタマイズ可能:総ピクセル数は 512*512 から 2048*2048 の間である必要があります。

  • デフォルト:総ピクセル数は 1024*1024 に近く、アスペクト比は入力画像 (または複数画像入力の最後の画像) と同様です。

画像フォーマット:png

画像数:1~6

qwen-image-2.0-pro-2026-06-22 推奨

qwen-image-2.0-pro-2026-04-22

qwen-image-2.0-pro-2026-03-03

qwen-image-2.0 推奨

現在、qwen-image-2.0-2026-03-03 と同じ機能を持ちます

これは Qwen 画像生成・編集モデルの高速化バージョンで、パフォーマンスと応答速度のバランスが取れています。

画像生成については、「Qwen-Text to Image」をご参照ください。

qwen-image-2.0-2026-03-03 推奨

qwen-image-edit-max

現在、qwen-image-edit-max-2026-01-16 と同じ機能を持ちます

Qwen 画像編集モデルの Max シリーズは、工業デザイン、幾何学的推論、キャラクターの一貫性においてより強力な機能を提供します。

画像解像度:

  • カスタマイズ可能:幅と高さはそれぞれ [512, 2048] ピクセルの範囲で指定できます。

  • デフォルト:総ピクセル数は 1024*1024 に近く、アスペクト比は入力画像 (または複数画像入力の最後の画像) と同様です。

画像フォーマット:png

画像数:1~6

qwen-image-edit-max-2026-01-16

qwen-image-edit-plus

現在、qwen-image-edit-plus-2025-10-30 と同じ機能を持ちます

Qwen 画像編集モデルの Plus シリーズは、複数画像の出力とカスタム解像度をサポートしています。

qwen-image-edit-plus-2025-12-15

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

qwen-image-edit

このモデルは、単一画像の編集と複数画像の融合をサポートしています。

画像解像度:カスタマイズ不可。生成ルールは上記のデフォルトルールと同じです。

画像フォーマット:png

画像数:1 に固定

説明

API を呼び出す前に、「モデルリスト」で各リージョンでサポートされているモデルを確認してください。

前提条件

呼び出しを行う前に、API キーを取得し、API キーを環境変数としてエクスポートしてください。

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

重要

中国 (北京) とシンガポールのリージョンでは、API キーリクエストエンドポイントがそれぞれ異なります。これらを相互に使用することはできません。リージョンをまたいだ呼び出しは、認証の失敗やサービスエラーにつながります。

HTTP 呼び出し

シンガポールリージョン:POST https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation

北京リージョン:POST https://{WorkspaceId}.cn-beijing.maas.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation

呼び出す際は、WorkspaceId を実際のワークスペース ID に置き換えてください。

リクエストパラメーター

単一画像の編集

この例では、qwen-image-2.0-pro モデルを使用して 2 つの画像を出力します。

curl --location 'https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation' \
    --header 'Content-Type: application/json' \
    --header "Authorization: Bearer $DASHSCOPE_API_KEY" \
    --data '{
        "model": "qwen-image-2.0-pro",
        "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 red, dilapidated 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,
            "size": "1536*1024"
        }
    }'

複数画像の融合

この例では、qwen-image-2.0-pro モデルを使用して 2 つの画像を出力します。

curl --location 'https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation' \
    --header 'Content-Type: application/json' \
    --header "Authorization: Bearer $DASHSCOPE_API_KEY" \
    --data '{
        "model": "qwen-image-2.0-pro",
        "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 from Image 1 is wearing the black dress from Image 2 and sitting in the pose from Image 3."
                        }
                    ]
                }
            ]
        },
        "parameters": {
            "n": 2,
            "negative_prompt": " ",
            "prompt_extend": true,
            "watermark": false,
            "size": "1024*1536"
        }
    }'
リクエストヘッダー

Content-Type string (必須)

リクエストのコンテンツタイプ。application/json である必要があります。

Authorization string (必須)

Model Studio API キーでリクエストを認証します。例:Bearer sk-xxxx。

リクエストボディ

model string (必須)

モデル名。例:qwen-image-2.0-pro。

input object (必須)

入力オブジェクト。次のフィールドを含みます:

プロパティ

messages array (必須)

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

プロパティ

role string (必須)

メッセージ送信者のロール。user である必要があります。

content array (必須)

メッセージ本文は、{"image": "..."} フォーマットの 1〜3 個のイメージと、{"text": "..."} フォーマットの単一の編集命令で構成されます。

プロパティ

image string (必須)

入力画像の URL または Base64 エンコードされたデータ。1~3枚の画像を提供できます。

複数画像入力の場合、画像の順序は配列のシーケンスによって定義されます。出力画像のアスペクト比は、最後の画像に基づきます。

画像要件:

  • 画像フォーマット:JPG、JPEG、PNG、BMP、TIFF、WEBP、または GIF。

    出力画像は PNG フォーマットです。アニメーション GIF の場合、最初のフレームのみが処理されます。
  • 画像解像度:最良の結果を得るには、画像の幅と高さの両方が 384~3072 ピクセルの間である必要があります。低解像度は出力がぼやける原因となり、高解像度は処理時間を増加させます。

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

サポートされている入力フォーマット

  1. パブリック URL:

    • HTTP および HTTPS プロトコルをサポートします。

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

  2. Base64 エンコードされた画像文字列

text string (必須)

出力画像の望ましいコンテンツ、スタイル、構成を記述するポジティブプロンプト。

中国語と英語に対応しています。qwen-image-2.0 シリーズは最大 1,300 トークンを受け付けます。その他のモデルは最大 800 トークンを受け付けます。システムは超過したトークンを切り捨てます。

: content 配列には、text オブジェクトを正確に 1 つ含める必要があります。そうでない場合、エラーが発生します。

parameters object (任意)

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

プロパティ

n integer (任意)

出力画像の数。デフォルト:1。

qwen-image-2.0、qwen-image-edit-max、または qwen-image-edit-plus シリーズのモデルでは、1~6枚の画像を出力することを選択できます。

qwen-image-edit では、1 つのイメージのみ出力できます。

negative_prompt string (任意)

出力から除外するコンテンツを記述するネガティブプロンプト。生成を制約するために使用します。

中国語と英語をサポートしています。最大 500 文字。各漢字、英字、数字、または記号は 1 文字としてカウントされます。超過した文字は自動的に切り捨てられます。

例:低解像度、エラー、最低品質、低品質、変形、指の追加、または悪いプロポーション。

size string (任意)

width*height フォーマットの出力イメージ解像度。例: "1024*1536"

qwen-image-2.0 シリーズモデル

  • 総ピクセル数は 512*512 から 2048*2048 の間である必要があります。

  • デフォルトでは、総ピクセル数は 1024*1024 に近く、アスペクト比は入力画像 (または複数画像入力の最後の画像) と同様です。

qwen-image-edit-max または qwen-image-edit-plus シリーズモデル

  • 幅と高さはそれぞれ [512, 2048] ピクセルの範囲で指定できます。

  • デフォルトでは、総ピクセル数は 1024*1024 に近く、アスペクト比は入力画像 (または複数画像入力の最後の画像) と同様です。

size パラメーターを指定した場合、システムは size で指定された幅と高さをターゲットとして使用し、実際の出力イメージのディメンションを 16 の最も近い倍数に調整します。たとえば、1033*1032 を指定した場合、出力イメージサイズは 1040*1024 になります。

一般的なアスペクト比の推奨解像度

  • 1:1: 1024*1024、または 1536*1536

  • 2:3: 768*1152、または 1024*1536

  • 3:2: 1152*768、または 1536*1024

  • 3:4: 960*1280、または 1080*1440

  • 4:3: 1280*960、または 1440*1080

  • 9:16: 720*1280、または 1080*1920

  • 16:9: 1280*720、または 1920*1080

  • 21:9: 1344*576、または 2048*872

対応モデルqwen-image-editを除くすべてのモデル。

prompt_extend bool (任意)

インテリジェントなプロンプトリライトを有効にします。デフォルト: true。有効にすると、モデルは肯定的なプロンプト(text)を最適化し、単純なプロンプトの結果を大幅に向上させます。

対応モデル: qwen-image-edit を除くすべてのモデル。

watermark bool (任意)

"Qwen-Image" ウォーターマークを右下隅に追加します。デフォルト: false

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": 1536,
            "image_count": 2,
            "height": 1024
        },
        "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

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

usage object

この呼び出しのリソース使用量。成功した場合にのみ返されます。

プロパティ

image_count integer

生成された画像の数。

width integer

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

height integer

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

request_id string

トレースとトラブルシューティングのためのユニークなリクエスト識別子。

code string

エラーコード。失敗したリクエストに対してのみ返されます。「エラーコード」をご参照ください。

message string

詳細なエラーメッセージ。失敗したリクエストに対してのみ返されます。「エラーコード」をご参照ください。

DashScope SDK の呼び出し

SDK のパラメーター名は、ほとんどが HTTP API と一致しています。パラメーター構造は、言語の特性に基づいてカプセル化されています。パラメーターの完全なリストについては、「Qwen API リファレンス」をご参照ください。

Python SDK の呼び出し

説明
  • 潜在的な実行時エラーを避けるため、最新バージョンの DashScope Python SDK をインストールすることを推奨します。詳細については、「SDK のインストールまたはアップグレード」をご参照ください。

  • 非同期インターフェイスはサポートされていません。

リクエスト例

パブリック URL を使用した画像の受け渡し

import json
import os
import dashscope
from dashscope import MultiModalConversation

# 以下はシンガポールリージョンの URL です。北京リージョンのモデルを使用する場合は、URL を https://{WorkspaceId}.cn-beijing.maas.aliyuncs.com/api/v1 に置き換えてください。
dashscope.base_http_api_url = 'https://{WorkspaceId}.ap-southeast-1.maas.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": "The girl from Image 1 is wearing the black dress from Image 2 and sitting in the pose from Image 3."}
        ]
    }
]

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

# qwen-image-2.0、qwen-image-edit-max、および qwen-image-edit-plus シリーズは、1~6枚の出力画像をサポートします。この例では2枚生成します。
response = MultiModalConversation.call(
    api_key=api_key,
    model="qwen-image-2.0-pro",
    messages=messages,
    stream=False,
    n=2,
    watermark=False,
    negative_prompt=" ",
    prompt_extend=True,
    size="1024*1536",
)

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"出力画像 {i+1} の URL: {content['image']}")
else:
    print(f"HTTP ステータスコード: {response.status_code}")
    print(f"エラーコード: {response.code}")
    print(f"エラーメッセージ: {response.message}")
    print("詳細については、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://{WorkspaceId}.cn-beijing.maas.aliyuncs.com/api/v1 に置き換えてください。
dashscope.base_http_api_url = 'https://{WorkspaceId}.ap-southeast-1.maas.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("サポートされていない、または認識されない画像フォーマットです")

    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"ファイルの読み取りエラー: {file_path}, エラー: {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 red, dilapidated 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 をご参照ください。
# 環境変数を設定していない場合は、次の行を api_key="sk-xxx" に置き換えてください。
api_key = os.getenv("DASHSCOPE_API_KEY")

# qwen-image-2.0、qwen-image-edit-max、および qwen-image-edit-plus シリーズは、1~6枚の出力画像をサポートします。この例では2枚生成します。
response = MultiModalConversation.call(
    api_key=api_key,
    model="qwen-image-2.0-pro",
    messages=messages,
    stream=False,
    n=2,
    watermark=False,
    negative_prompt=" ",
    prompt_extend=True,
    size="1536*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"出力画像 {i+1} の URL: {content['image']}")
else:
    print(f"HTTP ステータスコード: {response.status_code}")
    print(f"エラーコード: {response.code}")
    print(f"エラーメッセージ: {response.message}")
    print("詳細については、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"画像が正常にダウンロードされました: {save_path}")

    except requests.exceptions.RequestException as e:
        print(f"画像のダウンロードに失敗しました: {e}")

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

レスポンス例

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

input_tokensoutput_tokens、および characters フィールドには互換性があります。これらの値は現在 0 に固定されています。
{
    "status_code": 200,
    "request_id": "fa41f9f9-3cb6-434d-a95d-4ae6b9xxxxxx",
    "code": "",
    "message": "",
    "output": {
        "text": null,
        "finish_reason": null,
        "choices": [
            {
                "finish_reason": "stop",
                "message": {
                    "role": "assistant",
                    "content": [
                        {
                            "image": "https://dashscope-result-hz.oss-cn-hangzhou.aliyuncs.com/xxx.png?Expires=xxx"
                        },
                        {
                            "image": "https://dashscope-result-hz.oss-cn-hangzhou.aliyuncs.com/xxx.png?Expires=xxx"
                        }
                    ]
                }
            }
        ],
        "audio": null
    },
    "usage": {
        "input_tokens": 0,
        "output_tokens": 0,
        "characters": 0,
        "height": 1536,
        "image_count": 2,
        "width": 1024
    }
}

Java SDK を使用した呼び出し

説明

実行時エラーを避けるため、最新の DashScope Java SDK をインストールしてください。「SDK のインストールまたはアップグレード」をご参照ください。

リクエスト例

パブリック 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://{WorkspaceId}.cn-beijing.maas.aliyuncs.com/api/v1 に置き換えてください。
        Constants.baseHttpApiUrl = "https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1";
    }
    
    // シンガポールと北京リージョンの API キーは異なります。API キーを取得するには、https://www.alibabacloud.com/help/model-studio/get-api-key をご参照ください。
    // 環境変数を設定していない場合は、次の行を DashScope 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 from Image 1 is wearing the black dress from Image 2 and sitting in the pose from Image 3.")
                )).build();
        // qwen-image-2.0、qwen-image-edit-max、および 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);
        parameters.put("size", "1024*1536");

        MultiModalConversationParam param = MultiModalConversationParam.builder()
                .apiKey(apiKey)
                .model("qwen-image-edit-max")
                .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("出力画像 " + imageIndex + " の URL: " + 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://{WorkspaceId}.cn-beijing.maas.aliyuncs.com/api/v1 に置き換えてください。
        Constants.baseHttpApiUrl = "https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1";
    }
    
    // シンガポールと北京リージョンの API キーは異なります。API キーを取得するには、https://www.alibabacloud.com/help/model-studio/get-api-key をご参照ください。
    // 環境変数を設定していない場合は、次の行を DashScope 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, following this description: A dilapidated red bicycle is parked on a muddy path, with a dense primeval forest in the background.")
                )).build();
        // qwen-image-2.0、qwen-image-edit-max、および 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);
        parameters.put("size", "1536*1024");

        MultiModalConversationParam param = MultiModalConversationParam.builder()
                .apiKey(apiKey)
                .model("qwen-image-edit-max")
                .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("出力画像 " + imageIndex + " の URL: " + 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("ファイルが存在しません: " + filePath);
        }
        // MIME タイプを検出します。
        String mimeType = null;
        try {
            mimeType = Files.probeContentType(path);
        } catch (IOException e) {
            throw new IllegalArgumentException("ファイルタイプを検出できません: " + filePath);
        }
        if (mimeType == null || !mimeType.startsWith("image/")) {
            throw new IllegalArgumentException("サポートされていない、または認識されない画像フォーマットです。");
        }
        // ファイルの内容を読み取り、エンコードします。
        byte[] fileBytes = null;
        try{
            fileBytes = Files.readAllBytes(path);
        } catch (IOException e) {
            throw new IllegalArgumentException("ファイルの内容を読み取れません: " + 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("画像が正常にダウンロードされました: " + savePath);
        } catch (Exception e) {
            System.err.println("画像のダウンロードに失敗しました: " + 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);
    }
}

レスポンス例

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

{
    "requestId": "46281da9-9e02-941c-ac78-be88b8xxxxxx",
    "usage": {
        "image_count": 2,
        "width": 1024,
        "height": 1536
    },
    "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"
                        }
                    ]
                }
            }
        ]
    }
}

エラーコード

モデルの呼び出しが失敗し、エラーメッセージが返された場合は、「エラーコード」で解決策をご参照ください。

課金とレート制限

  • モデルの無料クォータと課金レートについては、「 モデルリスト」をご参照ください。

  • モデルのレート制限の詳細については、「Qwen-Image」をご参照ください。

  • 課金:正常に生成された画像ごとに課金されます。失敗した呼び出しは課金されず、新規ユーザー無料クォータも消費されません。

よくある質問

Q:Qwen 画像編集モデルはどの言語をサポートしていますか?

A:現在、モデルは簡体字中国語と英語をサポートしています。他の言語も試すことはできますが、パフォーマンスは保証されません。

Q:モデルの呼び出しメトリックはどのように表示しますか?

A:モデルの呼び出しが完了してから 1 時間後、モデルモニタリング (シンガポール) または モデルモニタリング (中国 (北京)) ページに移動して、呼び出し回数や成功率などのメトリックを表示します。詳細については、「課金とコスト管理」をご参照ください。

Q:画像ストレージのドメイン名ホワイトリストはどのように取得しますか?

A:モデルによって生成された画像は OSS に保存されます。API は一時的なパブリック URL を返します。このダウンロード URL のファイアウォールホワイトリストを設定するには、次の点にご注意ください:基盤となるストレージは動的に変更される可能性があります。このトピックでは、古い情報によるアクセス問題を避けるため、固定の OSS ドメイン名ホワイトリストは提供していません。セキュリティ制御の要件がある場合は、アカウントマネージャーに連絡して最新の OSS ドメイン名リストを取得してください。