gpt-image-1 多图合并接口
简介
gpt-image-1 的一个高级功能是根据提示词智能地将多张图片的内容进行融合或合并。此示例展示了如何上传两张或多张图片,并指示模型将它们的内容巧妙地结合起来。
API接口文档
基础信息
- Base URL:
https://www.dmxapi.cn/v1/images/edits
- 请求方式: POST
- 认证方式: Bearer Token
示例代码
python
import base64 # 导入 base64 模块
import json # 导入 json 模块
import requests # 导入 requests 库
# API 端点,用于图像编辑和操作,包括多图合并
url = "https://www.dmxapi.cn/v1/images/edits" # <-- 注意域名要和你注册的网站对应
# 请将以下 API 密钥替换为您真实的 DMXAPI 令牌
api_key = "sk-******************************" # 填写 DMXAPI 令牌
headers = {
"Authorization": f"Bearer {api_key}" # 使用你的 API 密钥进行认证
}
# 请求参数,包含多图合并的提示词
payload = {
# 描述多图合并的要求,越详细越好
"prompt": "将图片 1 的人物抠出来,并和图片 2 的背景完美融合,使人物看起来自然地站在背景中,保持人物外貌和图片 2 的光影风格一致",
# "size": "1024x1024" # 可选参数,指定输出尺寸。注意:指定尺寸可能影响合并效果或导致裁剪
}
# 需要上传的图片文件列表,发送多张图片
files = [
(
"image", # 参数名称必须是 "image"
(
"person_image.jpg", # 文件名(可以随意命名)
open(
"C:\\path\\to\\your\\111.jpg", # <-- 请替换为你的第一张图片(人物图)文件完整路径
"rb",
),
"image/jpeg", # 文件的 MIME 类型
),
),
(
"image", # 参数名称必须是 "image",每张图片对应一个 "image" 字段
(
"background_image.jpg", # 文件名(可以随意命名)
open(
"C:\\path\\to\\your\\222.jpg", # <-- 请替换为你的第二张图片(背景图)文件完整路径
"rb",
),
"image/jpeg",
),
),
# 如果需要上传更多图片进行合并,可以继续添加 ( "image", (...) ) 元组到列表中
]
# 发送 POST 请求
response = requests.post(url, headers=headers, data=payload, files=files)
# 打印原始响应文本(可选,用于调试)
print(response.text)
# 检查请求是否成功
if response.status_code == 200:
try:
# 解析 JSON 响应
response_data = response.json() # requests 库可以直接解析 JSON
# 检查响应数据结构是否符合预期
if (
"data" in response_data
and isinstance(response_data["data"], list)
and len(response_data["data"]) > 0
):
# 提取第一个结果中的 base64 字符串
image_base64 = response_data["data"][0].get("b64_json")
if image_base64:
try:
# 解码 base64 字符串
image_data = base64.b64decode(image_base64)
# 定义保存文件的路径和名称
output_filename = "output_merged_image.png" # 您可以修改文件名
# 将二进制数据写入文件
with open(output_filename, "wb") as f:
f.write(image_data)
print(f"图像已成功保存到 {output_filename}")
except base64.binascii.Error as e:
print(f"Base64 解码错误: {e}")
except IOError as e:
print(f"文件写入错误: {e}")
else:
print("响应中未找到 'b64_json' 字段或其值为 None")
else:
print("响应数据结构不符合预期或 'data' 列表为空")
print("原始响应文本:", response.text) # 打印原始响应以便调试
except json.JSONDecodeError:
print("无法解析 JSON 响应")
print("原始响应文本:", response.text)
except Exception as e:
print(f"处理响应时发生未知错误: {e}")
else:
print(f"请求失败,状态码: {response.status_code}")
print("响应文本:", response.text) # 打印错误响应文本