Skip to content
SuperToken 文档

GPT-Image-2 图片生成

通过 SuperToken,你可以使用 GPT-Image-2 生成和编辑图片。SuperToken 提供两种调用方式,使用相同的 Images API 路径,主要区别在 model、底层通道、参数支持和计费方式。

先选模型

模型底层通道计费方式参数支持适合场景
gpt-image-2-countGPT 内置生图工具按调用次数计费支持常用参数,n 只能为 1,不支持官方 Images API 的全部参数成本优先、单张生成或编辑、批量低成本出图
gpt-image-2官方 Images API按 token 用量计费支持官方 Images API 参数需要 n > 1、官方完整参数、更高兼容性的项目

选择建议

如果只是低成本生成或编辑单张图片,建议先用 gpt-image-2-count。如果现有代码依赖 OpenAI 官方 Images API 的完整参数,或需要一次请求生成多张图片,请使用 gpt-image-2

这组接口适合:

  • 需要直接文生图的项目
  • 需要对已有图片进行编辑或局部修改的场景
  • 已经兼容 OpenAI Images API 的应用
  • 需要在低成本单张出图和官方完整参数之间切换的项目

接口地址

text
https://api.supertoken.cc/image-wrapper/v1/images

认证方式

在请求头中添加 API 密钥:

http
Authorization: Bearer YOUR_API_KEY

Generations API

接口说明

用于根据提示词直接生成图片。下面示例默认使用低成本的 gpt-image-2-count;如果需要官方 Images API 参数,把 model 改成 gpt-image-2,并按官方参数传入即可。

请求地址

text
POST /image-wrapper/v1/images/generations

请求示例

bash
curl --location 'https://api.supertoken.cc/image-wrapper/v1/images/generations' \
  --header 'Content-Type: application/json' \
  --header 'Authorization: Bearer YOUR_API_KEY' \
  --data '{
    "model": "gpt-image-2-count",
    "prompt": "吃着铜锣烧的机器猫",
    "n": 1,
    "size": "3840x2160",
    "quality": "auto"
  }'

请求参数

参数类型必填说明
modelstring可选 gpt-image-2-countgpt-image-2
promptstring绘图提示词
sizestringgpt-image-2-count 支持 1024x10241024x15361536x10242048x20483840x2160autogpt-image-2 按官方 Images API 支持范围传入
qualitystringgpt-image-2-count 支持 lowmediumhighautogpt-image-2 按官方 Images API 支持范围传入
ninteger生成张数。gpt-image-2-count 只能为 1gpt-image-2 按官方 Images API 支持范围传入
其他官方参数mixedgpt-image-2 支持。需要完整官方参数时,请使用 gpt-image-2

计费说明

gpt-image-2-count 按调用次数计费,适合低成本单张出图。使用这个模型时,n 只能为 1;如果需要多张图片,请发起多次调用。

以下是 gpt-image-2-count 当前单张图片参考价格:

质量单张价格
low¥0.007
medium¥0.06
high¥0.26

gpt-image-2 走官方 Images API 通道,按 token 用量计费,不使用上面的单张价格表。实际费用与输入、输出、尺寸、质量和传入的官方参数有关,可在控制台使用日志中查看。

响应格式

默认返回图片 URL,data[].url 为生成图片的访问地址。如果使用 gpt-image-2 并传入会改变响应形式的官方参数,请以实际响应为准。

json
{
  "created": 1780646461,
  "created_at_beijing": "2026-06-05 16:01:01",
  "data": [
    {
      "url": "https://img.supertoken.cc/images/2026/06/05/8d2e9cae-d641-464d-a024-8d6857a0a67c.png"
    }
  ]
}

Edits API

接口说明

在给定原始图像和提示词的情况下,对图片进行编辑或扩展。支持整图编辑和 mask 局部编辑两种方式。

使用 gpt-image-2-count 时,最多只能上传一张图片。使用 gpt-image-2 时,图片数量和其他编辑参数按官方 Images API 支持范围传入。

请求地址

text
POST /image-wrapper/v1/images/edits

请求参数

参数类型必填说明
modelstring可选 gpt-image-2-countgpt-image-2
imagefile需要编辑的原始图片。gpt-image-2-count 最多 1 张;gpt-image-2 按官方 Images API 支持范围传入
promptstring描述期望编辑效果的提示词
maskfile遮罩图片,透明区域表示需要编辑的部分
sizestringgpt-image-2-count 支持 1024x10241024x15361536x10242048x20483840x2160autogpt-image-2 按官方 Images API 支持范围传入
qualitystringgpt-image-2-count 支持 lowmediumhighautogpt-image-2 按官方 Images API 支持范围传入
ninteger生成张数。gpt-image-2-count 只能为 1gpt-image-2 按官方 Images API 支持范围传入
其他官方参数mixedgpt-image-2 支持。需要完整官方参数时,请使用 gpt-image-2

整图编辑示例

根据提示词对整张图片进行编辑:

python
import json
import os
import urllib.error
import urllib.request
from datetime import datetime

API_KEY = os.environ.get("SUPERTOKEN_API_KEY", "YOUR_API_KEY")
API_URL = "https://api.supertoken.cc/image-wrapper/v1/images/edits"

IMAGE_PATH = "photo.png"
PROMPT = "把背景改成晚霞"
MODEL = "gpt-image-2-count"
SIZE = "1024x1024"
QUALITY = "auto"


def build_multipart(fields: dict, files: dict) -> tuple[bytes, str]:
    import uuid

    boundary = uuid.uuid4().hex
    body = b""
    for key, value in fields.items():
        body += f"--{boundary}\r\n".encode()
        body += f'Content-Disposition: form-data; name="{key}"\r\n\r\n'.encode()
        body += f"{value}\r\n".encode()
    for key, (filename, data, content_type) in files.items():
        body += f"--{boundary}\r\n".encode()
        body += f'Content-Disposition: form-data; name="{key}"; filename="{filename}"\r\n'.encode()
        body += f"Content-Type: {content_type}\r\n\r\n".encode()
        body += data + b"\r\n"
    body += f"--{boundary}--\r\n".encode()
    return body, f"multipart/form-data; boundary={boundary}"


def edit_image(image_path: str, prompt: str) -> dict:
    with open(image_path, "rb") as f:
        image_data = f.read()

    fields = {
        "model": MODEL,
        "prompt": prompt,
        "size": SIZE,
        "quality": QUALITY,
    }
    files = {
        "image": (os.path.basename(image_path), image_data, "image/png"),
    }

    body, content_type = build_multipart(fields, files)

    req = urllib.request.Request(
        API_URL,
        data=body,
        headers={
            "Authorization": f"Bearer {API_KEY}",
            "Content-Type": content_type,
        },
        method="POST",
    )

    with urllib.request.urlopen(req, timeout=300) as resp:
        return json.loads(resp.read().decode("utf-8"))


def save_image(data_entry: dict, index: int) -> str | None:
    timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
    filename = f"edited_{timestamp}_{index}.png"

    if data_entry.get("url"):
        url = data_entry["url"]
        urllib.request.urlretrieve(url, filename)
        print(f"[{index + 1}] 已下载保存到:{filename}")
        return filename

    print(f"[{index + 1}] 未知返回格式:{data_entry}")
    return None

Mask 局部编辑示例

使用遮罩图片指定编辑区域,只修改透明区域对应的部分:

python
import json
import os
import urllib.error
import urllib.request
from datetime import datetime

API_KEY = os.environ.get("SUPERTOKEN_API_KEY", "YOUR_API_KEY")
API_URL = "https://api.supertoken.cc/image-wrapper/v1/images/edits"

IMAGE_PATH = "photo.png"
MASK_PATH = "mask.png"
PROMPT = "把中央区域改成一只橘猫"
MODEL = "gpt-image-2-count"
SIZE = "1024x1024"
QUALITY = "auto"


def build_multipart(fields: dict, files: dict) -> tuple[bytes, str]:
    import uuid

    boundary = uuid.uuid4().hex
    body = b""
    for key, value in fields.items():
        body += f"--{boundary}\r\n".encode()
        body += f'Content-Disposition: form-data; name="{key}"\r\n\r\n'.encode()
        body += f"{value}\r\n".encode()
    for key, (filename, data, content_type) in files.items():
        body += f"--{boundary}\r\n".encode()
        body += f'Content-Disposition: form-data; name="{key}"; filename="{filename}"\r\n'.encode()
        body += f"Content-Type: {content_type}\r\n\r\n".encode()
        body += data + b"\r\n"
    body += f"--{boundary}--\r\n".encode()
    return body, f"multipart/form-data; boundary={boundary}"


def edit_image_with_mask(image_path: str, mask_path: str, prompt: str) -> dict:
    with open(image_path, "rb") as f:
        image_data = f.read()
    with open(mask_path, "rb") as f:
        mask_data = f.read()

    fields = {
        "model": MODEL,
        "prompt": prompt,
        "size": SIZE,
        "quality": QUALITY,
    }
    files = {
        "image": (os.path.basename(image_path), image_data, "image/png"),
        "mask": (os.path.basename(mask_path), mask_data, "image/png"),
    }

    body, content_type = build_multipart(fields, files)

    req = urllib.request.Request(
        API_URL,
        data=body,
        headers={
            "Authorization": f"Bearer {API_KEY}",
            "Content-Type": content_type,
        },
        method="POST",
    )

    with urllib.request.urlopen(req, timeout=300) as resp:
        return json.loads(resp.read().decode("utf-8"))


def save_image(data_entry: dict, index: int) -> str | None:
    timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
    filename = f"mask_edited_{timestamp}_{index}.png"

    if data_entry.get("url"):
        url = data_entry["url"]
        urllib.request.urlretrieve(url, filename)
        print(f"[{index + 1}] 已下载保存到:{filename}")
        return filename

    print(f"[{index + 1}] 未知返回格式:{data_entry}")
    return None

响应格式

与图片生成接口一致,默认返回图片 URL:

json
{
  "created": 1780646461,
  "created_at_beijing": "2026-06-05 16:01:01",
  "data": [
    {
      "url": "https://img.supertoken.cc/images/2026/06/05/8d2e9cae-d641-464d-a024-8d6857a0a67c.png"
    }
  ]
}

gpt-image-2-count 支持的尺寸

尺寸参数说明
1024x1024正方形
1024x1536竖图
1536x1024横图
2048x2048高分辨率正方形
3840x21604K 横图
auto自动选择合适尺寸

使用 gpt-image-2 时,尺寸参数按官方 Images API 支持范围传入。

代码示例

Python(urllib)

下面示例使用 gpt-image-2-count。如果需要官方 Images API 参数,可以把 MODEL 改成 gpt-image-2,并在请求中加入对应参数。

python
import json
import os
import urllib.error
import urllib.request
from datetime import datetime

API_KEY = os.environ.get("SUPERTOKEN_API_KEY", "YOUR_API_KEY")
API_URL = "https://api.supertoken.cc/image-wrapper/v1/images/generations"

PROMPT = "吃着铜锣烧的机器猫"
MODEL = "gpt-image-2-count"
SIZE = "3840x2160"
QUALITY = "auto"
N = 1

def generate_image(prompt: str, size: str, quality: str, n: int) -> dict:
    payload = json.dumps({
        "model": MODEL,
        "prompt": prompt,
        "size": size,
        "quality": quality,
        "n": n,
    }).encode("utf-8")

    req = urllib.request.Request(
        API_URL,
        data=payload,
        headers={
            "Authorization": f"Bearer {API_KEY}",
            "Content-Type": "application/json",
        },
        method="POST",
    )

    with urllib.request.urlopen(req, timeout=300) as resp:
        return json.loads(resp.read().decode("utf-8"))


def save_image(data_entry: dict, index: int) -> str | None:
    timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
    filename = f"output_{timestamp}_{index}.png"

    if data_entry.get("url"):
        url = data_entry["url"]
        urllib.request.urlretrieve(url, filename)
        print(f"[{index + 1}] 已下载保存到:{filename}")
        return filename

    print(f"[{index + 1}] 未知返回格式:{data_entry}")
    return None

注意事项

  • 图片生成和编辑接口不是聊天接口,不要调用 /v1/chat/completions
  • gpt-image-2-count 按调用次数计费,n 只能为 1
  • gpt-image-2-count 不支持官方 Images API 的全部参数;需要完整官方参数时使用 gpt-image-2
  • gpt-image-2 按 token 用量计费,费用不等同于 gpt-image-2-count 的单张价格表
  • 建议把请求超时设置为 300 秒,避免高分辨率生成时超时
  • quality 越高,耗时和费用通常越高,测试时建议先用 lowmedium
  • 当你不确定画幅时,可以先使用 auto,再按需要切换到固定尺寸
  • 图片编辑接口 Edits API 使用 gpt-image-2-count 时最多只能上传 1 张图片
  • mask 遮罩图片必须与原图尺寸一致,透明区域表示需要编辑的部分

下一步

SuperToken - 让全球顶级 AI 模型触手可达