一晚上、200张图、花了不到50块——我帮朋友的淘宝店做了件美工要3000的事
一晚上、200张图、花了不到50块——我帮朋友的淘宝店做了件美工要3000的事
上周五晚上九点,我收到朋友小陈的微信:
"哥们救我,我淘宝店200个商品没主图,后天要参加平台活动,现在上架就被降权,找美工报价3000还要等两周,我TM完了。"
我盯着屏幕想了大概三秒钟。
本来想说"没办法",但脑子里突然想起上周刚配好的Gemini Flash API环境——速度快、成本低、支持批处理,我一直想找个真实场景测试一下。
这不就来了。
"你把SKU信息发我,我试试。"
那晚十点开始,凌晨两点结束。200张白底主图,全部生成完毕,API费用:38块钱人民币。
这篇文章,把我当晚用的脚本、Prompt模板、踩的坑,全部公开。
---
为什么是Gemini Flash,不是别的工具
在开始讲流程之前,先说清楚工具选型的逻辑——这个判断框架本身就值钱。
面对"批量生成200张电商主图"这个需求,市面上的选项其实不少,但一个个排除下来,你会发现能用的其实很窄。
Midjourney:效果好,但没有官方API,批处理只能靠Discord机器人,稳定性差,而且按月订阅,生成200张图光订阅费就要$30起,还不算时间成本。 DALL-E 3:有API,但价格是Gemini Flash的5-8倍,生成速度也慢,200张图跑下来成本直接破200块。 Stable Diffusion:本地部署免费,但需要显卡,我朋友那台笔记本装不了;云端SD服务质量参差不齐,而且最致命的是——风格一致性很难控制,200个SKU如果风格飘忽,主图看起来像大杂烩,比没有主图还难看。 Gemini Flash在批量场景下的核心优势,我总结成三点:1. 速度:平均每张图生成时间约8-12秒,200张总耗时不到40分钟(加上脚本跑批的间隔控速)
2. 成本:按token计费,图像生成部分极其便宜,200张图实际消耗约38元
3. API友好:原生REST接口,Python调用三行代码搞定,支持并发,天生适合批处理
来一张对比表,一目了然:
| 工具 | 200张图成本 | 是否支持API批处理 | 风格一致性 | 国内访问 | | Midjourney | ¥200+ | ❌ 无官方API | ⭐⭐⭐⭐ | ❌ 需代理 | | DALL-E 3 | ¥180-250 | ✅ | ⭐⭐⭐ | ❌ 需代理 | | Stable Diffusion | ¥0(本地)/ ¥60+(云端) | ✅ | ⭐⭐ | ✅ | | Gemini Flash | ¥38 | ✅ | ⭐⭐⭐⭐ | ✅(转发) |⚠️ 关于国内访问:Gemini官方API在国内直连不稳定,我这次用的是 api.884819.xyz 的转发服务,填上去就能用,省去了大量网络折腾时间。注册之后直接把Key填进脚本就跑,我朋友完全不懂代码,照着步骤也跑通了。
---
完整实操流程:手把手拆解
Step 1:整理SKU信息表格
万事开头难,但这一步其实最简单——让朋友把产品信息整理成Excel,列名固定好,后面脚本直接读取。
表格结构如下:
| SKU编号 | 产品名称 | 颜色/材质 | 尺寸 | 使用场景 | 特殊要求 | | A001 | 北欧风收纳盒 | 原木色/竹制 | 30×20cm | 桌面收纳 | 无 | | A002 | 硅胶锅垫 | 灰色 | 圆形20cm | 厨房 | 要展示防烫特性 |关键原则:信息越结构化,后面Prompt拼接越准确。让朋友花半小时把表格填好,后面省的是三个小时。
Step 2:设计Prompt模板(核心中的核心)
这是整个工作流最值钱的部分。
让200张图风格统一,靠的不是运气,靠的是一个设计好的Prompt框架,把"固定变量"和"动态变量"分开。
【电商主图Prompt框架】
固定部分(所有SKU共用):
"产品电商主图,纯白色背景(#FFFFFF),
专业产品摄影风格,柔和均匀的自然光,
无阴影或极浅阴影,产品居中构图,
占画面70%面积,1:1正方形比例,
高清质感,适合淘宝主图规范,
画面中不要出现文字、水印、人物"
动态部分(每个SKU替换):
"{产品名称},{颜色},{材质},
{使用场景简述},{特殊展示要求}"
拼接之后,一张完整的Prompt长这样:
北欧风竹制收纳盒,原木色,竹制材质,
适合桌面办公收纳,展示产品纹理细节,
产品电商主图,纯白色背景(#FFFFFF),
专业产品摄影风格,柔和均匀的自然光,
无阴影或极浅阴影,产品居中构图,
占画面70%面积,1:1正方形比例,
高清质感,适合淘宝主图规范,
画面中不要出现文字、水印、人物
💡 关键技巧:把"禁止出现的元素"放在Prompt里,比事后PS修图省10倍时间。"不要出现文字、水印、人物"这几个词,救了我至少30张图。
Step 3:写批处理脚本
先看基础API调用,5行搞定:
import google.generativeai as genai
genai.configure(
api_key="YOUR_API_KEY",
client_options={"api_endpoint": "api.884819.xyz"} # 国内转发地址
)
model = genai.GenerativeModel("gemini-2.0-flash-preview-image-generation")
然后是读取Excel、拼接Prompt的核心逻辑:
import pandas as pd
def build_prompt(row):
"""从SKU信息行构建完整Prompt"""
dynamic_part = (
f"{row['产品名称']},{row['颜色/材质']},"
f"{row['使用场景']},{row['特殊要求'] if row['特殊要求'] != '无' else ''}"
)
fixed_part = """
产品电商主图,纯白色背景(#FFFFFF),专业产品摄影风格,
柔和均匀的自然光,无阴影或极浅阴影,产品居中构图,
占画面70%面积,1:1正方形比例,高清质感,
适合淘宝主图规范,画面中不要出现文字、水印、人物
"""
return dynamic_part + "," + fixed_part.strip()
读取SKU表格
df = pd.read_excel("sku_list.xlsx")
带重试机制的批处理主循环(这段代码救了我至少20张图):
import time
import os
from PIL import Image
import io
def generate_with_retry(prompt, sku_id, max_retries=3):
"""带重试机制的图像生成函数"""
for attempt in range(max_retries):
try:
response = model.generate_content(
prompt,
generation_config={"response_modalities": ["IMAGE"]}
)
# 提取图像数据
for part in response.candidates[0].content.parts:
if part.inline_data:
img_data = part.inline_data.data
img = Image.open(io.BytesIO(img_data))
# 自动保存,文件名用SKU编号
output_path = f"output/{sku_id}.png"
img.save(output_path, "PNG")
print(f"✅ {sku_id} 生成成功")
return True
except Exception as e:
print(f"⚠️ {sku_id} 第{attempt+1}次失败: {e}")
time.sleep(5 * (attempt + 1)) # 指数退避
print(f"❌ {sku_id} 最终失败,跳过")
return False
主循环
os.makedirs("output", exist_ok=True)
success_count = 0
for _, row in df.iterrows():
prompt = build_prompt(row)
result = generate_with_retry(prompt, row['SKU编号'])
if result:
success_count += 1
time.sleep(2) # 控速,避免触发API限流
print(f"\n完成!成功生成 {success_count}/{len(df)} 张图")
Step 4:质检筛选
脚本跑完之后,不是所有图都能直接用。我的质检标准很简单:
- 背景是否纯白(目测 + 可以用Python检测四角像素值)
- 产品是否居中、是否被裁切
- 有没有莫名其妙的多余元素
200张图里,最终有23张被我标记为"需重新生成",主要集中在几个类别——下一章会细说。
---
踩坑实录:那晚让我骂了几次娘的问题
坑1:白底图出现灰色渐变
现象:大约15%的图,背景不是纯白,而是有轻微的灰色渐变,放在淘宝详情页上很违和。 原因:Prompt里写了"柔和光线",模型理解成了"有环境光的场景",自动加了阴影。 解法:在Prompt里加一句"背景RGB值255,255,255,无任何渐变或阴影",明确到像素级别,问题解决了80%。
坑2:某些品类Prompt完全失效
现象:硅胶锅垫那批图,生成出来全是"厨房场景图",完全不是白底主图。 原因:Prompt里写了"展示防烫特性",模型优先理解了"使用场景",忽略了"白底"要求。 解法:把使用场景描述从Prompt里删掉,只保留产品本身的外观描述。这批图重新生成,全部正常。📌 经验教训:Prompt里的"场景词"和"背景要求"会互相打架。电商白底图,就老老实实只描述产品外观,别加场景。
坑3:API限速
现象:跑到第80张左右,开始频繁报429 Rate Limit Exceeded。
解法:把主循环里的 time.sleep(2) 改成 time.sleep(3),同时把重试的指数退避时间拉长。后半段再没出现限速。
坑4:图片比例问题
淘宝主图要求800×800像素,Gemini生成的图默认分辨率不固定。
解法:在保存环节加一步强制resize:img = img.resize((800, 800), Image.LANCZOS)
img.save(output_path, "PNG")
---
结果复盘:数字说话
| 指标 | 数据 | | 总生成张数 | 200张 | | 一次通过(可直接用) | 177张(88.5%) | | 需重新生成 | 23张 | | 最终全部完成耗时 | 约4小时(含调试) | | API实际费用 | ¥38.6 | | 对比传统美工报价 | ¥3000 + 等待2周 | | 节省金额 | ¥2961.4 |上架三天后,小陈发来消息:
"哥,点击率从0.8%涨到了2.3%,有几个爆款收藏量翻了三倍,我请你吃饭。"
我让他把省下来的钱拿去投直通车。
---
但我想说的不只是这些数字。
那晚盯着终端一张一张图生成出来,我突然想到——这200个SKU里,有小陈卖了两年的产品,有他老婆亲手做的包装设计,有他在义乌进货时挑了半天的款式。
AI做的是图,但图背后的故事,还是人的。
AI不是要替代设计师。它是让没有设计师预算的小商家,也能有一张像样的主图,在算法面前不输在起跑线上。
这件事,我觉得挺有意义的。
---
文章里的完整代码,按照上面的结构自己拼就能跑。API接入用的是 api.884819.xyz,注册之后把Key填进 api_key 那行,直接开跑。
---
💬 评论区有朋友问:
"如果产品需要真实模特展示,AI能做到吗?"
这个问题问到点子上了。
下一篇我准备写:用Gemini的图像理解能力,把买家秀"升级"成专业棚拍效果——同样是批量处理,同样是一晚上,但这次的技术难度高了一个等级,涉及到图生图、风格迁移、人物姿态控制。
👉 关注8848AI,下周五见。
---
本文由8848AI原创,转载请注明出处。关注8848AI,带你从零开始学AI。#AI工具 #Gemini #电商运营 #淘宝主图 #AI生图 #批量处理 #8848AI #Python自动化