01准备密钥与模型
从控制台复制支持图片模型的 API Key。示例使用 gpt-image-2.5-flare,可按分组实际支持情况替换为 gpt-image-2.5-sunburst 或其他图片模型。
- 生成图片
POST https://mid-route.site/v1/images/generations- 编辑图片
POST https://mid-route.site/v1/images/edits- 认证请求头
Authorization: Bearer YOUR_API_KEY
接口名称是 generations 和 edits(均为复数),不是 generate 或 edit。
export MID_ROUTE_API_KEY="YOUR_API_KEY"$env:MID_ROUTE_API_KEY="YOUR_API_KEY"02文字生成图片
新建 UTF-8 编码的 generate.json 文件,复制以下内容。prompt 是图片描述,n: 1 表示生成一张,stream: false 表示等待完整 JSON 响应。
{
"model": "gpt-image-2.5-flare",
"prompt": "一只橘猫坐在窗边,温暖的自然光,写实摄影风格",
"n": 1,
"stream": false,
"response_format": "b64_json"
}在该文件所在目录运行对应命令,响应保存到 generated-response.json。
curl --fail-with-body --max-time 600 "https://mid-route.site/v1/images/generations" -H "Authorization: Bearer $MID_ROUTE_API_KEY" -H "Content-Type: application/json" --data-binary "@generate.json" -o generated-response.jsoncurl.exe --fail-with-body --max-time 600 "https://mid-route.site/v1/images/generations" -H "Authorization: Bearer $env:MID_ROUTE_API_KEY" -H "Content-Type: application/json" --data-binary "@generate.json" -o generated-response.json本示例不指定尺寸,使用上游默认值。需要指定时,可在 JSON 中添加 size;支持的尺寸以所选模型和渠道为准。
03上传图片并编辑
将源图片放到当前目录,命名为 input.png。编辑接口使用 multipart/form-data 上传:image 是源文件,prompt 描述要怎样修改。
curl --fail-with-body --max-time 600 "https://mid-route.site/v1/images/edits" -H "Authorization: Bearer $MID_ROUTE_API_KEY" -F "model=gpt-image-2.5-flare" -F "prompt=保留主体,将背景改成蓝色天空与白云" -F "image=@input.png" -F "n=1" -F "stream=false" -F "response_format=b64_json" -o edited-response.jsoncurl.exe --fail-with-body --max-time 600 "https://mid-route.site/v1/images/edits" -H "Authorization: Bearer $env:MID_ROUTE_API_KEY" -F "model=gpt-image-2.5-flare" -F "prompt=保留主体,将背景改成蓝色天空与白云" -F "image=@input.png" -F "n=1" -F "stream=false" -F "response_format=b64_json" -o edited-response.jsonContent-Type,curl 会自动生成包含 boundary 的正确请求头。@input.png 表示读取本地文件,不是发送文件名字符串。如需多图输入,可按渠道能力改用重复的 -F "image[]=@input.png" 字段;不是所有模型或渠道都支持多图或遮罩。本页先演示单图编辑。
04把 Base64 保存成图片
成功响应的图片内容位于 data[0].b64_json。下面是结构示意,省略的 Base64 不能直接解码:
{
"created": 1789128000,
"data": [
{
"b64_json": "这里是完整的图片 Base64 字符串"
}
]
}mid-route 当前对 API Key 账号转发的 gpt-image-2.5 系列强制设置 response_format=b64_json;即使客户端传 url,也会被覆盖。其他模型不要假设使用相同覆盖规则。
将下面代码保存为 save-image.py(需要 Python 3)。它会检查响应是否有图片,并根据 PNG / JPEG / WebP 文件头选择扩展名。
import base64
import json
import sys
from pathlib import Path
response = json.loads(Path(sys.argv[1]).read_text(encoding="utf-8-sig"))
if response.get("error"):
raise SystemExit("请求失败:" + str(response["error"]))
items = response.get("data") or []
if not items:
raise SystemExit("响应中没有图片,请查看原始 JSON。")
for i, item in enumerate(items, 1):
if not item.get("b64_json"):
raise SystemExit("响应没有 b64_json,请检查模型和返回格式。")
image = base64.b64decode(item["b64_json"], validate=True)
extension = "bin"
if image.startswith(b"\x89PNG\r\n\x1a\n"):
extension = "png"
elif image.startswith(b"\xff\xd8\xff"):
extension = "jpg"
elif image[:4] == b"RIFF" and image[8:12] == b"WEBP":
extension = "webp"
output = Path(sys.argv[1]).with_name(f"{Path(sys.argv[1]).stem}-{i}.{extension}")
if output.exists():
raise SystemExit(f"{output} 已存在,请先重命名文件。")
output.write_bytes(image)
print(output)
python3 save-image.py generated-response.json
# 编辑结果则使用:
python3 save-image.py edited-response.jsonpy -3 save-image.py generated-response.json
# 编辑结果则使用:
py -3 save-image.py edited-response.json请求返回错误时,响应文件可能包含错误 JSON,而不是图片。请先检查 HTTP 状态和文件内容。
05常见问题
提示 401,应该检查哪里?
确认使用的是 mid-route 控制台创建的完整 API Key。登录密码、其他平台的 Key 都不能替代它。
提示 503 或模型不可用?
检查 Key 所属分组是否支持该模型,以及是否存在可调度账号。相同域名下,不同分组的模型和渠道可能不同。可到API 密钥核对分组。
如何确认请求走了 mid-route?
发送一条简短消息后,到用量记录核对模型和时间。只查询模型列表不等于完成了一次模型调用。
curl 提示无法读取 input.png?
确认终端工作目录中存在该文件,或把 @input.png 改成真实的完整路径。路径含空格时保留引号。
生图等待很久,能反复重试吗?
生图比文字响应慢。客户端超时不等于上游已取消,先查看控制台用量和请求状态,再决定是否重试,避免重复生成与扣费。
404 / 400 应该检查什么?
404 先核对完整路径;400 则检查模型、参数、图片文件和上游错误说明。不要把文字模型填进图片接口。
客户端版本会影响菜单和配置项,请以当前版本及控制台生成的配置为准。