Skip to content

gemini 多轮图片修改 API 文档

Gemini 的多轮图片修改功能支持你以“对话”的方式来生成并持续调整图片:你可以先用一句话描述想要的画面生成初稿,然后像和设计师沟通一样,在后续轮次里不断补充细节或提出修改要求,例如更换背景、调整风格与色调、添加或删除元素、改变人物姿态与表情等。系统会理解上下文并记住前几轮的修改结果,每一次调整都会基于上一张图继续迭代,因此不需要你反复从头描述。整体上,建议用聊天或多轮对话逐步打磨作品,从“先有大方向”到“再精修细节”,效率更高、效果也更可控。

🌻模型名称(部分)

gemini-3-pro-image-preview

✈️请求地址

 https://www.dmxapi.cn/v1beta/models/gemini-3-pro-image-preview:generateContent

WARNING

注意:请妥善保管API密钥,不要泄露给他人。

🚀图片生成 调用示例

python
"""
================================================================================
Gemini 图片生成示例 - 01
================================================================================
功能说明:
    本脚本演示如何使用 Gemini API 根据文本提示生成图片。
    生成的图片会保存到本地,同时 base64 数据也会保存以供后续多轮对话使用。
================================================================================
"""

import requests
import json
import base64
import os
from datetime import datetime

# ==============================================================================
# 配置区域
# ==============================================================================

# API 请求地址
url = "https://www.dmxapi.cn/v1beta/models/gemini-3-pro-image-preview:generateContent"

# API 密钥(请妥善保管,不要泄露)
api_key = "sk-***********************************"

# 请求头配置
headers = {
    "x-goog-api-key": api_key,          # API 认证密钥
    "Content-Type": "application/json"   # 内容类型为 JSON
}

# ==============================================================================
# 请求数据构建
# ==============================================================================
#
# 请求结构说明:
# ┌─────────────────────────────────────────────────────────────────────────────┐
# │  contents        : 对话内容,包含用户的文本提示                              │
# │  generationConfig: 生成配置,指定返回文本和图片                              │
# └─────────────────────────────────────────────────────────────────────────────┘
#

data = {
    # -------------------------------------------------------------------------
    # contents: 对话内容列表
    # -------------------------------------------------------------------------
    "contents": [{
        "role": "user",
        "parts": [
            {"text": "一只可爱的小猫在愉快的玩耍"}  # 图片生成提示词
        ]
    }],

    # -------------------------------------------------------------------------
    # generationConfig: 生成配置
    # -------------------------------------------------------------------------
    "generationConfig": {
        "responseModalities": ["TEXT", "IMAGE"]  # 响应模态:同时返回文本和图片
    }
}

# ==============================================================================
# 创建 Base64 数据保存目录
# ==============================================================================

base64_folder = "base64_data"
if not os.path.exists(base64_folder):
    os.makedirs(base64_folder)
    print(f"已创建目录: {base64_folder}")

# ==============================================================================
# 发送 API 请求
# ==============================================================================

print("=" * 60)
print("正在发送请求到 Gemini API...")
print("=" * 60)

response = requests.post(url, headers=headers, json=data)
result = response.json()

if "candidates" in result:
    print("\n" + "=" * 60)
    print("响应解析成功!")
    print("=" * 60 + "\n")

    for candidate in result["candidates"]:
        if "content" in candidate and "parts" in candidate["content"]:
            for part in candidate["content"]["parts"]:
                # -------------------------------------------------------------
                # 处理文本部分
                # -------------------------------------------------------------
                if "text" in part:
                    print("+" + "-" * 58 + "+")
                    print("| 文本内容                                                 |")
                    print("+" + "-" * 58 + "+")
                    print(part["text"])
                    print("+" + "-" * 58 + "+\n")

                # -------------------------------------------------------------
                # 处理图片部分(Base64 格式)
                # -------------------------------------------------------------
                if "inlineData" in part:
                    mime_type = part["inlineData"].get("mimeType", "image/png")
                    base64_data = part["inlineData"].get("data", "")
                    thought_signature = part.get("thoughtSignature", "")  # 获取签名

                    # 生成带时间戳的文件名
                    # 格式:gemini_image_YYYYMMDD_HHMMSS.png
                    timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
                    extension = mime_type.split("/")[-1]
                    filename = f"gemini_image_{timestamp}.{extension}"

                    # 解码 Base64 数据并保存图片到本地
                    image_data = base64.b64decode(base64_data)
                    with open(filename, "wb") as f:
                        f.write(image_data)

                    # 保存 Base64 数据到文件(供多轮对话使用)
                    base64_filename = os.path.join(base64_folder, f"gemini_base64_{timestamp}.txt")
                    with open(base64_filename, "w", encoding="utf-8") as f:
                        f.write(base64_data)

                    # 保存 thought_signature 到文件(供多轮对话使用)
                    signature_filename = os.path.join(base64_folder, f"gemini_signature_{timestamp}.txt")
                    with open(signature_filename, "w", encoding="utf-8") as f:
                        f.write(thought_signature)

                    print("+" + "-" * 58 + "+")
                    print("| 图片信息                                                 |")
                    print("+" + "-" * 58 + "+")
                    print(f"| 图片文件: {filename:<46} |")
                    print(f"| Base64文件: {base64_filename:<44} |")
                    print(f"| 签名文件: {signature_filename:<46} |")
                    print(f"| MIME类型: {mime_type:<46} |")
                    print(f"| 数据长度: {len(base64_data):,} 字符{' ' * (39 - len(f'{len(base64_data):,}'))} |")
                    if thought_signature:
                        print(f"| 签名长度: {len(thought_signature):,} 字符{' ' * (39 - len(f'{len(thought_signature):,}'))} |")
                    else:
                        print("| 签名: (API 未返回签名)                                    |")
                    print("+" + "-" * 58 + "+")
                    print("| 图片、Base64 数据和签名已成功保存!                       |")
                    print("+" + "-" * 58 + "+\n")

                # -------------------------------------------------------------
                # 处理图片部分(URL 格式)
                # -------------------------------------------------------------
                if "fileData" in part:
                    file_uri = part["fileData"].get("fileUri", "")
                    mime_type = part["fileData"].get("mimeType", "")

                    print("+" + "-" * 58 + "+")
                    print("| 图片链接                                                 |")
                    print("+" + "-" * 58 + "+")
                    print(f"| URL: {file_uri[:50]:<52} |")
                    print(f"| MIME类型: {mime_type:<46} |")
                    print("+" + "-" * 58 + "+\n")

else:
    # -------------------------------------------------------------------------
    # 错误处理:响应中没有 candidates 字段
    # -------------------------------------------------------------------------
    print("\n" + "=" * 60)
    print("响应异常,完整内容如下:")
    print("=" * 60)
    print(json.dumps(result, indent=2, ensure_ascii=False))
    print("=" * 60 + "\n")

# ==============================================================================
# 脚本结束
# ==============================================================================
print("\n" + "=" * 60)
print("脚本执行完毕")
print("=" * 60)

✨返回示例

成功响应将返回包含向量数据的JSON对象:

json
============================================================
正在发送请求到 Gemini API...
============================================================

============================================================
响应解析成功!
============================================================

+----------------------------------------------------------+
| 图片信息                                                 |
+----------------------------------------------------------+
| 图片文件: gemini_image_20260129_181804.jpeg              |
| Base64文件: base64_data\gemini_base64_20260129_181804.txt |
| 签名文件: base64_data\gemini_signature_20260129_181804.txt |
| MIME类型: image/jpeg                                     |
| 数据长度: 1,112,340 字符                               |
| 签名长度: 2,212,040 字符                               |
+----------------------------------------------------------+
| 图片、Base64 数据和签名已成功保存!                       |
+----------------------------------------------------------+


============================================================
脚本执行完毕
============================================================

🚢多轮对话 示例代码

python
"""
================================================================================
Gemini 多轮图片修改示例 - 02
================================================================================
功能说明:
    本脚本演示如何使用 Gemini API 进行多轮对话式图片编辑。
    通过传递历史对话和之前生成的图片,可以让 AI 在原图基础上进行修改。
================================================================================
"""
import requests
import json
import base64
from datetime import datetime

# ==============================================================================
# 配置区域
# ==============================================================================

# API 请求地址
url = "https://www.dmxapi.cn/v1beta/models/gemini-3-pro-image-preview:generateContent"

# API 密钥(请妥善保管,不要泄露)
api_key = "sk-*********************************************"

# 上一轮生成的图片 base64 数据文件路径
base64_file = r"base64_data\gemini_base64_20260129_181804.txt"
with open(base64_file, "r") as f:
    previous_image_data = f.read().strip()

# 上一轮生成的图片签名文件路径
signature_file = r"base64_data\gemini_signature_20260129_181804.txt"
with open(signature_file, "r") as f:
    previous_thought_signature = f.read().strip()

# 请求头配置
headers = {
    "x-goog-api-key": api_key,          # API 认证密钥
    "Content-Type": "application/json"   # 内容类型为 JSON
}


# ==============================================================================
# 多轮对话数据构建
# ==============================================================================
#
# 对话结构说明:
# ┌─────────────────────────────────────────────────────────────────────────────┐
# │  第 1 轮 (user)  : 用户发起初始请求,要求创建信息图                           │
# │  第 2 轮 (model) : 模型返回生成的图片(base64 格式)                          │
# │  第 3 轮 (user)  : 用户基于上一轮图片,提出修改要求                           │
# └─────────────────────────────────────────────────────────────────────────────┘
#
# 注意:<PREVIOUS_IMAGE_DATA> 需要替换为实际的 base64 编码图片数据
#

data = {
    # -------------------------------------------------------------------------
    # contents: 对话内容列表,按时间顺序排列
    # -------------------------------------------------------------------------
    "contents": [
        # 第 1 轮:用户初始请求
        {
            "role": "user",
            "parts": [{"text": "一只可爱的小猫在愉快的玩耍"}]
        },
        # 第 2 轮:模型返回的图片(需要填入上一次生成的图片数据)
        {
            "role": "model",
            "parts": [{
                "inline_data": {
                    "mime_type": "image/jpeg",           # 图片 MIME 类型
                    "data": previous_image_data          # 从文件读取的 base64 数据
                },
                "thoughtSignature": previous_thought_signature  # 从文件读取的签名
            }]
        },
        # 第 3 轮:用户的修改请求
        {
            "role": "user",
            "parts": [{"text": "给这个小猫加一个红色的帽子,帽子上面写上几个文字'Jonathan'"}]
        }
    ],

    # -------------------------------------------------------------------------
    # tools: 可用工具列表
    # -------------------------------------------------------------------------
    "tools": [
        {"google_search": {}}               # 启用 Google 搜索功能
    ],

    # -------------------------------------------------------------------------
    # generationConfig: 生成配置
    # -------------------------------------------------------------------------
    "generationConfig": {
        # 响应模态:同时返回文本和图片
        "responseModalities": ["TEXT", "IMAGE"],

        # 图片配置
        "imageConfig": {
            "aspectRatio": "16:9",           # 宽高比:16:9(适合横屏展示)
            "imageSize": "2K"                # 图片分辨率:2K 高清
        }
    }
}


# ==============================================================================
# 发送 API 请求
# ==============================================================================

print("=" * 60)
print("正在发送请求到 Gemini API...")
print("=" * 60)

response = requests.post(url, headers=headers, json=data)
result = response.json()

if "candidates" in result:
    print("\n" + "=" * 60)
    print("响应解析成功!")
    print("=" * 60 + "\n")

    for candidate in result["candidates"]:
        if "content" in candidate and "parts" in candidate["content"]:
            for part in candidate["content"]["parts"]:

                # -------------------------------------------------------------
                # 处理文本部分
                # -------------------------------------------------------------
                if "text" in part:
                    print("┌" + "─" * 58 + "┐")
                    print("│ 📝 文本内容                                                │")
                    print("├" + "─" * 58 + "┤")
                    print(part["text"])
                    print("└" + "─" * 58 + "┘\n")

                # -------------------------------------------------------------
                # 处理图片部分(Base64 格式)
                # -------------------------------------------------------------
                if "inlineData" in part:
                    mime_type = part["inlineData"].get("mimeType", "image/png")
                    base64_data = part["inlineData"].get("data", "")

                    # 生成带时间戳的文件名
                    # 格式:gemini_image_YYYYMMDD_HHMMSS.png
                    timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
                    extension = mime_type.split("/")[-1]
                    filename = f"gemini_image_{timestamp}.{extension}"

                    # 解码 Base64 数据并保存到本地文件
                    image_data = base64.b64decode(base64_data)
                    with open(filename, "wb") as f:
                        f.write(image_data)

                    print("┌" + "─" * 58 + "┐")
                    print("│ 🖼️  图片信息                                                │")
                    print("├" + "─" * 58 + "┤")
                    print(f"│ 文件名称: {filename:<46} │")
                    print(f"│ MIME类型: {mime_type:<46} │")
                    print(f"│ 数据长度: {len(base64_data):,} 字符{' ' * (39 - len(f'{len(base64_data):,}'))} │")
                    print("├" + "─" * 58 + "┤")
                    print("│ ✅ 图片已成功保存到本地!                                   │")
                    print("└" + "─" * 58 + "┘\n")

                # -------------------------------------------------------------
                # 处理图片部分(URL 格式)
                # -------------------------------------------------------------
                if "fileData" in part:
                    file_uri = part["fileData"].get("fileUri", "")
                    mime_type = part["fileData"].get("mimeType", "")

                    print("┌" + "─" * 58 + "┐")
                    print("│ 🔗 图片链接                                                │")
                    print("├" + "─" * 58 + "┤")
                    print(f"│ URL: {file_uri[:50]:<52} │")
                    print(f"│ MIME类型: {mime_type:<46} │")
                    print("└" + "─" * 58 + "┘\n")

else:
    # -------------------------------------------------------------------------
    # 错误处理:响应中没有 candidates 字段
    # -------------------------------------------------------------------------
    print("\n" + "=" * 60)
    print("⚠️  响应异常,完整内容如下:")
    print("=" * 60)
    print(json.dumps(result, indent=2, ensure_ascii=False))
    print("=" * 60 + "\n")


# ==============================================================================
# 脚本结束
# ==============================================================================
print("\n" + "=" * 60)
print("脚本执行完毕")
print("=" * 60)

🧙‍♀️返回示例

json
============================================================
正在发送请求到 Gemini API...
============================================================

============================================================
响应解析成功!
============================================================

┌──────────────────────────────────────────────────────────┐
│ 🖼️  图片信息                                                │
├──────────────────────────────────────────────────────────┤
│ 文件名称: gemini_image_20260129_221054.jpeg              │
│ MIME类型: image/jpeg                                     │
│ 数据长度: 4,032,724 字符                               │
├──────────────────────────────────────────────────────────┤
│ ✅ 图片已成功保存到本地!                                   │
└──────────────────────────────────────────────────────────┘


============================================================
脚本执行完毕
============================================================

© 2026 DMXAPI gemini多轮图片修改

一个 Key 用全球大模型