最近在做一个需要批量生成商品图的项目,踩了不少坑,把方案整理出来分享一下。
为什么选 API 而不是 Web 端
手动用 ChatGPT 或 Gemini 网页版生图,一张张来效率太低。API 的优势:
- 可编程:批量 prompt、自动重试、结果归档
- 可控:指定尺寸、模型版本、输出格式
- 可集成:嵌入现有工作流,比如电商上架、内容生产
基础代码:OpenAI SDK 调用生图
python
import openai
import base64
from pathlib import Path
client = openai.OpenAI(
api_key="your-api-key",
base_url="https://api.openai.com/v1" # 或替换为中转地址
)
def generate_image(prompt, model="dall-e-3", size="1024x1024"):
"""生成单张图片,返回 base64 数据"""
resp = client.images.generate(
model=model,
prompt=prompt,
size=size,
response_format="b64_json"
)
return resp.data[0].b64_json
# 示例
img_data = generate_image("一杯冰美式咖啡,白色背景,商业摄影风格")
Path("output.png").write_bytes(base64.b64decode(img_data))
这是最基础的用法,下面加上批量和容错。
进阶:批量生成 + 自动重试
python
import time
import json
def batch_generate(prompts, output_dir="./images", model="dall-e-3", max_retries=3):
"""批量生图,带重试和进度记录"""
Path(output_dir).mkdir(exist_ok=True)
results = []
for i, prompt in enumerate(prompts):
for attempt in range(max_retries):
try:
print(f"[{i+1}/{len(prompts)}] 生成中... (尝试 {attempt+1})")
img_data = generate_image(prompt, model=model)
filename = f"{output_dir}/img_{i+1:03d}.png"
Path(filename).write_bytes(base64.b64decode(img_data))
results.append({"prompt": prompt, "file": filename, "status": "ok"})
print(f" ✅ 保存到 {filename}")
break
except Exception as e:
print(f" ❌ 失败: {e}")
if attempt < max_retries - 1:
time.sleep(2 ** attempt) # 指数退避
else:
results.append({"prompt": prompt, "file": None, "status": str(e)})
time.sleep(1) # rate limit 友好
# 保存生成记录
Path(f"{output_dir}/manifest.json").write_text(
json.dumps(results, ensure_ascii=False, indent=2)
)
return results
用法:
python
prompts = [
"简约风格的蓝牙耳机,产品展示图,白色背景",
"ins风格的手工蛋糕,暖色调,俯拍角度",
"极简主义办公桌面,科技感,4K渲染风格",
]
batch_generate(prompts, model="dall-e-3")
模型选择建议
实测下来几个生图模型的特点:
| 模型 | 擅长场景 | 短板 | 速度 |
|---|---|---|---|
| DALL·E 3 | 文字渲染、海报 | 写实人像偶尔崩 | 中等 |
| Gemini 3 Pro | 写实风格、多元素场景 | 艺术风格化稍弱 | 快 |
| GPT-5 (图片) | 综合能力强 | 贵 | 中等 |
如果是电商场景,Gemini 3 Pro 性价比最高;需要带文字的海报图,DALL·E 3 更稳。
成本优化的一个思路
直接调官方 API 没问题,但如果量大(比如每天几百张),成本会比较可观。
我后来切到了一个 API 中转平台,接口完全兼容 OpenAI SDK,只需要改 base_url,代码零改动。好处是价格低不少,比如生图单价能到 ¥0.095/张,日常调用的 LLM 也比官方便宜。
感兴趣的可以搜 性价比API(xingjiabiapi.org),我用了几个月了还算稳定。不是广告,纯粹是量大之后成本敏感才去找的替代方案。
小结
- API 生图的核心是
openai.images.generate,SDK 通用 - 批量场景一定要加重试 + 指数退避 + 记录 manifest
- 模型按场景选,别一把梭 DALL·E 3
- 量大考虑中转平台降本
有问题评论区聊 👇