用 Python 批量给商品图片加水印,并按款号自动归档

举报
yd_295675147 发表于 2026/11/08 00:15:09 2026/11/08
【摘要】 跨境电商上架前,几百张商品图逐一加水印、再按款号分文件夹整理,既慢又容易出错。本文用 Python + Pillow 实现一键批量处理:自动读取图片、按比例缩放水印、按款号归档,并记录处理日志,实测 300 张图 2 分钟内完成。

一、为什么要批量处理

跨境电商上架前,每张商品主图都要加店铺水印,防止图片被盗用;同时图片要按款号分文件夹存放,方便运营按款找图。人工处理时,300 张图往往要花一下午,还容易出现漏加、错放的情况。用 Python 把这件事自动化后,整个流程只需要几分钟。

二、处理思路

  1. 约定文件命名规则:图片文件以款号开头,例如 KU20261108-001.jpg,短横线前面的部分就是款号。
  2. 遍历原图目录,逐张读取图片,用 Pillow 在右下角叠加半透明水印,水印大小按原图宽度等比缩放。
  3. 按款号在输出目录下创建子文件夹,把处理后的图片写入对应的文件夹。
  4. 生成处理日志,记录每张图的来源、去向和耗时,方便事后核对数量。

三、核心代码

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}")

四、三个容易踩的坑

  1. 水印不要用固定像素尺寸,要按原图宽度等比缩放,否则在 800px 和 3000px 的图上效果差很多。
  2. 透明度建议控制在 100~150 之间,既能起到标识作用,又不会遮挡商品细节。
  3. 一定要先备份原图,处理结果写到新目录,不要直接覆盖原文件;同时用日志核对数量,处理前 312 张、处理后也要是 312 张。

五、效果

实测 312 张商品图,批量处理用时约 2 分钟,全部按款号归档到位;运营找图时直接按款号进文件夹,不用再逐张翻。后续还可以把这个脚本接到上架流程里,图片一到就自动处理。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。