Python + DALL·E / Gemini 批量生图实战:从单张到流水线的完整方案

最近在做一个需要批量生成商品图的项目,踩了不少坑,把方案整理出来分享一下。

为什么选 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 也比官方便宜。

感兴趣的可以搜 性价比APIxingjiabiapi.org),我用了几个月了还算稳定。不是广告,纯粹是量大之后成本敏感才去找的替代方案。

小结

  • API 生图的核心是 openai.images.generate,SDK 通用
  • 批量场景一定要加重试 + 指数退避 + 记录 manifest
  • 模型按场景选,别一把梭 DALL·E 3
  • 量大考虑中转平台降本

有问题评论区聊 👇

相关推荐
imbackneverdie1 天前
本科毕业论文怎么写?需要用到什么工具?
人工智能·考研·aigc·ai写作·学术·毕业论文·ai工具
weixin_446260851 天前
2026年IT技术趋势预测:从AIGC的狂热到Agent生态的底层重塑
人工智能·aigc
程序员老赵1 天前
Docker 部署 Open WebUI + Ollama 完整教程(Windows / Linux 通用)—— 打造自己的本地OpenAI
aigc·openai·ai编程
Hommy881 天前
【开源剪映小助手】调试与故障排除
开源·github·aigc
多恩Stone1 天前
【[特殊字符]工具记录】Cursor + Overleaf:如何将本地 Cursor 和 Overleaf 网页端建立远程连接
aigc
mpp0071 天前
《从需求到上线:CodeWave SpecDriven 模式企业级应用开发全流程指南》
低代码·aigc
小溪彼岸1 天前
初识Spec Kit
aigc
AI专业测评2 天前
DeepSeek R1 + 炼字工坊实战:规避低质判定的终极逻辑
aigc·ai写作
阿钱真强道2 天前
20 ComfyUI 实战:用 ControlNet 实现人物表情编辑,让人物“笑起来”的工作流解析
aigc·stable-diffusion·controlnet·comfyui·softedge·ip-adapter·人物表情编辑
库洛西鲁2 天前
AI Agent 怎么从单体架构演进到多 Agent 协作?3 个阶段的踩坑实录
aigc·ai编程