好多朋友找到我说,大霖,GPT-Image-2 这个图片生成模型到底怎么调 API?官方文档看得头大,代码跑不通,Key 还申请不下来。行,今天我把这事儿一次性说清楚。
GPT-Image-2 是 OpenAI 2026 年推出的最新图片生成模型,通过兼容 OpenAI 协议的 API 即可调用。整个流程就三步:注册拿 Key、了解接口参数、跑通 Python 代码。我自己实测下来,从注册到第一张图片生成出来,真就 3 分钟。下面是完整的保姆级教程,代码直接复制就能跑。
先说结论
| 项目 | 说明 |
|---|---|
| 模型名称 | gpt-image-2 |
| 调用方式 | OpenAI Images API(/v1/images/generations) |
| 核心参数 | prompt、size、n、quality |
| 返回格式 | Base64 编码或 URL |
| 生成耗时 | 实测 5-15 秒(取决于分辨率和 quality) |
| 失败扣费 | 不扣,生成失败不计费 |
| 并发限制 | 聚合接口无并发限制 |
第一步:注册拿 Key
这步最简单。ofox.ai 是一个 AI 模型聚合平台,一个 API Key 可以调用 GPT-5、Claude Opus 4.6、Gemini 3、GPT-Image-2 等 50+ 模型,支持支付宝/微信付款,按量计费免费版可起步。
操作流程:
- 打开 [ofox.ai](https://ofox.ai?utm_source=csdn&utm_medium=ofoxcoding_article&utm_campaign=seo),支付宝/微信直接注册
- 进入控制台 → API Keys → 创建新 Key
- 复制保存好这个 Key,后面代码里要用
不用折腾信用卡,不用填地址。拿到 Key 就可以开干了。
第二步:接口参数详解
GPT-Image-2 走的是标准的 OpenAI Images API,核心参数就这几个:
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
model | string | 是 | 固定填gpt-image-2 |
prompt | string | 是 | 图片描述,越具体效果越好 |
n | integer | 否 | 生成数量,默认 1,最多 4 |
size | string | 否 | 分辨率:1024x1024(默认)、1536x1024、1024x1536 |
quality | string | 否 | low、medium、high,默认medium |
response_format | string | 否 | url或b64_json,默认url |
几个注意点(我踩过的坑):
prompt写英文效果明显好于中文,中文也能用但偶尔会出现文字渲染错乱size只支持上面三个值,传512x512之类的会直接报错quality设high生成时间会翻倍,但确实细节更好response_format建议用b64_json,URL 方式返回的链接有效期只有 1 小时
第三步:完整可运行的 Python 代码
方案一:同步调用(最简单)
适合生成单张图片,代码最少:
importbase64importosfromopenaiimportOpenAI# 初始化客户端client=OpenAI(api_key="your-ofox-api-key",# 替换成你在 ofox.ai 拿到的 Keybase_url="https://api.ofox.ai/v1")defgenerate_image(prompt:str,size:str="1024x1024",quality:str="medium"):"""同步生成图片,返回本地文件路径"""print(f"正在生成图片:{prompt[:50]}...")response=client.images.generate(model="gpt-image-2",prompt=prompt,n=1,size=size,quality=quality,response_format="b64_json")# 解码 Base64 并保存image_data=base64.b64decode(response.data[0].b64_json)output_path="output.png"withopen(output_path,"wb")asf:f.write(image_data)print(f"图片已保存到:{output_path}")returnoutput_path# 直接运行if__name__=="__main__":generate_image(prompt="A cute robot sitting at a desk writing Python code, digital art style, warm lighting",size="1024x1024",quality="high")跑一下试试,正常情况下 5-10 秒就能在当前目录看到output.png。
方案二:提交 + 轮询(适合批量生成)
说实话方案一够用了,但如果你要批量生成图片,或者想做个异步的图片生成服务,用提交+轮询的方式更靠谱。好处是不会因为网络超时而丢失任务:
importbase64importtimeimportrequestsimportos API_KEY="your-ofox-api-key"# 替换成你的 KeyBASE_URL="https://api.ofox.ai/v1"HEADERS={"Authorization":f"Bearer{API_KEY}","Content-Type":"application/json"}defsubmit_image_task(prompt:str,size:str="1024x1024",quality:str="medium"):"""提交图片生成任务"""payload={"model":"gpt-image-2","prompt":prompt,"n":1,"size":size,"quality":quality,"response_format":"b64_json"}resp=requests.post(f"{BASE_URL}/images/generations",headers=HEADERS,json=payload,timeout=60)ifresp.status_code==200:returnresp.json()else:print(f"提交失败:{resp.status_code}-{resp.text}")returnNonedefpoll_and_save(prompt:str,output_path:str="output.png",max_retries:int=3,size:str="1024x1024",quality:str="medium"):"""带重试的图片生成:提交 + 轮询检查 + 保存"""forattemptinrange(1,max_retries+1):print(f"第{attempt}次尝试生成...")try:result=submit_image_task(prompt,size=size,quality=quality)ifresultand"data"inresultandlen(result["data"])>0:b64_str=result["data"][0].get("b64_json")ifb64_str:image_data=base64.b64decode(b64_str)withopen(output_path,"wb")asf:f.write(image_data)print(f"生成成功!已保存到:{output_path}")returnoutput_path# 如果返回的是 URLurl=result["data"][0].get("url")ifurl:print(f"拿到图片 URL:{url}")img_resp=requests.get(url,timeout=30)withopen(output_path,"wb")asf:f.write(img_resp.content)print(f"生成成功!已保存到:{output_path}")returnoutput_pathprint(f"第{attempt}次未拿到有效结果,等待 3 秒后重试...")time.sleep(3)exceptrequests.exceptions.Timeout:print(f"第{attempt}次请求超时,等待 5 秒后重试...")time.sleep(5)exceptExceptionase:print(f"第{attempt}次出错:{e},等待 3 秒后重试...")time.sleep(3)print("达到最大重试次数,生成失败")returnNonedefbatch_generate(prompts:list,output_dir:str="outputs"):"""批量生成多张图片"""os.makedirs(output_dir,exist_ok=True)results=[]fori,promptinenumerate(prompts):output_path=os.path.join(output_dir,f"image_{i+1}.png")print(f"\n--- 生成第{i+1}/{len(prompts)}张 ---")path=poll_and_save(prompt=prompt,output_path=output_path,max_retries=3,quality="medium")results.append({"prompt":prompt,"path":path,"success":pathisnotNone})# 每张之间歇 1 秒,别太猛ifi<len(prompts)-1:time.sleep(1)# 打印汇总success_count=sum(1forrinresultsifr["success"])print(f"\n=== 批量生成完成:{success_count}/{len(prompts)}成功 ===")returnresults# 运行示例if__name__=="__main__":# 单张生成poll_and_save(prompt="A futuristic city skyline at sunset, cyberpunk style, neon lights reflecting on wet streets",output_path="cyberpunk_city.png",quality="high")# 批量生成prompts=["A minimalist logo design for a tech startup, clean lines, blue and white","An isometric illustration of a cozy home office with plants and a cat","A watercolor painting of a mountain lake at dawn, soft colors",]batch_generate(prompts)这段代码包含了完整的错误处理、超时重试、批量生成逻辑,直接复制到项目里就能用。
踩坑记录
说几个我实际遇到的坑,帮你们省点时间:
坑 1:中文 prompt 里带引号导致 JSON 解析失败
我一开始直接把用户输入的中文丢进去,结果有人输入了带"的内容,requests 序列化没问题但服务端解析炸了。解决方案:用json库自己序列化一遍,或者干脆用 openai SDK(方案一),SDK 内部会处理好。
坑 2:quality=high+1536x1024偶尔超时
高分辨率加高质量的组合,生成时间可能到 20-30 秒。你的timeout设太短就会断掉。建议 timeout 至少设 60 秒,或者用方案二的重试逻辑兜底。
坑 3:URL 返回格式的链接过期
前面提了,response_format="url"返回的链接只有 1 小时有效期。我之前做了个图片生成服务,把 URL 直接存数据库了,结果第二天用户一刷新全是 404。老老实实用b64_json,拿到就存本地或者传 OSS。
坑 4:prompt 太短效果很差
"一只猫"这种 prompt 出来的图基本没法看。GPT-Image-2 吃细节描述,建议至少写 20-30 个词,包含主体、风格、光线、构图这些信息。英文效果好于中文。
小结
整个流程捋一遍:
- 去 ofox.ai 注册拿 Key(1 分钟)
- 搞清楚
prompt、size、quality这几个核心参数(1 分钟) - 把上面的代码复制过去,改一下 Key 和 prompt 就能跑(1 分钟)
生成失败不扣钱,聚合接口也没有并发限制,放心大胆地试。我自己现在做的一个小工具就是用 GPT-Image-2 批量生成产品图,一天跑几百张,稳得很。
想试试的直接去 [ofox.ai](https://ofox.ai?utm_source=csdn&utm_medium=ofoxcoding_article&utm_campaign=seo) 注册个账号,免费额度够你把上面的代码全跑一遍了。