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

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

最終更新日:Mar 04, 2026

Qwen の画像編集モデルは、複数の入力画像と出力画像をサポートします。画像内のテキストを正確に修正したり、オブジェクトを追加・削除したり、被写体のポーズを調整したり、画像スタイルを転送したり、画像のディテールを強化したりできます。

モデル概要

入力画像 1

入力画像 2

入力画像 3

出力画像(複数画像)

image99

image98

image89

image100

imageout2

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

モデル

説明

出力画像仕様

qwen-image-2.0-pro 推奨

現在、qwen-image-2.0-pro-2026-03-03 と同じ機能を提供しています。

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

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

画像解像度:

  • カスタム: 画素数の合計は 512×512 ~ 2048×2048 の範囲内である必要があります。

  • デフォルト: 入力画像(または複数画像リクエストの最後の画像)と同じです。

画像フォーマット: PNG

画像枚数: 1 ~ 6 枚

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

qwen-image-2.0 推奨

現在、qwen-image-2.0-2026-03-03 と同じ機能を提供しています。

Qwen 画像生成および画像編集モデルの高速化バージョンで、パフォーマンスと応答速度のバランスを最適化しています。

画像生成については、「Qwen-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 キーの取得」および「API キーを環境変数としてエクスポート」を行ってください。

SDK を使用して API を呼び出す場合は、「DashScope SDK のインストール」を行ってください。SDK は Python および Java 向けに提供されています。

重要

中国 (北京) リージョンおよびシンガポールリージョンでは、それぞれ専用の API キー および リクエストエンドポイント を使用します。これらを混在して使用しないでください。リージョン間でのクロス呼び出しを行うと、認証失敗またはサービスエラーが発生します。

HTTP

シンガポール: 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-2.0-pro モデルを使用して 2 枚の画像を生成する方法を示します。

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-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": "深度マップに一致する画像を生成します。以下の説明に従ってください:赤く錆びた自転車が泥道に駐車されており、背景には鬱蒼とした原生林が広がっています。"
                    }
                ]
            }
        ]
    },
    "parameters": {
        "n": 2,
        "negative_prompt": " ",
        "prompt_extend": true,
        "watermark": false,
        "size": "1536*1024"
    }
}'

複数画像融合

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

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-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": "画像 1 の女性が、画像 2 の黒いドレスを着用し、画像 3 のポーズで座るようにしてください。"
                    }
                ]
            }
        ]
    },
    "parameters": {
        "n": 2,
        "negative_prompt": " ",
        "prompt_extend": true,
        "watermark": false,
        "size": "1024*1536"
    }
}'
ヘッダー

Content-Type 文字列 (必須)

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

Authorization 文字列 (必須)

Model Studio API キーを使用した認証資格情報です。

例: Bearer sk-xxxx

リクエスト本文

model 文字列 (必須)

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

input オブジェクト (必須)

入力オブジェクトで、以下のフィールドを含みます。

プロパティ

messages 配列 (必須)

シングルターンの会話のみをサポートします。この配列には、正確に 1 つのメッセージオブジェクトを含める必要があります。このオブジェクトには role および content プロパティがあります。

プロパティ

role 文字列 (必須)

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

content 配列 (必須)

メッセージの内容です。1 ~ 3 枚の画像({"image": "..."} 形式)および 1 つのテキスト命令({"text": "..."} 形式)を含む配列です。

プロパティ

image 文字列 (必須)

入力画像で、URL または Base64 エンコード文字列で指定します。1 回のリクエストにつき、1 ~ 3 枚の画像を指定できます。

複数画像入力の場合、画像は配列内の位置(画像 1、画像 2、画像 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 文字列 (必須)

生成画像に含めたい要素および視覚的特徴を記述する、画像編集命令(ポジティブプロンプト)です。

このパラメーターは、最大 800 文字の中国語および英語をサポートします。中国語の 1 文字または英語の 1 文字は、それぞれ 1 文字としてカウントされます。上限を超えた内容は自動的に切り捨てられます。

例: 画像 1 の女性が、画像 2 の黒いドレスを着用し、画像 3 のポーズで座るようにしてください。衣装、ヘアスタイル、表情は変更せず、自然で滑らかな動作になるようにしてください。

注意: 1 つのテキスト入力のみがサポートされます。テキストが指定されていない場合、または複数のテキスト入力が指定されている場合、リクエストは失敗します。

parameters オブジェクト (任意)

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

プロパティ

n 整数 (任意)

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

qwen-image-2.0、qwen-image-edit-max、および qwen-image-edit-plus シリーズのモデルでは、1 ~ 6 枚の画像を生成できます。

qwen-image-edit の場合、1 枚の画像のみを生成できます。

negative_prompt 文字列 (任意)

生成画像に含めたくない内容を記述するネガティブプロンプトです。

このパラメーターは、最大 500 文字の中国語および英語をサポートします。中国語の 1 文字または英語の 1 文字は、それぞれ 1 文字としてカウントされます。上限を超えた内容は自動的に切り捨てられます。

例: 解像度が低い、エラー、最悪の品質、低品質、変形、余分な指、不自然な比率。

size 文字列 (任意)

出力画像の解像度を width*height 形式(例: "1024*1536")で指定します。

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

  • 画素数の合計は 512×512 ~ 2048×2048 の範囲内である必要があります。

  • デフォルトでは、解像度は入力画像(または複数画像リクエストの最後の画像)と同じです。

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 ブール値 (任意)

プロンプトの書き換え機能を有効にするかどうかを指定します。デフォルトでは有効(true)です。有効にすると、モデルはポジティブプロンプト(text)を最適化します。この機能は、プロンプトの詳細が不足している場合に、結果を大幅に向上させます。

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

watermark ブール値 (任意)

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

1

seed 整数 (任意)

乱数のシード値です。値は [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"
}

エラー時のレスポンス

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

{
    "request_id": "31f808fd-8eef-9004-xxxxx",
    "code": "InvalidApiKey",
    "message": "無効な API キーが指定されました。"
}

output オブジェクト

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

プロパティ

choices 配列

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

プロパティ

finish_reason 文字列

生成タスクが停止した理由です。stop の値は、タスクが正常に完了したことを示します。

message オブジェクト

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

プロパティ

role 文字列

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

content 配列

メッセージの内容で、生成された画像に関する情報を含みます。

プロパティ

image 文字列

生成された PNG 画像の URL です。このリンクは 24 時間後に有効期限切れになりますので、画像を速やかにダウンロードおよび保存してください。

usage オブジェクト

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

プロパティ

image_count 整数

生成された画像の枚数です。

width 整数

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

height 整数

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

request_id 文字列

リクエストの固有識別子です。トレースおよびトラブルシューティングに使用します。

code 文字列

エラーコードです。リクエストが失敗した場合にのみ返されます。「エラーコード」について詳しくは、こちらをご参照ください。

message 文字列

詳細なエラーメッセージです。リクエストが失敗した場合にのみ返されます。「エラーコード」について詳しくは、こちらをご参照ください。

DashScope SDK

SDK のパラメーター名は、HTTP API とほぼ一致します。パラメーターの完全な一覧については、「Qwen API リファレンス」をご参照ください。

Python SDK

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

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

リクエスト例

パブリック 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": "画像 1 の女性が、画像 2 の黒いドレスを着用し、画像 3 のポーズで座るようにしてください。"}
        ]
    }
]

# シンガポールおよび中国 (北京) リージョンでは、それぞれ専用の API キーを使用します。API キーの取得方法については、こちらをご参照ください: https://www.alibabacloud.com/help/en/model-studio/get-api-key
# 環境変数が設定されていない場合は、api_key="sk-xxx" として API キーを直接指定してください。
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/en/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("サポートされていない、または認識できない画像フォーマットです")

    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": "深度マップに一致する画像を生成します。以下の説明に従ってください:赤く錆びた自転車が泥道に駐車されており、背景には鬱蒼とした原生林が広がっています。"}
        ]
    }
]

# シンガポールおよび中国 (北京) リージョンでは、それぞれ専用の API キーを使用します。API キーの取得方法については、こちらをご参照ください: https://www.alibabacloud.com/help/en/model-studio/get-api-key
# 環境変数が設定されていない場合は、api_key="sk-xxx" として API キーを直接指定してください。
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/en/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')

レスポンス例

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

input_tokens および output_tokens は互換性フィールドであり、現在は固定値 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://dashscope.aliyuncs.com/api/v1 に置き換えてください。
        Constants.baseHttpApiUrl = "https://dashscope-intl.aliyuncs.com/api/v1";
    }
    
    // シンガポールおよび中国 (北京) リージョンでは、それぞれ専用の API キーを使用します。API キーの取得方法については、こちらをご参照ください: https://www.alibabacloud.com/help/en/model-studio/get-api-key
    // 環境変数が設定されていない場合は、次の行を 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", "画像 1 の女性が、画像 2 の黒いドレスを着用し、画像 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-2.0-pro")
                .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://dashscope.aliyuncs.com/api/v1 に置き換えてください。
        Constants.baseHttpApiUrl = "https://dashscope-intl.aliyuncs.com/api/v1";
    }
    
    // シンガポールおよび中国 (北京) リージョンでは、それぞれ専用の API キーを使用します。API キーの取得方法については、こちらをご参照ください: https://www.alibabacloud.com/help/en/model-studio/get-api-key
    // 環境変数が設定されていない場合は、次の行を 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", "深度マップに一致する画像を生成します。以下の説明に従ってください:赤く錆びた自転車が泥道に駐車されており、背景には鬱蒼とした原生林が広がっています。")
                )).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-2.0-pro")
                .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 MIME タイプおよび Base64 データを含む文字列: data:{mime_type};base64,{base64_data}
     */
    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);
    }
}

レスポンス例

画像リンクは 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"
                        }
                    ]
                }
            }
        ]
    }
}

エラーコード

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

課金およびレート制限

  • モデルの価格および無料クォータについては、「モデル一覧および価格」をご参照ください。

  • レート制限については、「レート制限」をご参照ください。

  • 課金の説明: 成功して生成された 画像の枚数に基づいて課金されます。失敗したモデル呼び出しや処理エラーは課金されず、無料クォータも消費されません。

よくある質問

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

A: 公式には簡体字中国語および 英語 をサポートしています。その他の言語でも動作する場合がありますが、結果は保証されません。

Q: モデル呼び出しのメトリックを確認するにはどうすればよいですか?

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

Q: 画像ストレージのドメイン名ホワイトリストを取得するにはどうすればよいですか?

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