OpenAI nano-banana-2 多图融合 API 文档
请求地址
https://www.dmxapi.cn/v1/images/edits模型名称
nano-banana-2
Python 代码示例
python
"""
╔═══════════════════════════════════════════════════════════════════════════════════╗
║ ║
║ 🎨 DMXAPI 多图融合工具 ║
║ ║
╠═══════════════════════════════════════════════════════════════════════════════════╣
║ ║
║ ★ 核心功能: 多图融合 (Multi-Image Fusion) ║
║ ══════════════════════════════════════════ ║
║ ║ ║
║ ║
║ ┌─────────────────────────────────────────────────────────────────────────┐ ║
║ │ 📷 图片A ─┐ │ ║
║ │ │ │ ║
║ │ 📷 图片B ─┼──► 🤖 AI 智能融合 ──► 🖼️ 全新合成图片 │ ║
║ │ │ + 提示词引导 │ ║
║ │ 📷 图片C ─┘ │ ║
║ └─────────────────────────────────────────────────────────────────────────┘ ║
║ ║
║ ★ 多图融合应用场景 ║
║ ────────────────── ║
║ • 风格迁移: 将 A 图的风格应用到 B 图的内容上 ║
║ • 元素合成: 从多张图片中提取元素,组合成新场景 ║
║ • 角色融合: 将不同图片中的角色融合到同一画面 ║
║ • 场景重构: 结合多张参考图,创建全新的场景 ║
║ • 创意混搭: 将不同风格、主题的图片创意融合 ║
║ ║
║ ★ 技术规格 ║
║ ────────── ║
║ • 模型: nano-banana-2 ║
║ • 最大图片: 14 张 (支持 1-14 张任意数量) ║
║ • 单图上限: 50MB ║
║ • 图片格式: PNG / JPG / WEBP ║
║ • 输出分辨率: 1K / 2K / 4K 可选 ║
║ • 接口地址: https://www.dmxapi.cn/v1/images/edits ║
║ ║
╚═══════════════════════════════════════════════════════════════════════════════════╝
"""
# ══════════════════════════════════════════════════════════════════════════════
# 依赖导入
# ══════════════════════════════════════════════════════════════════════════════
import requests # HTTP 请求库,用于调用 API 接口
import base64 # Base64 编解码,用于处理图片数据
from datetime import datetime # 日期时间处理,用于生成文件名
import os # 操作系统接口,用于文件和目录操作
# ══════════════════════════════════════════════════════════════════════════════
# API 配置
# ══════════════════════════════════════════════════════════════════════════════
API_KEY = "sk-**********************************************"
API_URL = "https://www.dmxapi.cn/v1/images/edits"
# ══════════════════════════════════════════════════════════════════════════════
# ★ 多图融合 - 输入图片配置 ★
# ══════════════════════════════════════════════════════════════════════════════
#
# 【核心功能说明】
# 这里配置要融合的多张图片,AI 会智能分析所有图片的内容、风格、元素,
# 结合下方的提示词(prompt),生成融合后的全新图像。
#
# 【多图融合规则】
# ┌─────────────────────────────────────────────────────────────────────────┐
# │ 📌 图片数量: 1 ~ 14 张 (推荐 2-4 张获得最佳融合效果) │
# │ 📌 单图大小: < 50MB │
# │ 📌 支持格式: PNG / JPG / WEBP │
# │ 📌 尺寸限制: 无限制 │
# ├─────────────────────────────────────────────────────────────────────────┤
# │ 💡 融合技巧: │
# │ • 图片越多,融合复杂度越高,建议配合精准的提示词 │
# │ • 风格相近的图片融合效果更自然 │
# │ • 可混合不同类型: 风景+人物+物品 = 创意场景 │
# └─────────────────────────────────────────────────────────────────────────┘
#
# 【配置示例】
# 单图编辑: image_paths = ["图片1.png"]
# 双图融合: image_paths = ["图片1.png", "图片2.png"]
# 多图融合: image_paths = ["图片1.png", "图片2.png", "图片3.png", ...]
#
image_paths = [
"output/generated_image_20251217_112838_1.png", # 🖼️ 融合素材 1
"output/generated_image_20251217_113148_1.png", # 🖼️ 融合素材 2
"output/generated_image_20251217_113852_1.png", # 🖼️ 融合素材 3
]
# ══════════════════════════════════════════════════════════════════════════════
# ★ 多图融合 - 生成参数配置 ★
# ══════════════════════════════════════════════════════════════════════════════
payload = {
# ┌─────────────────────────────────────────────────────────────────────────┐
# │ 【融合提示词 - 最关键的参数!】 │
# │ │
# │ 提示词决定了多张图片如何融合: │
# │ • 描述你希望融合后的画面是什么样子 │
# │ • 可以指定从哪张图取什么元素 │
# │ • 最大长度: 32000 字符 │
# │ │
# │ 📝 融合提示词示例: │
# │ "将第一张图的人物放入第二张图的背景中" │
# │ "融合所有图片的风格,创建一个梦幻场景" │
# │ "保留第一张图的主体,使用其他图片的色彩风格" │
# └─────────────────────────────────────────────────────────────────────────┘
"prompt": "小猫在城市的一处森林中肆意玩耍",
# 【生成数量】只能是 1 张
"n": 1,
# 【使用模型】固定为 nano-banana-2
"model": "nano-banana-2",
# ┌─────────────────────────────────────────────────────────────────────────┐
# │ 【输出宽高比】aspect_ratio │
# ├──────────┬─────────────┬────────┬─────────────┬─────────────────────────┤
# │ 宽高比 │ 1K 分辨率 │ 令牌 │ 2K 分辨率 │ 4K 分辨率 │
# ├──────────┼─────────────┼────────┼─────────────┼─────────────────────────┤
# │ 1:1 │ 1024x1024 │ 1210 │ 2048x2048 │ 4096x4096 │
# │ 2:3 │ 848x1264 │ 1210 │ 1696x2528 │ 3392x5056 │
# │ 3:2 │ 1264x848 │ 1210 │ 2528x1696 │ 5056x3392 │
# │ 3:4 │ 896x1200 │ 1210 │ 1792x2400 │ 3584x4800 │
# │ 4:3 │ 1200x896 │ 1210 │ 2400x1792 │ 4800x3584 │
# │ 4:5 │ 928x1152 │ 1210 │ 1856x2304 │ 3712x4608 │
# │ 5:4 │ 1152x928 │ 1210 │ 2304x1856 │ 4608x3712 │
# │ 9:16 │ 768x1376 │ 1210 │ 1536x2752 │ 3072x5504 │
# │ 16:9 │ 1376x768 │ 1210 │ 2752x1536 │ 5504x3072 │
# │ 21:9 │ 1584x672 │ 1210 │ 3168x1344 │ 6336x2688 │
# └──────────┴─────────────┴────────┴─────────────┴─────────────────────────┘
# 注: 2K 令牌=1210, 4K 令牌=2000
"aspect_ratio": "5:4",
# 【输出分辨率】可选: "1K" / "2K" / "4K"
"size": "4k",
# 【返回格式】"url" 返回图片链接 / "b64_json" 返回 Base64 编码
"response_format": "url"
}
# ══════════════════════════════════════════════════════════════════════════════
# HTTP 请求头配置
# ══════════════════════════════════════════════════════════════════════════════
headers = {
"Authorization": f"Bearer {API_KEY}", # 身份验证: Bearer Token 认证方式
}
# ══════════════════════════════════════════════════════════════════════════════
# ★ 多图融合 - 主程序执行 ★
# ══════════════════════════════════════════════════════════════════════════════
#
# 执行流程:
# ┌────────────────────────────────────────────────────────────────────────────┐
# │ 步骤 1 │ 创建输出目录 │
# ├──────────┼─────────────────────────────────────────────────────────────────┤
# │ 步骤 2 │ 加载多张融合素材图片 │
# ├──────────┼─────────────────────────────────────────────────────────────────┤
# │ 步骤 3 │ 发送 API 请求,执行多图融合 │
# ├──────────┼─────────────────────────────────────────────────────────────────┤
# │ 步骤 4 │ 解析响应,获取融合结果 │
# ├──────────┼─────────────────────────────────────────────────────────────────┤
# │ 步骤 5 │ 保存融合后的图片 │
# └──────────┴─────────────────────────────────────────────────────────────────┘
#
try:
print("=" * 60)
print("🎨 DMXAPI 多图融合工具 - nano-banana-2")
print("=" * 60)
# ┌─────────────────────────────────────────────────────────────────────────┐
# │ 【步骤 1】创建输出文件夹 │
# │ 检查 output 目录是否存在,不存在则创建 │
# │ 融合后的图片将保存到此目录 │
# └─────────────────────────────────────────────────────────────────────────┘
print(f"\n📁 [步骤 1/5] 检查输出目录...")
output_dir = "output"
if not os.path.exists(output_dir):
os.makedirs(output_dir)
print(f"✓ 已创建输出文件夹: {output_dir}")
else:
print(f"✓ 输出文件夹已存在: {output_dir}")
# ┌─────────────────────────────────────────────────────────────────────────┐
# │ 【步骤 2】加载多张融合素材图片 │
# │ 遍历 image_paths 列表,将所有图片准备为上传格式 │
# │ 支持 1-14张图片同时上传进行融合 │
# └─────────────────────────────────────────────────────────────────────────┘
print(f"\n📷 [步骤 2/5] 加载融合素材图片...")
print(f" 预计加载 {len(image_paths)} 张图片进行融合")
files = []
for img_path in image_paths:
try:
file_name = img_path.split("/")[-1]
mime_type = "image/png" if img_path.lower().endswith(".png") else "image/jpeg"
files.append(
("image", (file_name, open(img_path, "rb"), mime_type))
)
print(f" ✓ 已加载: {img_path}")
except FileNotFoundError:
print(f" ⚠️ 警告: 文件未找到 - {img_path}")
except Exception as e:
print(f" ⚠️ 警告: 处理文件时出错 - {img_path}: {str(e)}")
if not files:
print("❌ 错误: 没有可用的融合素材图片")
else:
# ┌─────────────────────────────────────────────────────────────────────────┐
# │ 【步骤 3】发送 API 请求,执行多图融合 │
# │ 向 DMXAPI 服务器发送 POST 请求 │
# │ 携带多张图片 + 融合提示词,AI 将智能融合所有素材 │
# └─────────────────────────────────────────────────────────────────────────┘
print(f"\n🚀 [步骤 3/5] 开始多图融合处理...")
print(f" ┌────────────────────────────────────────────")
print(f" │ 🤖 模型: {payload['model']}")
print(f" │ 📐 宽高比: {payload['aspect_ratio']}")
print(f" │ 📺 分辨率: {payload['size']}")
print(f" │ 🖼️ 融合图片数: {len(files)} 张")
print(f" │ 📝 提示词: {payload['prompt']}")
print(f" └────────────────────────────────────────────")
response = requests.post(API_URL, headers=headers, data=payload, files=files)
response.raise_for_status()
# ┌─────────────────────────────────────────────────────────────────────────┐
# │ 【步骤 4】解析 API 响应 │
# │ 将服务器返回的 JSON 数据解析为 Python 字典 │
# │ 响应中包含融合后的图片数据 │
# └─────────────────────────────────────────────────────────────────────────┘
result = response.json()
print(f"\n✅ [步骤 4/5] 融合完成,正在解析结果...")
# ┌─────────────────────────────────────────────────────────────────────────┐
# │ 【步骤 5】保存融合后的图片 │
# │ 遍历返回的图片数据,解码 Base64 并保存到本地 │
# │ 或直接返回图片 URL 链接 │
# └─────────────────────────────────────────────────────────────────────────┘
if 'data' in result and len(result['data']) > 0:
print(f"\n💾 [步骤 5/5] 保存融合结果...")
for i, image_data in enumerate(result['data']):
if 'b64_json' in image_data:
base64_data = image_data['b64_json']
image_bytes = base64.b64decode(base64_data)
timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
filename = f"fusion_{timestamp}_{i+1}.png" # 融合结果文件命名
filepath = os.path.join(output_dir, filename)
with open(filepath, 'wb') as f:
f.write(image_bytes)
file_size = os.path.getsize(filepath) / 1024
print(f" ✓ 图片 {i+1}: {filepath} ({file_size:.2f} KB)")
elif 'url' in image_data:
print(f" ✓ 图片 {i+1} URL: {image_data['url']}")
print(f"\n{'=' * 60}")
print(f"🎉 多图融合完成!")
print(f"{'=' * 60}")
else:
print("❌ 未找到融合结果数据,请检查 API 响应")
# ══════════════════════════════════════════════════════════════════════════════
# ★ 异常处理 ★
# ══════════════════════════════════════════════════════════════════════════════
except requests.exceptions.RequestException as e:
# ┌─────────────────────────────────────────────────────────────────────────┐
# │ 【网络请求异常】 │
# │ • 连接超时 │
# │ • DNS 解析失败 │
# │ • HTTP 错误状态码 (4xx/5xx) │
# │ • 服务器无响应 │
# └─────────────────────────────────────────────────────────────────────────┘
print(f"\n{'=' * 60}")
print(f"❌ 多图融合请求失败!")
print(f"{'=' * 60}")
print(f"错误信息: {e}")
if e.response:
print(f"HTTP 状态码: {e.response.status_code}")
print(f"响应内容: {e.response.text}")
except Exception as e:
# ┌─────────────────────────────────────────────────────────────────────────┐
# │ 【其他未知异常】 │
# │ • 文件读写错误 │
# │ • JSON 解析错误 │
# │ • Base64 编解码错误 │
# │ • 其他运行时错误 │
# └─────────────────────────────────────────────────────────────────────────┘
print(f"\n{'=' * 60}")
print(f"❌ 多图融合过程中发生未知错误!")
print(f"{'=' * 60}")
print(f"错误信息: {e}")返回示例
json
==================================================
🎨 开始图文生图...
==================================================
✓ 输出文件夹已存在: output
📷 正在加载图片文件...
✓ 已加载: output/generated_image_20251217_112838_1.png
✓ 已加载: output/generated_image_20251217_113148_1.png
✓ 已加载: output/generated_image_20251217_113852_1.png
📡 正在向 API 发送请求...
模型: nano-banana-2
宽高比: 5:4
分辨率: 4k
提示词: 小猫在城市的一处森林中肆意玩耍
✓ API 响应成功!
💾 开始保存图片...
✓ 图片 1 URL: https://oss-cn.scdn.app/files/gemini/2025/12/17/a4215931-7b97-4e6d-8ed2-f16e970fd0a0.jpg
==================================================
✅ 所有图片处理完成!
==================================================© 2025 DMXAPI nano-banana-2-03 多图融合
