Python 用 Pillow 批量给商品图统一尺寸、加白底与规范命名
跨境电商上架时,商品图最常见的三个问题是:尺寸不统一、背景不是纯白、文件名没有规律。靠人工一张张在修图软件里改,几十个 SKU 还能应付,上百个 SKU 就会出现漏改、改错和重复劳动。本文介绍一套用 Python 和 Pillow 实现的批量处理流程,目标一次跑通、多次复用。
一、先定规范,再写代码
先把目标写死,避免每批图标准漂移。我的常用规范是:画布 1000×1000,背景纯白(255,255,255),主体完整入画、居中,四边至少留 30 像素边距;输出 JPEG,质量 90;文件名按“SKU_序号.jpg”命名,例如 ABC123_01.jpg。规范定好后,代码只做一件事:把任意输入图规范化成这个标准。
二、核心思路:等比缩放,居中贴白底
不要直接拉伸原图,否则商品会变形。正确做法是:先按原图比例算出放进 1000×1000 画布的最大尺寸,再新建一张纯白画布,把缩放后的图粘贴到正中央。遇到 PNG 透明图,要先把它合成到白底上,否则透明区域在转 JPEG 时可能变黑。遇到 CMYK 或带 ICC 配置的图片,先转成 RGB,避免颜色偏差。
三、一个可直接复用的处理函数
from PIL import Image
from pathlib import Path
def normalize_image(src: Path, dst: Path, size: int = 1000):
with Image.open(src) as im:
im = im.convert("RGBA")
background = Image.new("RGBA", (size, size), (255, 255, 255, 255))
im.thumbnail((size - 60, size - 60), Image.LANCZOS)
x = (size - im.width) // 2
y = (size - im.height) // 2
background.alpha_composite(im, (x, y))
background.convert("RGB").save(dst, "JPEG", quality=90)
thumbnail 会保持比例缩放,alpha_composite 能正确处理透明通道,60 像素的预留空间就是四边边距的来源。
四、批量遍历与规范命名
批量时按文件夹遍历,跳过非图片文件和已经处理过的文件,用 SKU 做前缀、按顺序编号。建议先在副本目录输出,不要直接覆盖原图;同时记录一张清单,包含原文件名、新文件名、原尺寸和输出尺寸,方便回查。处理完后抽查三类图:横图、竖图和透明底图,确认没有变形、没有黑边、主体没有被裁掉。
五、容易踩的坑
第一,JPEG 不支持透明,透明图必须先合白底再保存。第二,图片方向信息在 EXIF 里,直接读取可能出现横竖颠倒,处理前先用 ImageOps.exif_transpose 校正方向。第三,不要用文件名里的中文、空格和特殊符号做 SKU,跨境平台和后续脚本都更容易出错。第四,批量跑之前先拿 5 张图做小样本测试,确认规范无误再全量执行。
把规范、代码和质检清单固定下来之后,新增一批商品图就只是换一个输入文件夹、跑一次脚本的事,图片质量和命名一致性也更容易长期保持。
- 点赞
- 收藏
- 关注作者
评论(0)