Skip to content

OpenAI GPT 图片编辑 API 文档

📡 请求地址

https://www.dmxapi.cn/v1/images/edits

🤖 模型名称

模型名称状态
gpt-image-1✅ 可用
gpt-image-1-mini✅ 可用
dall-e-3❌ 本身不支持

💻 Python 代码示例

python
#!/usr/bin/env python3
# -*- coding: utf-8 -*-

"""
╔══════════════════════════════════════════════════════════════════════════════╗
║                         DMXAPI 图片编辑工具                                  ║
╠══════════════════════════════════════════════════════════════════════════════╣
║  功能说明:使用 DMXAPI 的图片编辑接口对图片进行 AI 智能编辑处理                  ║
╚══════════════════════════════════════════════════════════════════════════════╝
"""

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


# ╔══════════════════════════════════════════════════════════════════════════════╗
# ║                              图片文件配置                                     ║
# ╚══════════════════════════════════════════════════════════════════════════════╝

image_paths = [
    "output/generated_image_20251107_120453_1.png",  # 第一张图片路径
    # "/path/to/image2.png",                         # 第二张图片路径(可选)
    # "/path/to/image3.png",                         # 第三张图片路径(可选)
]

"""
重要提示 - 不同模型对图片的要求:
┌─────────────────┬──────────────────────────────────────────────────────┐
│   gpt-image-1   │ • 支持多张图片(最多 16 张)                         │
│                 │ • 文件大小:< 50MB                                   │
│                 │ • 支持格式:png、webp、jpg                           │
│                 │ • 尺寸:无限制                                       │
├─────────────────┼──────────────────────────────────────────────────────┤
"""
# ╔══════════════════════════════════════════════════════════════════════════════╗
# ║                               API 配置                                        ║
# ╚══════════════════════════════════════════════════════════════════════════════╝

# DMXAPI 端点地址
url = "https://www.dmxapi.cn/v1/images/edits"

# DMXAPI 密钥(请替换为您自己的密钥)
api_key = "sk-******************************************"

# HTTP 请求头配置
headers = {
    "Authorization": f"Bearer {api_key}"  # Bearer Token 认证
}


# ╔══════════════════════════════════════════════════════════════════════════════╗
# ║                            请求参数配置                                       ║
# ╚══════════════════════════════════════════════════════════════════════════════╝

payload = {
    # ─────────────────────────────────────────────────────────────────────────
    # 【必填参数】模型名称
    # ─────────────────────────────────────────────────────────────────────────
    "model": "gpt-image-1-mini",  # 模型名称
    
    # ─────────────────────────────────────────────────────────────────────────
    # 【必填参数】编辑指令
    # ─────────────────────────────────────────────────────────────────────────
    "prompt": "给哪吒带上一个红色的鸭舌帽,风格保持不变",
    
    # ─────────────────────────────────────────────────────────────────────────
    # 【可选参数】生成图像的尺寸
    # ─────────────────────────────────────────────────────────────────────────
    # • gpt-image-1 支持:
    #   - 1024x1024  (方形)
    #   - 1536x1024  (横版)
    #   - 1024x1536  (竖版)
    #   - auto       (默认,自动选择)
    # ─────────────────────────────────────────────────────────────────────────
    "size": "1024x1024",
    
    # ─────────────────────────────────────────────────────────────────────────
    # 【可选参数】背景透明度设置(仅 gpt-image-1 支持)
    # ─────────────────────────────────────────────────────────────────────────
    # • transparent - 透明背景
    # • opaque      - 不透明背景
    # • auto        - 自动选择(默认)
    # ─────────────────────────────────────────────────────────────────────────
    "background": "auto",
    
    # ─────────────────────────────────────────────────────────────────────────
    # 【可选参数】输入图像保真度(仅 gpt-image-1 支持,不支持 gpt-image-1-mini)
    # ─────────────────────────────────────────────────────────────────────────
    # 控制模型匹配输入图像风格和特征的程度(尤其是面部特征)
    # • high - 高保真度(更贴近原图)
    # • low  - 低保真度(默认,更有创造性)
    # ─────────────────────────────────────────────────────────────────────────
    # "input_fidelity": "low",
    
    # ─────────────────────────────────────────────────────────────────────────
    # 【可选参数】输出图像压缩级别(仅 gpt-image-1 支持)
    # ─────────────────────────────────────────────────────────────────────────
    # 取值范围:0-100
    # • 0   - 最低质量(最小文件大小)
    # • 100 - 最高质量(最大文件大小)
    # ⚠️ 注意:仅在输出格式为 webp 或 jpeg 时有效
    # ─────────────────────────────────────────────────────────────────────────
    "output_compression": 100,
    
    # ─────────────────────────────────────────────────────────────────────────
    # 【可选参数】输出图像格式(仅 gpt-image-1 支持)
    # ─────────────────────────────────────────────────────────────────────────
    # • png  - PNG 格式(默认,支持透明)
    # • jpeg - JPEG 格式(不支持透明,文件更小)
    # • webp - WebP 格式(现代格式,压缩率高)
    # ─────────────────────────────────────────────────────────────────────────
    "output_format": "png",
    
    # ─────────────────────────────────────────────────────────────────────────
    # 【可选参数】图像质量
    # ─────────────────────────────────────────────────────────────────────────
    # • gpt-image-1 支持:
    #   - high   (高质量)
    #   - medium (中等质量)
    #   - low    (低质量)
    #   - auto   (自动,默认)
    # ─────────────────────────────────────────────────────────────────────────
    "quality": "auto",
    
}


# ╔══════════════════════════════════════════════════════════════════════════════╗
# ║                            准备图片文件                                       ║
# ╚══════════════════════════════════════════════════════════════════════════════╝

files = []

# 遍历配置的图片路径列表,准备上传文件
for img_path in image_paths:
    try:
        # 从完整路径中提取文件名
        file_name = img_path.split("/")[-1]
        
        # 根据文件扩展名自动判断 MIME 类型
        mime_type = "image/png" if img_path.lower().endswith(".png") else "image/jpeg"
        
        # 将文件添加到上传列表
        # 格式:(参数名, (文件名, 文件对象, MIME类型))
        files.append(
            ("image",                   # API 要求的固定参数名
             (file_name,                # 原始文件名
              open(img_path, "rb"),     # 以二进制只读模式打开文件
              mime_type)                # 文件的 MIME 类型
            )
        )
        
    except FileNotFoundError:
        # 文件不存在时的错误处理
        print(f"⚠️  警告: 文件未找到 - {img_path}")
        
    except Exception as e:
        # 其他异常的错误处理
        print(f"⚠️  警告: 处理文件时出错 - {img_path}: {str(e)}")


# ╔══════════════════════════════════════════════════════════════════════════════╗
# ║                          发送请求并处理响应                                   ║
# ╚══════════════════════════════════════════════════════════════════════════════╝

if not files:
    # 如果没有成功加载任何图片文件
    print("❌ 错误: 没有可用的图片文件")
    
else:
    # ──────────────────────────────────────────────────────────────────────────
    # 发送 HTTP POST 请求到 DMXAPI
    # ──────────────────────────────────────────────────────────────────────────
    response = requests.post(
        url,              # API 端点
        headers=headers,  # 请求头(包含认证信息)
        data=payload,     # 请求参数
        files=files       # 上传的图片文件
    )
    
    # ──────────────────────────────────────────────────────────────────────────
    # 处理 API 响应
    # ──────────────────────────────────────────────────────────────────────────
    if response.status_code == 200:
        # ✅ 请求成功(HTTP 200)
        try:
            # 解析 JSON 格式的响应数据
            data = response.json()
            
            # 确保输出目录存在(如不存在则创建)
            output_dir = "output"
            os.makedirs(output_dir, exist_ok=True)
            
            # 验证响应数据结构是否符合预期
            if data.get("data") and isinstance(data["data"], list):
                # 生成时间戳作为文件名的一部分(格式:YYYYMMDD_HHMMSS)
                timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
                
                # ──────────────────────────────────────────────────────────────
                # 遍历处理所有返回的编辑后图片
                # ──────────────────────────────────────────────────────────────
                for idx, item in enumerate(data["data"]):
                    # 提取 Base64 编码的图片数据
                    image_b64 = item.get("b64_json")
                    
                    if image_b64:
                        # 生成输出文件名
                        # 多张图片时:edited_时间戳_序号.png
                        # 单张图片时:edited_时间戳.png
                        if len(data["data"]) > 1:
                            filename = f"edited_{timestamp}_{idx + 1}.png"
                        else:
                            filename = f"edited_{timestamp}.png"
                            
                        # 构建完整的输出路径
                        output_path = os.path.join(output_dir, filename)
                        
                        # 解码 Base64 数据并保存为图片文件
                        with open(output_path, "wb") as f:
                            f.write(base64.b64decode(image_b64))
                        
                        print(f"✅ 图片保存成功: {output_path}")
                    else:
                        print(f"⚠️  未获取到第 {idx + 1} 张图片数据")
                        
            else:
                # 响应数据格式不正确
                print("❌ 响应数据结构异常")
                print(f"📄 原始响应: {json.dumps(data, indent=2, ensure_ascii=False)}")
                
        except json.JSONDecodeError:
            # JSON 解析失败
            print("❌ JSON 解析失败")
            print(f"📄 原始响应: {response.text}")
            
    else:
        # ❌ 请求失败(HTTP 状态码非 200)
        print(f"❌ 请求失败: HTTP {response.status_code}")
        print(f"📄 响应内容: {response.text}")

📤 返回参数

执行成功后将返回如下结果:

json
✅ 图片保存成功: output\edited_20251107_134527.png

📝 参数说明

必填参数

参数名类型说明
modelstring模型名称,可选 gpt-image-1
promptstring图片编辑指令,描述您想对图片进行的修改
imagefile要编辑的原始图片文件

可选参数

参数名类型默认值说明
sizestringauto输出图片尺寸
backgroundstringauto背景透明度设置(仅 gpt-image-1)
input_fidelitystringlow输入图像保真度(仅 gpt-image-1)
output_compressioninteger-输出图像压缩级别 0-100(仅 gpt-image-1)
output_formatstringpng输出图像格式:png/jpeg/webp(仅 gpt-image-1)
qualitystringauto图像质量设置

⚠️ 注意事项

不同模型的图片要求

gpt-image-1

  • ✅ 支持多张图片(最多 16 张)
  • 📦 文件大小:< 50MB
  • 🖼️ 支持格式:png、webp、jpg
  • 📐 尺寸:无限制

© 2025 DMXAPI GPT图片

一个 Key 用全球大模型