GPT-Image-2 图片生成
通过 SuperToken,你可以使用 GPT-Image-2 生成和编辑图片。SuperToken 提供两种调用方式,使用相同的 Images API 路径,主要区别在 model、底层通道、参数支持和计费方式。
先选模型
| 模型 | 底层通道 | 计费方式 | 参数支持 | 适合场景 |
|---|---|---|---|---|
gpt-image-2-count | GPT 内置生图工具 | 按调用次数计费 | 支持常用参数,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 的应用
- 需要在低成本单张出图和官方完整参数之间切换的项目
接口地址
https://api.supertoken.cc/image-wrapper/v1/images认证方式
在请求头中添加 API 密钥:
Authorization: Bearer YOUR_API_KEYGenerations API
接口说明
用于根据提示词直接生成图片。下面示例默认使用低成本的 gpt-image-2-count;如果需要官方 Images API 参数,把 model 改成 gpt-image-2,并按官方参数传入即可。
请求地址
POST /image-wrapper/v1/images/generations请求示例
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"
}'请求参数
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| model | string | 是 | 可选 gpt-image-2-count 或 gpt-image-2 |
| prompt | string | 是 | 绘图提示词 |
| size | string | 否 | gpt-image-2-count 支持 1024x1024、1024x1536、1536x1024、2048x2048、3840x2160、auto;gpt-image-2 按官方 Images API 支持范围传入 |
| quality | string | 否 | gpt-image-2-count 支持 low、medium、high、auto;gpt-image-2 按官方 Images API 支持范围传入 |
| n | integer | 否 | 生成张数。gpt-image-2-count 只能为 1;gpt-image-2 按官方 Images API 支持范围传入 |
| 其他官方参数 | mixed | 否 | 仅 gpt-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 并传入会改变响应形式的官方参数,请以实际响应为准。
{
"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 支持范围传入。
请求地址
POST /image-wrapper/v1/images/edits请求参数
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| model | string | 是 | 可选 gpt-image-2-count 或 gpt-image-2 |
| image | file | 是 | 需要编辑的原始图片。gpt-image-2-count 最多 1 张;gpt-image-2 按官方 Images API 支持范围传入 |
| prompt | string | 是 | 描述期望编辑效果的提示词 |
| mask | file | 否 | 遮罩图片,透明区域表示需要编辑的部分 |
| size | string | 否 | gpt-image-2-count 支持 1024x1024、1024x1536、1536x1024、2048x2048、3840x2160、auto;gpt-image-2 按官方 Images API 支持范围传入 |
| quality | string | 否 | gpt-image-2-count 支持 low、medium、high、auto;gpt-image-2 按官方 Images API 支持范围传入 |
| n | integer | 否 | 生成张数。gpt-image-2-count 只能为 1;gpt-image-2 按官方 Images API 支持范围传入 |
| 其他官方参数 | mixed | 否 | 仅 gpt-image-2 支持。需要完整官方参数时,请使用 gpt-image-2 |
整图编辑示例
根据提示词对整张图片进行编辑:
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 NoneMask 局部编辑示例
使用遮罩图片指定编辑区域,只修改透明区域对应的部分:
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:
{
"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 | 高分辨率正方形 |
| 3840x2160 | 4K 横图 |
| auto | 自动选择合适尺寸 |
使用 gpt-image-2 时,尺寸参数按官方 Images API 支持范围传入。
代码示例
Python(urllib)
下面示例使用 gpt-image-2-count。如果需要官方 Images API 参数,可以把 MODEL 改成 gpt-image-2,并在请求中加入对应参数。
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只能为1gpt-image-2-count不支持官方 Images API 的全部参数;需要完整官方参数时使用gpt-image-2gpt-image-2按 token 用量计费,费用不等同于gpt-image-2-count的单张价格表- 建议把请求超时设置为 300 秒,避免高分辨率生成时超时
quality越高,耗时和费用通常越高,测试时建议先用low或medium- 当你不确定画幅时,可以先使用
auto,再按需要切换到固定尺寸 - 图片编辑接口
Edits API使用gpt-image-2-count时最多只能上传 1 张图片 mask遮罩图片必须与原图尺寸一致,透明区域表示需要编辑的部分