跳到主要内容

GPT-Image-2 图片生成

通过Constreet,你可以使用 OpenAI 原生 Images API 调用 gpt-image-2 生成图片。

这个接口适合:

  • 需要直接文生图的项目
  • 已经兼容 OpenAI Images API 的应用
  • 需要更高分辨率与更稳定文字渲染的场景

接口地址

https://api.constreet.cc/v1

认证方式

在请求头中添加 API 密钥:

Authorization: Bearer YOUR_API_KEY

Generations API

接口说明

用于根据提示词直接生成图片。

请求地址

POST /v1/images/generations

请求示例

curl https://api.constreet.cc/v1/images/generations \
-H "Content-Type: application/json" \
-H "Authorization: Bearer YOUR_API_KEY" \
-d '{
"model": "gpt-image-2",
"prompt": "生成一个Constreet中转站的Logo",
"size": "1536x1024",
"quality": "high",
"n": 1
}'

请求参数

可用参数会随模型版本更新。请以本页请求示例为基础,并在调用前通过 API 概览 确认模型可用性。

图片编辑 / 图生图:/v1/images/edits

/v1/images/edits 使用 multipart/form-data 上传图片。image 是二进制图片文件,prompt 写清楚希望怎么修改图片。

请求示例

curl https://api.constreet.cc/v1/images/edits \
-H "Authorization: Bearer YOUR_API_KEY" \
-F 'model=gpt-image-2' \
-F 'prompt=保留图片的整体构图,把色调改成暖黄色调' \
-F 'image[]=@/path/to/your-image.jpg' \
-F 'size=1536x1024' \
-F 'quality=high' \
-F 'n=1'

请求参数

编辑接口的字段与文件限制请以实际返回的错误信息为准;遇到问题请查看 疑难杂症排查指南

注意事项

  1. 图生图比文生图耗时更长(高清 + mask 场景尤甚),建议请求超时设置为 600 秒(10 分钟)
  2. 如果经过代理,注意代理可能会在 60 秒左右断开长连接,建议将 api.constreet.cc 加入代理直连白名单
  3. 响应结构与文生图一致,返回 b64_json

价格说明

1k/2k/4k统一0.2元一张

接口返回 OpenAI Images API 风格响应:

  • b64_json:直接返回 base64 图片数据
{
"created": 1713772800,
"data": [
{
"b64_json": "iVBORw0KGgoAAAANSUhEUgAA..."
}
]
}

支持的尺寸

支持的尺寸和质量选项会随模型版本更新;请以接口实际响应为准。

代码示例

Python(urllib)

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

API_KEY = os.environ.get("FLASH_API_KEY", "YOUR_API_KEY")
API_URL = "https://api.constreet.cc/v1/images/generations"
PROMPT = "生成一个Constreet AI中转站的 Logo 图片"
MODEL = "gpt-image-2"
SIZE = "auto"
QUALITY = "medium"
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("b64_json"):
img_bytes = base64.b64decode(data_entry["b64_json"])
with open(filename, "wb") as f:
f.write(img_bytes)
print(f"[{index + 1}] 已保存到:{filename}")
return filename
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


def main():
try:
result = generate_image(PROMPT, SIZE, QUALITY, N)
except urllib.error.HTTPError as e:
body = e.read().decode("utf-8")
print(f"[HTTP 错误] {e.code} {e.reason}")
print(body)
return
except urllib.error.URLError as e:
print(f"[网络错误] {e.reason}")
return
data_list = result.get("data", [])
for i, entry in enumerate(data_list):
save_image(entry, i)


if __name__ == "__main__":
main()

注意事项

  • 图片生成接口不是聊天接口,不要调用 /v1/chat/completions
  • 建议把请求超时设置为 600 秒,避免高分辨率生成时超时。
  • quality 越高,耗时和费用通常越高;测试时建议先用 lowmedium
  • 当你不确定画幅时,可以先使用 auto,再按需要切换到固定尺寸。

下一步