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
  • 量大考虑中转平台降本

有问题评论区聊 👇

相关推荐
是Yu欸10 小时前
AI跨模态鉴伪技术实测
人工智能·安全·ai作画·aigc·合合信息·ai-native·waic
春风野草11 小时前
AI Agent 长任务实战:取消、重试、中断恢复,不是加几个按钮这么简单
aigc·ai编程
刘棕霆11 小时前
造数脚本越堆越乱:稳定的沉淀成引擎,变化的留在配置
aigc·agent·测试
网易云信11 小时前
网易智企亮相 2026 世界人工智能大会:一站式企业 AI 应用覆盖三大企业现场
人工智能·aigc·线下活动
todoitbo13 小时前
Claude Code 接蓝耘实测:选第三方 API 的三条铁律
人工智能·ai·aigc·claude
豌豆学姐13 小时前
likeadmin-api 视频生成工作流实战:Seedance 2.0 接口从素材到任务查询
aigc·音视频·api·视频生成·likeadmin-api
ServBay1 天前
AI Gateway 指南,如何用统一网关管理多模型 API
aigc·api·ai编程
大海变好AI1 天前
AIGC分层推理落地能否串联多工具完成自动化闭环
人工智能·python·自动化·aigc
我要割麦子1 天前
从零到一手撸 Agent 系列 — 第 3 篇:Agent 的"心跳" — 主循环与 System Prompt
aigc·agent
三声三视1 天前
交互式用够了?用 Agent SDK 把 Claude 塞进 Python Web 服务
人工智能·python·ai·aigc·ai编程