Skip to content

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 多图融合

一个 Key 用全球大模型