这篇能做出什么
照这套流程走完,你能拿到这样的结果:
- 一张符合平台尺寸要求的主图,产品本体是你实拍的那一件,背景是 AI 生成的场景,画面里有一句卖点主标和一句副标;
- 同一个产品,一次产出 6~10 张差异化主图:木质桌面、纯色影棚、户外草地、节日氛围各一套,用来做点击率对比;
- 一套可复用的模板:换产品图、换卖点词,脚本跑一遍自动出图,几十个 SKU 也能撑得住。
这里不承诺"一键出图"。稳定可用的做法是拆成三段:抠产品 → 生成背景 → 后期叠字。为什么顺序不能反,后面"常见坑"会讲清楚。
前置条件清单
动手前把这些准备好,能省掉大量返工:
1. 平台规则:主图尺寸与比例、是否要求白底、画面文字占比上限、是否允许非实拍背景、是否禁止拼接。以各平台官方规则页当前版本为准,规则会调整。
2. 产品素材:至少一张顺光、纯色背景、产品占画面 60% 以上的实拍图。手机拍完全可以,关键是没有大面积阴影和反光。
3. 一个图像生成或图像编辑工具:需要支持"参考图"或"局部重绘(inpaint)"。纯文字生成图片的工具做不了这一步。
4. Python 环境:用于批量抠图与叠字。装 pillow,抠图可选装 rembg。
5. 一份卖点清单:3~5 条,来源是详情页、客服聊天记录、买家评价里的高频词,比凭空想靠谱。
6. 可商用中文字体:商用字体有授权要求,用之前确认授权范围。
第 1 步:先定模板,再动手
很多人一上来就写提示词,出十张废九张。先定死版式参数,后面每一步都往里填。
建一个 config.json:
```json
{
"canvas": [1200, 1200],
"product_width_ratio": 0.62,
"product_center_y_ratio": 0.58,
"text_box": { "x": 80, "y": 880, "max_width": 1040 },
"title_size": 84,
"sub_size": 40,
"safe_margin": 60
}
```
三个数字最关键:
product_width_ratio:产品宽度占画布的比例。低于 0.5 会显得空,高于 0.75 会挤掉文案空间;product_center_y_ratio:产品中心落在画布偏下位置,上方留给氛围和留白;safe_margin:四周留白,避免内容顶到画面边缘被平台裁切。
第 2 步:把产品抠干净
扣图质量决定成图质量。边缘毛糙、残留原背景色,后面再修很费劲。
命令行方式,先把输入图放到工作目录:
```bash
pip install rembg pillow
rembg i product.jpg product_nobg.png
```
输出的 PNG 带透明通道。检查三件事:
- 产品轮廓外是否还有半透明的原背景残留;
- 细结构(电线、瓶口、镂空、毛绒边缘)有没有被削掉;
- 透明区域是不是真的透明,而不是白色。
有问题就换一张更好拍的原图重来,通常比反复修图更快。追求更干净的边缘,可以换用商业抠图接口,参数以服务方官方文档为准。
第 3 步:生成背景,不要重画产品
这是整个流程里最容易翻车的一步。图像生成模型看到产品,倾向于"重新画一个差不多的",结果就是 LOGO 变形、按钮位置不对、材质变了。
两条路线:
路线 A(推荐):生成纯背景,再合成。
提示词模板:
```text
场景:一张{材质}台面,背景是{环境描述},虚化处理
光线:{方向}柔和自然光,产品下方有轻微投影
镜头:中焦,浅景深,画面干净
构图:正中央留出放置产品的空间,四周留出文字区域
限制:画面中不要出现任何文字、水印、logo、人物、多余商品
```
把 {材质}、{环境描述}、{方向} 换成你的需求,比如"浅色橡木""暖色调客厅""左上 45 度"。一次生成 4 张,挑构图和光线合适的。
路线 B:图生图或局部重绘。
把抠好的产品合成到一张粗略底图上,再把产品以外的区域圈出来做局部重绘,重绘幅度调到中低档,并把产品区域加进遮罩保护范围。这条路出图更自然,但需要工具支持遮罩,且要反复试参数。
不管走哪条路,同一个产品的所有主图都用同一张 product_nobg.png,这样多张图之间产品形态完全一致,不会出现"六张图里产品像六个款式"的问题。
第 4 步:合成,并补一个可信的投影
```python
from PIL import Image, ImageFilter
BG_SIZE = (1200, 1200)
bg = Image.open("bg.png").convert("RGBA").resize(BG_SIZE)
product = Image.open("product_nobg.png").convert("RGBA")
按目标宽度等比缩放产品
ratio = 0.62
target_w = int(BG_SIZE[0] * ratio)
target_h = int(product.height * target_w / product.width)
product = product.resize((target_w, target_h), Image.LANCZOS)
x = (BG_SIZE[0] - target_w) // 2
y = int(BG_SIZE[1] * 0.58) - target_h // 2
canvas = bg.copy()
用产品自身的 alpha 通道生成柔化投影
alpha = product.split()[-1]
shadow = Image.new("RGBA", product.size, (0, 0, 0, 0))
shadow.putalpha(alpha.point(lambda a: int(a * 0.35)))
shadow = shadow.filter(ImageFilter.GaussianBlur(18))
canvas.alpha_composite(shadow, (x + 10, y + 26))
canvas.alpha_composite(product, (x, y))
canvas.convert("RGB").save("main_raw.jpg", quality=92)
```
投影的方向要和背景里生成的光线方向一致。背景光从左边来,投影就往右偏;方向反了,第一眼就会觉得假。
第 5 步:写文案,别写成小作文
电商主图的文案有硬约束:手机上一秒扫过,能看清的字数有限。推荐三段式:
- 主标:4~8 字,说品类或核心差异;
- 副标:10~16 字,说清"给谁解决什么问题";
- 角标:2~6 字,放规格、材质、适用场景。
让模型帮你出候选,提示词这样写:
```text
角色:电商主图文案
输入:
- 产品:{产品名}
- 目标人群:{人群}
- 卖点:{卖点1};{卖点2};{卖点3}
- 使用场景:{场景}
输出:5 组,每组包含
1) 主标(不超过 8 字)
2) 副标(不超过 16 字)
3) 角标(不超过 6 字)
约束:
- 不使用绝对化用语、功效承诺、夸大对比
- 不写价格、不写促销倒计时
- 不使用平台与广告法禁止的表述,具体词表以平台规则为准
- 不编造产品不具备的功能
```
拿到候选后人工过一遍。模型很容易写出"必买""闭眼入"这类在平台规则里风险较高的词,删掉。
第 6 步:把字叠上去
```python
from PIL import ImageDraw, ImageFont
换成系统里实际存在的可商用中文字体路径
FONT_PATH = "/path/to/your/font.ttf"
title_font = ImageFont.truetype(FONT_PATH, 84)
sub_font = ImageFont.truetype(FONT_PATH, 40)
canvas = Image.open("main_raw.jpg").convert("RGBA")
draw = ImageDraw.Draw(canvas)
title = "卖点主标"
sub = "一句副标,说清给谁解决什么问题"
stroke 描边,保证浅色背景上也看得清
draw.text((80, 880), title, font=title_font,
fill=(255, 255, 255, 255), stroke_width=3, stroke_fill=(0, 0, 0, 160))
draw.text((80, 990), sub, font=sub_font,
fill=(255, 255, 255, 255), stroke_width=2, stroke_fill=(0, 0, 0, 140))
canvas.convert("RGB").save("main_01.jpg", quality=92)
```
文字永远在最后一步用脚本叠加,不要让图像模型去画字。模型画的字基本是乱码或错别字,而且改一个词就要重出一整张图。
第 7 步:批量产出与命名
把上面几步串成一个循环:遍历"背景图列表 × 文案组列表",输出成对的文件名,例如 main_01_木桌_主标A.jpg。命名里带上变量,做 A/B 测试时能对上号。
同一批出图后做两件事:
1. 缩到手机尺寸(比如宽度 400px)看一眼,主标还认不认得出;
2. 六张图并排看,确认产品形态、色调、文案风格不至于互相打架。
常见坑与排错
产品被模型改样,LOGO 变形、按钮错位
改成"抠图 + 生成背景 + 合成"的路线,或者在图生图里把产品区域加进遮罩保护。不要指望靠提示词描述产品细节来保证还原。
生成图里出现乱码文字
在提示词里明确写"不要出现任何文字、水印、logo",同时所有文案后期叠加。
抠图边缘有白边或半透明残留
把产品图缩小 1~2 像素再放大,或者对蒙版做轻微收缩。也可以在合成后给产品加一圈极细的暗描边压住白边。
投影和背景光线方向不一致
先判断背景的主光源在哪个方向(看背景里物体的亮面和投影),再决定投影偏移量。
模特手指变形、多余肢体
主图尽量不让手部入镜,或者用产品特写替代。生成后再局部修,成本通常更高。
字体版权风险
商用字体需授权。系统自带字体不等于可商用,使用前确认授权范围。
生成图片的商用授权
各工具对生成内容的商用条件不同,以工具的官方条款为准,别默认可以随便用。
同一个产品出图后像不同款式
统一使用同一张抠图文件,背景可以换,产品本体不要重新生成。
多 SKU 被判图片重复
给每个 SKU 换背景、换文案、换产品摆放角度,形成可见差异。
下一步建议
1. 沉淀模板库:把背景提示词、文案模板、排版参数各存一份,按品类分组。下次上新只改变量。
2. 做小规模 A/B 测试:同一产品出 4 张不同风格主图,跑一段时间看点击率与转化率的变化,再决定主推哪张。不要凭感觉拍板。
3. 扩展到详情页与短视频封面:同一套抠图和文案模板,换个画布比例就能复用,边际成本很低。
4. 建立素材库:把抠好的产品图、可用的背景图、通过审核的文案归档,长期看比每次重做省事得多。
5. 定期回看平台规则:主图规范、广告用语要求都会更新,出图脚本里的约束条件也要跟着改。
