用 Python 批量给商品图片加水印,并按款号自动归档
【摘要】 跨境电商上架前,几百张商品图逐一加水印、再按款号分文件夹整理,既慢又容易出错。本文用 Python + Pillow 实现一键批量处理:自动读取图片、按比例缩放水印、按款号归档,并记录处理日志,实测 300 张图 2 分钟内完成。
一、为什么要批量处理
跨境电商上架前,每张商品主图都要加店铺水印,防止图片被盗用;同时图片要按款号分文件夹存放,方便运营按款找图。人工处理时,300 张图往往要花一下午,还容易出现漏加、错放的情况。用 Python 把这件事自动化后,整个流程只需要几分钟。
二、处理思路
- 约定文件命名规则:图片文件以款号开头,例如 KU20261108-001.jpg,短横线前面的部分就是款号。
- 遍历原图目录,逐张读取图片,用 Pillow 在右下角叠加半透明水印,水印大小按原图宽度等比缩放。
- 按款号在输出目录下创建子文件夹,把处理后的图片写入对应的文件夹。
- 生成处理日志,记录每张图的来源、去向和耗时,方便事后核对数量。
三、核心代码
from PIL import Image
import os
SRC = "原图"
DST = "已处理"
WATERMARK = "watermark.png"
def add_watermark(img, mark, ratio=0.25, opacity=128):
w, h = img.size
mw = int(w * ratio)
mark = mark.resize((mw, int(mark.height * mw / mark.width)))
if mark.mode != "RGBA":
mark = mark.convert("RGBA")
alpha = mark.split()[3].point(lambda p: p * opacity // 255)
mark.putalpha(alpha)
img.paste(mark, (w - mw - 20, h - mark.height - 20), mark)
return img
for name in os.listdir(SRC):
if not name.lower().endswith((".jpg", ".jpeg", ".png")):
continue
style_no = name.split("-")[0]
out_dir = os.path.join(DST, style_no)
os.makedirs(out_dir, exist_ok=True)
img = Image.open(os.path.join(SRC, name)).convert("RGB")
mark = Image.open(WATERMARK)
add_watermark(img, mark).save(os.path.join(out_dir, name), quality=92)
print(f"已处理 {name} -> {out_dir}")
四、三个容易踩的坑
- 水印不要用固定像素尺寸,要按原图宽度等比缩放,否则在 800px 和 3000px 的图上效果差很多。
- 透明度建议控制在 100~150 之间,既能起到标识作用,又不会遮挡商品细节。
- 一定要先备份原图,处理结果写到新目录,不要直接覆盖原文件;同时用日志核对数量,处理前 312 张、处理后也要是 312 张。
五、效果
实测 312 张商品图,批量处理用时约 2 分钟,全部按款号归档到位;运营找图时直接按款号进文件夹,不用再逐张翻。后续还可以把这个脚本接到上架流程里,图片一到就自动处理。
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)