# 一句提示词,GPT Image 2真把中文图画出来了
最近不少录友问我:GPT Image 2 到底怎么调用?国内能不能直接用 API 生图?
我原来走的是 Responses API + image_generation 工具。能用的时候确实方便,但中间多套了一层文本模型和工具调用,参数也比较绕。接口一调整,最先坏的往往就是这条链路。
后来发现 APIDock (opens new window) 已经直接支持 gpt-image-2。
这次不用让 GPT-5 再去调用生图工具,直接请求图片接口:
POST https://apidock.ai/v1/images/generations
我实际跑了一遍,模型、中文标题、人物场景和右下角水印都正常生成。

上面这张图就是通过 APIDock 的 gpt-image-2 生成的,而且用的是它目前支持的 low 清晰度。
标题“一句提示词,画面就出来了”、对白“这次真跑通了!”、状态“正在生成”和右下角“卡码大模型”,都直接出现在原图里。
所以先说结论:APIDock 当前虽然只支持 low,但做公众号插图、博客配图、文章封面和普通产品示意图,已经够用了。
下面我把完整调用过程写清楚,代码可以直接复制。
# GPT Image 2是什么?和GPT-5.6不是一回事
先别把名字混了。
gpt-image-2 是专门负责图片生成和图片编辑的模型。OpenAI 把它定位为当前主力图像模型,输入可以是文字或图片,输出是图片,还支持局部重绘。
它和 gpt-5.6 这类文本、推理模型不是一回事:
| 模型 | 主要工作 | 这篇文章是否使用 |
|---|---|---|
gpt-image-2 | 直接生成或编辑图片 | 使用 |
gpt-5.6 | 文本生成、推理、编程,也可以调用生图工具 | 不需要 |
OpenAI 官方提供两种生图路线:
- Image API:直接让
gpt-image-2根据一段提示词生成图片 - Responses API:让 GPT-5.6 等主模型在对话中调用
image_generation工具
如果你的目标就是“一段提示词生成一张图”,Image API 更直接,少一层工具调用,也更容易排查问题。OpenAI 官方图像生成文档 (opens new window)也是这么建议的。
这篇文章走的就是第一条。
# 为什么我用APIDock调用GPT Image 2?
如果你已经有 OpenAI 官方 API Key、付款和网络都正常,当然可以直接调用官方接口。
但很多国内录友真正卡住的不是代码,而是这些事:
- 没有合适的海外付款方式
- 官方 API 网络不稳定
- 不想继续折腾 OpenAI 账号
- 只是偶尔给文章和项目生成几张图
- 希望后台能直接看到调用记录和余额变化
我现在用的是 APIDock (opens new window)。注册后创建一个独立 Token,把官方地址换成 APIDock 的地址,模型名仍然填写 gpt-image-2。
整个调用只需要三项配置:
API Base URL:https://apidock.ai/v1
API Token:在APIDock后台创建
模型名:gpt-image-2
2
3
这里不需要 ChatGPT Plus,也不需要把 ChatGPT 密码、邮箱验证码或 Cookie 交给平台。
Token 就是余额钥匙。不要截图发群,不要写进公开仓库。
# 第一步:在APIDock创建Token
先打开 APIDock官网 (opens new window) 注册账号,然后进入后台创建一个新的 Token。
建议单独建一个生图 Token,不要和 Claude Code、Codex 或其他项目共用。这样有三个好处:
- 调用记录更容易核对
- 可以单独控制额度
- 不小心泄露时,只需要删除这一枚 Token
拿到 Token 后,在终端设置两个环境变量:
export OPENAI_API_KEY="替换成你的APIDock Token"
export OPENAI_BASE_URL="https://apidock.ai/v1"
2
不要把真实 Token 直接写进准备提交 Git 的代码文件。
# 第二步:先确认账号能看到gpt-image-2
可以先请求模型列表:
curl -sS "${OPENAI_BASE_URL}/models" \
-H "Authorization: Bearer ${OPENAI_API_KEY}" \
| jq -r '.data[] | select(.id == "gpt-image-2") | .id'
2
3
正常会输出:
gpt-image-2
如果没有任何输出,先别急着生成。检查 Base URL、Token,以及 APIDock 后台当前是否给你的账号开放了这个模型。
# 第三步:用curl生成第一张图
最小请求如下:
curl -sS "${OPENAI_BASE_URL}/images/generations" \
-H "Authorization: Bearer ${OPENAI_API_KEY}" \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-image-2",
"prompt": "画一张温馨的手绘卡通图:一位程序员和友善的AI机器人击掌庆祝,浅灰白背景,柔和马卡龙色,画面上方写中文标题:生图接口已跑通",
"size": "1536x1024",
"quality": "low",
"output_format": "png"
}' \
| jq -r '.data[0].b64_json' \
| base64 --decode > gpt-image-2-demo.png
2
3
4
5
6
7
8
9
10
11
12
macOS 自带的 base64 如果不支持 --decode,把最后一行改成:
| base64 -D > gpt-image-2-demo.png
这里最关键的是四个参数:
{
"model": "gpt-image-2",
"size": "1536x1024",
"quality": "low",
"output_format": "png"
}
2
3
4
5
6
尤其是 quality。APIDock 当前只支持 low,不要照搬官方示例改成 medium 或 high。
# Node.js完整代码:直接保存PNG,不打印base64
curl 适合验证接口。真正接进项目,我更建议用下面这段 Node.js:
import fs from "node:fs";
const apiKey = process.env.OPENAI_API_KEY;
const baseUrl = process.env.OPENAI_BASE_URL || "https://apidock.ai/v1";
if (!apiKey) {
throw new Error("缺少 OPENAI_API_KEY");
}
const response = await fetch(`${baseUrl}/images/generations`, {
method: "POST",
headers: {
Authorization: `Bearer ${apiKey}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
model: "gpt-image-2",
prompt: `
画一张手绘卡通风格插画:柔和暖色调、扁平手绘、线条圆润可爱。
场景:年轻程序员把提示词交给友善的圆脑袋AI机器人,机器人正在画画。
构图:横版,上方留出标题区,人物和画架位于中央安全区域。
必须出现的文字:标题“生图接口已跑通”,右下角水印“卡码大模型”。
要求:中文逐字呈现,不增字、不漏字、不生成乱码。
禁止:不要3D,不要写实,不要其他品牌或水印。
`.trim(),
size: "1536x1024",
quality: "low",
output_format: "png",
}),
signal: AbortSignal.timeout(300_000),
});
const result = await response.json();
if (!response.ok) {
throw new Error(`生图失败(${response.status}):${JSON.stringify(result.error)}`);
}
const imageBase64 = result.data?.[0]?.b64_json;
if (!imageBase64) {
throw new Error("响应中没有 data[0].b64_json");
}
fs.writeFileSync(
"gpt-image-2-demo.png",
Buffer.from(imageBase64, "base64"),
);
console.log("图片已保存:gpt-image-2-demo.png");
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
保存为 generate-image.mjs,然后执行:
node generate-image.mjs
这段代码不会把 base64 打到终端,只会把它解码成 PNG 文件。生产环境也应该这样做,否则一张图就可能塞满整页日志。
# GPT Image 2可以生成多大的图?
这是大家最关心的问题。
按照 OpenAI 当前 API 参考 (opens new window),gpt-image-2 已经不只支持三种固定尺寸,还支持自定义 WIDTHxHEIGHT。
但自定义尺寸有四条规则:
- 宽和高都必须是 16 的倍数
- 宽高比必须在 1:3 到 3:1 之间
- 高于 2560×1440 属于实验范围
- 当前最高支持 3840×2160
常见尺寸可以这样选:
| 用途 | 建议尺寸 | 比例 | 说明 |
|---|---|---|---|
| 头像、图标、方形配图 | 1024x1024 | 1:1 | 最稳妥,构图简单 |
| 文章横图、博客配图 | 1536x1024 | 3:2 | 本文通过APIDock实测成功 |
| 竖版海报、人物全身图 | 1024x1536 | 2:3 | 适合手机阅读 |
| 视频封面、宽屏头图 | 1536x864 | 16:9 | 官方尺寸规则允许,适合严格宽屏 |
| 2K宽屏图 | 2560x1440 | 16:9 | 细节更多,文件也更大 |
| 4K宽屏图 | 3840x2160 | 16:9 | 官方最高上限,属于实验尺寸范围 |
这里要说清两个边界。
第一,最高支持 4K,不等于每张图都应该生成 4K。 尺寸越大,等待时间、输出量和文件体积通常也会增加。
第二,4K 是 gpt-image-2 的官方模型能力。中转线路可能根据当前服务情况限制部分实验尺寸。APIDock 这边我已经实测 1536x1024 可以稳定生成;第一次调用建议先用这个尺寸跑通,再测试自定义 16:9 或 4K。
# low、medium、high到底差在哪?
OpenAI 官方的 gpt-image-2 定义了四种质量设置:
auto:模型自动选择low:速度和成本优先medium:细节和成本折中high:细节优先
但这说的是官方模型能力。
APIDock 当前只支持 low。 通过 APIDock 调用时,直接固定:
"quality": "low"
别担心,low 不是“只能生成糊图”。
图片尺寸和渲染质量是两个不同参数:
size决定输出图片有多少像素quality更影响细节密度、纹理、文字和复杂场景的表现
我前面展示的卡通图,就是 1536x1024 + low 生成的。中文标题、短对白、人物表情和场景道具都够清楚,压缩到网页尺寸后照样能看。
对这些场景,low 已经够用:
- 公众号和博客文章配图
- 知识类卡通插画
- 社交媒体配图
- 产品原型占位图
- 简单封面和海报草稿
- 批量生成视觉方案
如果你的目标是超精细商品图、密集信息图、很小的文字、需要放大打印的大海报,low 就不一定够。当前 APIDock 线路不适合硬做这种任务,别通过后期放大假装细节真的存在。
# PNG、JPEG、WebP怎么选?
GPT Image API 支持 png、jpeg 和 webp。不过通过 APIDock 第一次跑,建议直接选 PNG:
"output_format": "png"
原因很简单:兼容性最好,文字边缘也更稳,排查 base64 解码时最省事。
| 格式 | 适合场景 | 特点 |
|---|---|---|
| PNG | 插画、带文字图片、需要后期处理 | 清晰、无损,文件较大 |
| JPEG | 写实照片、对体积敏感 | 文件小,但文字边缘可能有压缩痕迹 |
| WebP | 网页展示 | 体积通常更小,现代浏览器兼容良好 |
JPEG 和 WebP 还可以配合 output_compression 控制压缩程度。PNG 不使用这个参数。
另外,gpt-image-2 当前不支持透明背景。需要透明素材时,先生成纯色背景,再用抠图工具后处理,不要直接传 background: "transparent" 后疑惑为什么报错。
# 怎么让GPT Image 2把中文写对?
这次让我最意外的是中文。
以前不少生图模型画面没问题,一写汉字就变成乱码。GPT Image 2 已经好很多,但提示词仍然不能只写一句“帮我加个中文标题”。
我的做法是把文字单独列出来:
【必须出现的文字】
标题:“一句提示词,画面就出来了”
程序员对白:“这次真跑通了!”
状态标签:“正在生成”
水印:“卡码大模型”
要求:以上中文逐字呈现,不增字、不漏字、不改字,不生成其他乱码文字。
2
3
4
5
6
再补三条约束:
- 明确每段文字放在哪里
- 一张图不要塞十几段文字
- 标题、对白和水印都用引号标出原文
OpenAI 的 GPT Image 提示词指南 (opens new window) 也建议把需要逐字出现的文字明确引用,并说明字体、大小、颜色和位置。
不要把一张技术文档硬塞进生图模型。 图里放一句标题、两三个短标签就够了,详细解释放回文章正文。
# 为什么返回的是base64,不是图片链接?
调用成功后,你会拿到类似这样的 JSON:
{
"data": [
{
"b64_json": "很长的一段base64数据"
}
]
}
2
3
4
5
6
7
这不是报错。
GPT Image 模型返回的就是 base64 图片数据。程序要做的是:
读取 data[0].b64_json
↓
base64 解码
↓
写入 PNG 文件
2
3
4
5
不要把它直接复制到 Markdown,也不要整段写进数据库日志。需要在线图片地址,就先保存文件,再上传到自己的对象存储或图床。
# 常见报错怎么处理?
# 401:Token不对
检查:
OPENAI_API_KEY是否真的加载- Token 前后有没有空格
- 有没有误用 OpenAI 官方 Key
- APIDock 后台的 Token 是否已被删除
# 404:接口地址或模型名写错
正确地址:
https://apidock.ai/v1/images/generations
正确模型名:
gpt-image-2
不要把模型名写成 gpt-image2、gpt-image-2.0,也不要继续调用旧的 /responses 工具链路。
# 400:quality参数不支持
如果你通过 APIDock 调用时写了:
"quality": "high"
改回:
"quality": "low"
APIDock 当前只支持 low,这不是你的提示词问题。
# 成功了,却找不到图片URL
去读:
result.data[0].b64_json
然后 base64 解码落盘。不要读取 data[0].url。
# 图片文字偶尔写错
别把完整提示词推翻重写,只针对文字重试:
保持人物、画风、构图和配色不变。
只修正标题为:“生图接口已跑通”。
要求逐字正确,不添加其他文字。
2
3
如果连续两次仍然写错,就让模型预留干净标题区,后期用可靠中文字体贴字。生图模型进步很快,但生产流程不能全靠运气。
# 使用APIDock前,我建议先小额跑通
任何 API 中转站都不要一上来放大量余额。
我的建议很简单:
- 打开 APIDock (opens new window) 注册
- 创建一枚只用于生图的 Token
- 先请求
/models,确认能看到gpt-image-2 - 用
1024x1024或1536x1024、quality: "low"生成一张图 - 回后台核对调用记录和实际扣费
- 确认没问题,再接进自己的脚本或内容工作流
具体价格、赠送额度和实验尺寸支持都可能调整,以 APIDock 后台当前显示为准。
别只看“模型列表里有”就开始批量跑。能生成、能落盘、账能对上,这才叫真正跑通。
# 最后
GPT Image 2 的调用没有想象中复杂。
记住四个东西就行:
接口:/v1/images/generations
模型:gpt-image-2
清晰度:low
结果:data[0].b64_json
2
3
4
国内不想折腾 OpenAI 官方账号、海外付款和网络,可以用 APIDock (opens new window) 建一枚 Token,先生成一张 1536x1024 的图试试。
一句提示词,画面真就出来了。
评论
验证登录状态...