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

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

最終更新日:Feb 10, 2026

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

モデル概要

入力画像 1

入力画像 2

入力画像 3

出力画像(複数画像)

image99

image98

image89

image100

imageout2

入力プロンプト: Image 1 の人物に Image 2 の黒いドレスを着せ、Image 3 のポーズで座らせる。

モデル

説明

出力画像仕様

qwen-image-edit-max

現在、qwen-image-edit-max-2026-01-16 と同じ機能を提供しています。

単一画像編集および複数画像融合をサポートします。

  • 1 回のリクエストで 1~6 枚の画像を生成できます。

  • カスタム解像度をサポートします。

  • 高度な プロンプト再構成をサポートします。

フォーマット: PNG
解像度:

  • カスタム: <a baseurl="t3060530_v4_0_0.xdita" data-node="6000169" data-root="85177" data-tag="xref" href="#0e360df4915xx" id="35a61f0a49zg9">parameters.size</a> パラメーターを使用して、出力イメージの width*height をピクセル単位で指定します。

  • デフォルト(未指定の場合): 出力解像度は約 1024*1024 ピクセルで、入力画像(または複数画像リクエストの最後の画像)の縦横比を維持します。

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

qwen-image-edit-plus

現在、qwen-image-edit-plus-2025-10-30 と同じ機能を提供しています。

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

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

qwen-image-edit

単一画像編集および複数画像融合をサポートします。

  • 1 回のリクエストで 1 枚の画像を生成できます。

  • カスタム解像度はサポートしていません。

形式: PNG。

解像度: カスタマイズ不可。出力解像度は、上記で説明したデフォルト 動作に従います。

説明

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-edit-max モデルを使用して 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-edit-max",
    "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-edit-max モデルを使用して 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-edit-max",
    "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": "Image 1 の人物に Image 2 の黒いドレスを着せ、Image 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-edit-max

input オブジェクト (必須)

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

プロパティ

messages 配列 (必須)

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

プロパティ

role 文字列 (必須)

メッセージ送信者の役割。値は必ず user である必要があります。

content 配列 (必須)

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

プロパティ

image 文字列 (必須)

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

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

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

複数画像を使用する場合、プロンプト内で「Image 1」「Image 2」「Image 3」として画像を参照することで、モデルが指示を正しくマッピングできます。

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

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

parameters オブジェクト (任意)

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

プロパティ

n 整数 (任意)

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

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")で指定します。幅および高さの値は [512, 2048] ピクセルの範囲内である必要があります。

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

  • 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

出力画像サイズのルール

  • size を設定した場合: システムは、指定された size に基づいて、最も近い 16 の倍数の幅および高さに、出力画像をリサイズします。たとえば、1033*1032 を設定した場合、出力画像サイズは 1040*1024 になります。

  • このパラメーターを設定しない場合、出力画像は入力画像または複数画像入力の最後の画像の縦横比を維持し、解像度は 1024*1024 に近くなります。

対応モデル: qwen-image-edit-max および qwen-image-edit-plus シリーズのモデル。

prompt_extend ブール値 (任意)

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

対応モデル: qwen-image-edit-max および qwen-image-edit-plus シリーズのモデル。

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 はサポートしていません。

リクエストの例

この例では、qwen-image-edit-max モデルを使用して 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": "Image 1 の人物に Image 2 の黒いドレスを着せ、Image 3 のポーズで座らせる。"}
        ]
    }
]

# シンガポールおよび中国 (北京) リージョンでは、それぞれ専用の API キーを使用します。API キーの取得先: https://www.alibabacloud.com/help/en/model-studio/get-api-key
# 環境変数が設定されていない場合は、api_key="sk-xxx" に置き換えてください。
api_key = os.getenv("DASHSCOPE_API_KEY")

# qwen-image-edit-max および qwen-image-edit-plus シリーズは、1~6 枚の画像を出力できます。この例では 2 枚の画像を出力する方法を示します。
response = MultiModalConversation.call(
    api_key=api_key,
    model="qwen-image-edit-max",
    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_key = os.getenv("DASHSCOPE_API_KEY")

# qwen-image-edit-max および qwen-image-edit-plus シリーズは、1~6 枚の画像を出力できます。この例では 2 枚の画像を出力する方法を示します。
response = MultiModalConversation.call(
    api_key=api_key,
    model="qwen-image-edit-max",
    messages=messages,
    stream=False,
    n=2,
    watermark=False,
    negative_prompt=" ",
    prompt_extend=True,
    size="1920*1080",
)

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 のインストールまたはアップグレード」をご参照ください。

リクエストの例

以下の例では、qwen-image-edit-max モデルを使用して 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/en/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", "Image 1 の人物に Image 2 の黒いドレスを着せ、Image 3 のポーズで座らせる。")
                )).build();
        // 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://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。
    // 環境変数が設定されていない場合は、次の行を 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", "深度マップに一致する画像を生成します。以下の説明に従ってください: 泥だらけの道に赤い自転車が放置されており、背景には鬱蒼とした原生林があります。")
                )).build();
        // 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 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"
                        }
                    ]
                }
            }
        ]
    }
}

画像アクセス権限の設定

モデルによって生成された画像は、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 の画像編集モデルはどの言語をサポートしていますか?

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

Q: 異なるアスペクト比を持つ複数の参照画像をアップロードする場合、出力画像のアスペクト比はどのように決定されますか?

A: デフォルトでは、出力画像のアスペクト比は入力配列の最後の画像と一致します。この動作は、parameters.size パラメーターを指定することで上書きできます。

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

A: 詳細については、「課金照会およびコスト管理」をご参照ください。