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 也比官方便宜。

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

小结

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

有问题评论区聊 👇

相关推荐
AI创界者7 小时前
摆脱云端API限制!Index-Translate 本地化部署整合包与实战:6GB显存畅跑150种语言,支持超长文本、字幕与API调用
人工智能·aigc
Dawson Zhu8 小时前
《Agentic Design Patterns》第 18 章导读:Guardrails 安全模式
人工智能·语言模型·架构·aigc·agi
TomEval10 小时前
【测AI】第11篇:深度学习基础 —— 神经网络是怎么工作的
人工智能·python·深度学习·神经网络·机器学习·aigc
threerocks10 小时前
FDE 已死!从 FDE 到 FDU:重新定义 AI 交付
aigc·openai·ai编程
神奇的代码在哪里11 小时前
Qwen-Image-2.1-Turbo 发布:8 步出图,文生图与图像编辑合二为一
aigc·文生图·通义千问·图像编辑·qwen-image
Dawson Zhu11 小时前
《Agentic Design Patterns》第 17 章导读:推理技术
人工智能·语言模型·架构·aigc·agi
Behavior11 小时前
谷歌 Gemini 4 Argon正式开放:硬刚 GPT-6 与 Claude,这次谁更强?
llm·aigc·gemini
智行合一科技12 小时前
CTR报告:AI营销成广告增长引擎,GEO与AIGC矩阵营销成破局关键
人工智能·矩阵·aigc
for_ever_love__13 小时前
LangChain 模型参数调优:temperature、max_tokens 这些到底怎么设
python·语言模型·langchain·aigc·模型参数·temperature·max_tokens
小虎AI生活13 小时前
老干妈靠AI闷赚54亿,你的AI还在写文案?
aigc·ai编程