Qwen-Image Edit は、複数画像の入出力をサポートしています。自然言語プロンプトを通じて、画像内のテキスト編集、オブジェクトの追加・削除・移動、被写体のポーズ変更、スタイルの転送、ディテールの強調など、あらゆる操作が可能です。
モデルの概要
|
入力画像 1 |
入力画像 2 |
入力画像 3 |
出力画像 (複数) |
|
|
|
|
|
|
|
プロンプト: 画像 1 の女の子が、画像 2 の黒いドレスを着て、画像 3 のポーズで座っています。
|
モデル名 |
モデルの説明 |
出力画像の仕様 |
|
qwen-image-2.0-pro 現在、qwen-image-2.0-pro-2026-04-22 と同じ機能を持ちます |
Qwen 画像生成・編集モデルの Pro シリーズは、テキストレンダリング、リアルなテクスチャ、セマンティックな忠実度において強化された機能を提供します。 画像生成については、「Qwen-Text to Image」をご参照ください。 |
画像解像度:
画像フォーマット: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 シリーズは、工業デザイン、幾何学的推論、キャラクターの一貫性においてより強力な機能を提供します。 |
画像解像度:
画像フォーマット: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 に置き換えてください。
リクエストパラメーター |
単一画像の編集この例では、
複数画像の融合この例では、
|
リクエストヘッダー |
|
|
Content-Type リクエストのコンテンツタイプ。 |
|
|
Authorization Model Studio API キーでリクエストを認証します。例:Bearer sk-xxxx。 |
|
リクエストボディ |
|
|
model モデル名。例:qwen-image-2.0-pro。 |
|
|
input 入力オブジェクト。次のフィールドを含みます: |
|
|
parameters 画像生成を制御するための追加パラメーター。 |
レスポンスパラメーター |
タスク成功タスクデータ (タスクステータスと画像 URL) は 24 時間のみ保持され、その後自動的に消去されます。生成された画像は速やかに保存してください。
タスクエラー何らかの理由でタスクが失敗した場合、関連情報が返されます。`code` および `message` フィールドを使用してエラーの原因を特定できます。詳細については、「エラーコード」をご参照ください。
|
|
output モデルの生成結果。 |
|
|
usage この呼び出しのリソース使用量。成功した場合にのみ返されます。 |
|
|
request_id トレースとトラブルシューティングのためのユニークなリクエスト識別子。 |
|
|
code エラーコード。失敗したリクエストに対してのみ返されます。「エラーコード」をご参照ください。 |
|
|
message 詳細なエラーメッセージ。失敗したリクエストに対してのみ返されます。「エラーコード」をご参照ください。 |
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_tokens、output_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 ドメイン名リストを取得してください。




