图片生成教程
FoxAPI 支持 gpt-image-2 模型,兼容 OpenAI Images API 格式。
接口地址
POST https://foxapi.chat/v1/images/generations前置条件
- 拥有一个 FoxAPI Key(获取教程)
- Key 分组建议选 codex专用(0.2x 倍率,最便宜)
基本用法
curl
bash
curl https://foxapi.chat/v1/images/generations \
-H "Authorization: Bearer sk-你的Key" \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-image-2",
"prompt": "一只橘猫在阳光下打盹,水彩画风格",
"size": "1024x1024"
}'Python
python
from openai import OpenAI
client = OpenAI(
api_key="sk-你的Key",
base_url="https://foxapi.chat/v1"
)
response = client.images.generate(
model="gpt-image-2",
prompt="一只橘猫在阳光下打盹,水彩画风格",
size="1024x1024"
)
# 返回的是 data URL(base64 内联)
print(response.data[0].url)Node.js
javascript
import OpenAI from 'openai';
const client = new OpenAI({
apiKey: 'sk-你的Key',
baseURL: 'https://foxapi.chat/v1',
});
const response = await client.images.generate({
model: 'gpt-image-2',
prompt: '一只橘猫在阳光下打盹,水彩画风格',
size: '1024x1024',
});
console.log(response.data[0].url);PHP
php
<?php
$ch = curl_init('https://foxapi.chat/v1/images/generations');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => json_encode([
'model' => 'gpt-image-2',
'prompt' => '一只橘猫在阳光下打盹,水彩画风格',
'size' => '1024x1024',
]),
CURLOPT_HTTPHEADER => [
'Authorization: Bearer sk-你的Key',
'Content-Type: application/json',
],
CURLOPT_RETURNTRANSFER => true,
CURLOPT_TIMEOUT => 300,
]);
$response = curl_exec($ch);
curl_close($ch);
$data = json_decode($response, true);
echo $data['data'][0]['url']; // data:image/png;base64,...参数说明
| 参数 | 类型 | 必填 | 默认值 | 说明 |
|---|---|---|---|---|
| model | string | ❌ | gpt-image-2 | 模型名称 |
| prompt | string | ✅ | — | 图片描述,越详细效果越好 |
| n | integer | ❌ | 1 | 生成数量,详见下方说明 |
| size | string | ❌ | 1024x1024 | 尺寸:1024x1024、1024x1536、1536x1024 |
| quality | string | ❌ | standard | 质量:standard 或 hd |
| response_format | string | ❌ | url | 返回格式:url 或 b64_json,详见下方说明 |
返回示例
json
{
"created": 1749000000,
"data": [
{
"url": "data:image/png;base64,iVBORw0KGgo..."
}
]
}⚠️ 重要说明
n 参数(生成数量)
上游限制
上游 API 不支持 n>1,无论传多少都只返回 1 张图片。
需要多张图片时,请发多次请求并行生成:
python
import asyncio
from openai import AsyncOpenAI
async def generate_multiple(prompt, count):
client = AsyncOpenAI(
api_key="sk-你的Key",
base_url="https://foxapi.chat/v1"
)
tasks = [
client.images.generate(model="gpt-image-2", prompt=prompt, size="1024x1024")
for _ in range(count)
]
results = await asyncio.gather(*tasks)
return [r.data[0].url for r in results]
# 生成 4 张图
urls = asyncio.run(generate_multiple("一只橘猫在打盹", 4))php
<?php
// PHP 并行请求示例(curl_multi)
$apiKey = 'sk-你的Key';
$prompt = '一只橘猫在打盹';
$count = 4;
$mh = curl_multi_init();
$chs = [];
for ($i = 0; $i < $count; $i++) {
$ch = curl_init('https://foxapi.chat/v1/images/generations');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => json_encode([
'model' => 'gpt-image-2',
'prompt' => $prompt,
'size' => '1024x1024',
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer $apiKey",
'Content-Type: application/json',
],
CURLOPT_RETURNTRANSFER => true,
CURLOPT_TIMEOUT => 300,
]);
curl_multi_add_handle($mh, $ch);
$chs[] = $ch;
}
// 并行执行
$running = null;
do {
curl_multi_exec($mh, $running);
curl_multi_select($mh);
} while ($running > 0);
// 收集结果
$results = [];
foreach ($chs as $ch) {
$data = json_decode(curl_multi_getcontent($ch), true);
$results[] = $data['data'][0]['url'];
curl_multi_remove_handle($mh, $ch);
curl_close($ch);
}
curl_multi_close($mh);
// $results 包含 4 张图片的 data URL
foreach ($results as $i => $url) {
echo "图片 $i: " . substr($url, 0, 50) . "...\n";
}💡 并行发 4 个请求,总耗时和发 1 个请求差不多(都是 30-90 秒),不会更慢。
response_format(返回格式)
返回格式说明
请求 response_format: "url" 时,返回的 url 字段值是 data URL(data:image/png;base64,...),不是远程图片链接。
这是因为上游 API 返回的就是 base64 编码的图片数据。
如何使用 data URL:
html
<!-- 浏览器直接显示 -->
<img src="data:image/png;base64,iVBORw0KGgo..." />python
import base64
# 从 data URL 保存为文件
data_url = response.data[0].url
header, b64data = data_url.split(',', 1)
with open('output.png', 'wb') as f:
f.write(base64.b64decode(b64data))php
<?php
// PHP 从 data URL 保存为文件
$dataUrl = $data['data'][0]['url'];
$b64data = explode(',', $dataUrl, 2)[1];
file_put_contents('output.png', base64_decode($b64data));如果请求 response_format: "b64_json",返回格式略有不同:
json
{
"data": [
{
"b64_json": "iVBORw0KGgo..."
}
]
}两种格式本质一样,都是 base64,只是 key 名不同。建议直接用默认的 url 格式。
计费说明
gpt-image-2 按次计费,每次消耗约 $0.04(codex专用分组约 $0.014)。
💡 省钱技巧
使用 codex专用 分组的 Key,倍率 0.2x,生图成本最低。
常见问题
提示 "model not found"
检查 Key 分组是否正确。codex专用 和 ChatGPT 分组都可以调用 gpt-image-2。
请求超时 (504)
生图需要 30-90 秒,系统会自动重试。如果多次超时,可能是上游繁忙,稍后再试。
返回空白图片
可能是 prompt 触发了内容安全策略,换一个描述试试。
提示余额不足 (403)
充值 后再试。
n=2 但只返回 1 张
上游限制,不支持 n>1。请发多次请求并行生成。详见上方「n 参数」说明。
url 返回的是 base64 不是链接
这是正常行为。返回的 url 是 data URL 格式(data:image/png;base64,...),可以直接在浏览器 <img> 标签中使用。详见上方「response_format」说明。