gemini 多轮图片修改 API 文档
Gemini 的多轮图片修改功能支持你以“对话”的方式来生成并持续调整图片:你可以先用一句话描述想要的画面生成初稿,然后像和设计师沟通一样,在后续轮次里不断补充细节或提出修改要求,例如更换背景、调整风格与色调、添加或删除元素、改变人物姿态与表情等。系统会理解上下文并记住前几轮的修改结果,每一次调整都会基于上一张图继续迭代,因此不需要你反复从头描述。整体上,建议用聊天或多轮对话逐步打磨作品,从“先有大方向”到“再精修细节”,效率更高、效果也更可控。
🌻模型名称(部分)
gemini-3-pro-image-preview
✈️请求地址
https://www.dmxapi.cn/v1beta/models/gemini-3-pro-image-preview:generateContentWARNING
注意:请妥善保管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多轮图片修改
