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

有问题评论区聊 👇

相关推荐
软希网分享源码3 小时前
AIGC自动化编程实战(Python、Java、JavaScript和VBA) -2.9G课程
python·自动化·aigc
有点心急10213 小时前
SQL 执行 MCP 工具开发(一)
人工智能·python·aigc
小程故事多_805 小时前
破局 LLM 黑盒困局,Phoenix 凭全链路可观测,重构大模型应用工程化落地规则
java·前端·人工智能·重构·aigc
冬奇Lab17 小时前
一天一个开源项目(第30篇):banana-slides - 基于 nano banana pro 的原生 AI PPT 生成应用
人工智能·开源·aigc
win4r19 小时前
🚀OpenClaw高级进阶技巧分享!模型精选策略+记忆系统优化经验+深度搜索集成+Gateway崩溃自动修复!Claude Code自动读日志修Bug重启验证
aigc·openai·ai编程
智算菩萨21 小时前
交错多模态内容生成:从“单张图“到“图文混排长文“的创作范式变革
人工智能·算法·aigc
用户51914958484521 小时前
CitrixBleed 2 内存泄漏漏洞利用框架 (CVE-2025-5777)
人工智能·aigc
SmartBrain21 小时前
FastAPI实战(第三部分):浏览历史的接口开发详解
数据库·人工智能·aigc·fastapi
万里鹏程转瞬至1 天前
论文阅读 | SLA:sparse–linear attion视频生成95%稀疏度FLOPs降低20倍
论文阅读·深度学习·aigc