图片接口(Images API)
187API 支持 OpenAI 兼容的 Images API,用于文本生成图片与参考图编辑。
接口一览
| 用途 | 方法 | 路径 |
|---|---|---|
| 文本生成图片 | POST | /v1/images/generations |
| 参考图编辑 | POST | /v1/images/edits |
| 图片变体 | — | 未实现,调用会返回明确错误 |
Base URL:https://187api.com/v1
鉴权:Authorization: Bearer <API_KEY>
文本生成图片
请求参数
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
model | string | 是 | 图片模型名,以 模型广场 为准 |
prompt | string | 是 | 提示词 |
n | int | 否 | 生成数量,1–128,默认 1 |
size | string | 否 | 尺寸,如 1024x1024 |
quality | string | 否 | 质量,如 high / medium |
response_format | string | 否 | url(默认)或 b64_json |
background | string | 否 | 背景透明等 |
output_format | string | 否 | 输出图片格式 |
stream | bool | 否 | 流式返回部分图片 |
cURL
curl https://187api.com/v1/images/generations \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "<图片模型名>",
"prompt": "一张简洁的商业产品图,浅灰背景中摆放一只银白色无线耳机充电盒,光线柔和,细节清晰。",
"size": "1024x1024",
"quality": "medium",
"response_format": "url"
}'
Python
import requests
resp = requests.post(
"https://187api.com/v1/images/generations",
headers={
"Authorization": f"Bearer {API_KEY}",
"Content-Type": "application/json",
},
json={
"model": "<图片模型名>",
"prompt": "一张简洁的商业产品图,浅灰背景中摆放一只银白色无线耳机充电盒。",
"size": "1024x1024",
"quality": "medium",
"response_format": "url",
},
timeout=120,
)
resp.raise_for_status()
print(resp.json()["data"][0]["url"])
TypeScript
import OpenAI from "openai";
const client = new OpenAI({
apiKey: process.env.API_KEY,
baseURL: "https://187api.com/v1",
});
const result = await client.images.generate({
model: "<图片模型名>",
prompt: "一张简洁的商业产品图,浅灰背景中摆放一只银白色无线耳机充电盒。",
size: "1024x1024",
quality: "medium",
response_format: "url",
});
console.log(result.data[0].url);
响应
{
"created": 1784867600,
"data": [
{ "url": "https://cdn.example.com/....png" }
],
"quality": "medium",
"size": "1024x1024",
"usage": {
"input_tokens": 30,
"output_tokens": 765,
"total_tokens": 795,
"input_tokens_details": { "text_tokens": 30, "image_tokens": 0 },
"output_tokens_details": { "text_tokens": 0, "image_tokens": 765 }
}
}
提示
图片地址在 data[0].url,每次请求都会变化。请直接读返回字段,不要拼接示例地址。
参考图编辑
POST /v1/images/edits,multipart 表单提交。
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
model | string | 是 | 图片模型名 |
prompt | string | 是 | 编辑指令 |
image | file / array | 是 | 参考图,支持多张 |
mask | file | 否 | 遮罩图 |
n | int | 否 | 生成数量 |
size | string | 否 | 尺寸 |
quality | string | 否 | 质量 |
input_fidelity | string | 否 | 输入保真度 |
curl https://187api.com/v1/images/edits \
-H "Authorization: Bearer $API_KEY" \
-F "model=<图片模型名>" \
-F "prompt=把产品放到办公桌场景中,保留真实阴影和透视关系" \
-F "quality=high"
Gemini 原生生图
需要精确控制宽高比与分辨率时,用 Gemini 原生协议:
POST /v1beta/models/{model}:generateContent
curl https://187api.com/v1beta/models/<图片模型>:generateContent \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-d '{
"contents": [{"role": "user", "parts": [{"text": "生成一座漂浮在云海上的天文研究岛微缩模型"}]}],
"generationConfig": {
"responseModalities": ["TEXT", "IMAGE"],
"imageConfig": {"aspectRatio": "16:9", "imageSize": "1K"}
}
}'
图片以 base64 返回在 candidates[0].content.parts[].inlineData:
import base64
from pathlib import Path
import requests
resp = requests.post(
"https://187api.com/v1beta/models/<图片模型>:generateContent",
headers={"Authorization": f"Bearer {API_KEY}", "Content-Type": "application/json"},
json={
"contents": [{"role": "user", "parts": [{"text": "生成一座漂浮在云海上的天文研究岛微缩模型"}]}],
"generationConfig": {
"responseModalities": ["TEXT", "IMAGE"],
"imageConfig": {"aspectRatio": "16:9", "imageSize": "1K"},
},
},
timeout=300,
)
resp.raise_for_status()
parts = resp.json()["candidates"][0]["content"]["parts"]
image = next(p["inlineData"] for p in parts if "inlineData" in p)
Path("generated.jpg").write_bytes(base64.b64decode(image["data"]))
大图与超时
高分辨率(如 4K)图片生成耗时长,客户端超时至少设到 1800 秒,并使用支持长连接的地址。
requests.post(..., timeout=1800)
计费
按 model 计费,即「请求并计费模型」。n 超过 1 时按实际张数计。
排错
| 现象 | 原因 | 处理 |
|---|---|---|
| 403 | 令牌分组不含该模型 | 到模型广场确认分组,换令牌 |
model_not_found | 模型名不在分组内 | 用模型广场里的准确名字 |
400 n must be an integer between 1 and 128 | n 越界 | 调整 n |
| 拿不到图片 | 用 url 解析却返回了 b64_json | 按 response_format 解析 |