用 Python + Pillow 批量统一商品主图尺寸与白底:跨境电商图片处理小技巧
【摘要】 用 Python + Pillow 十几行代码批量统一跨境电商商品主图:等比缩放不拉伸、白底画布居中粘贴,附完整可运行脚本、各平台尺寸速查与 5 个常见坑。
为什么主图要统一尺寸和白底
做跨境电商的朋友都遇到过这种情况:亚马逊要求主图纯白背景、建议 2000×2000 像素,Shopee、Lazada、速卖通也都有类似的正方形、白底要求。图片尺寸不一、白底不纯,不仅影响搜索权重,还会让店铺看起来很不专业。
人工一张张在修图软件里改,几十上百个 SKU 根本改不完。其实用 Python + Pillow 写个十几行的小脚本,就能批量搞定。
处理思路:等比缩放 + 白底画布
核心就两步:
- 把原图按比例缩放到目标尺寸以内,绝不拉伸变形;
- 新建一张纯白正方形画布,把缩放后的图居中贴上去,多余的部分自然就是白底。
这样不管原图是横图、竖图还是方图,出来的都是统一尺寸、白底、主体居中的主图。
环境准备
pip install Pillow
只需要 Pillow 一个库,不用装 Photoshop,也不用学复杂的修图软件。
单张处理的核心代码
from PIL import Image, ImageOps
def make_main_image(src_path, dst_path, size=1000, padding=40,
bg_color=(255, 255, 255)):
# 打开图片并修正 EXIF 方向,避免手机拍的图横过来
img = Image.open(src_path)
img = ImageOps.exif_transpose(img)
# 统一转成 RGB,去掉 PNG 的透明通道,避免透明变黑底
img = img.convert("RGB")
# 目标区域 = 画布尺寸减去四边留白
box = size - padding * 2
# thumbnail 等比缩放,只缩小不放大,不改变宽高比
img.thumbnail((box, box), Image.LANCZOS)
# 新建纯白底画布
canvas = Image.new("RGB", (size, size), bg_color)
# 居中粘贴
x = (size - img.width) // 2
y = (size - img.height) // 2
canvas.paste(img, (x, y))
canvas.save(dst_path, "JPEG", quality=95)
几个关键点:
ImageOps.exif_transpose:修正手机照片的 EXIF 方向,不然竖拍的图可能横过来;convert("RGB"):处理 PNG 的透明通道,避免透明部分在转 JPG 后变黑;thumbnail:等比缩放,只缩小不放大,不会拉伸变形;Image.LANCZOS:高质量重采样,缩小后边缘更干净;padding:四边留白,让主体不贴边,视觉上更舒服。
批量处理整个文件夹
from pathlib import Path
SRC_DIR = Path("input") # 原图文件夹
DST_DIR = Path("output") # 输出文件夹
DST_DIR.mkdir(exist_ok=True)
SUPPORT_EXT = {".jpg", ".jpeg", ".png", ".webp", ".bmp"}
for src in sorted(SRC_DIR.iterdir()):
if src.suffix.lower() not in SUPPORT_EXT:
continue
dst = DST_DIR / (src.stem + ".jpg")
try:
make_main_image(src, dst, size=1000, padding=40)
print(f"已处理:{src.name} -> {dst.name}")
except Exception as e:
print(f"处理失败:{src.name},原因:{e}")
把原图丢进 input 文件夹,运行 python batch_images.py,一个文件夹的图片几秒钟就全部处理完,输出到 output 文件夹,文件名保持不变。
原图背景不是白色的怎么办
上面的方法是“白底画布”,适合原图主体已经抠好、或者本身就是浅色背景的场景。如果原图背景是杂乱的实景,有两个选择:
- 拍摄时就用纯色背景布或白墙拍,从源头解决;
- 进阶做法:用 rembg 自动抠图去背景,再贴到白底画布上:
pip install rembg onnxruntime
from rembg import remove
img = Image.open(src_path)
img = remove(img) # 返回带透明通道的图
img = img.convert("RGBA")
# 再按同样的方法贴到白底画布上
抠图质量取决于原图主体与背景的对比度,边缘复杂的商品(毛绒、透明材质)建议人工复查一遍。
各平台主图尺寸速查
- 亚马逊:建议 2000×2000 像素以上,支持缩放功能;
- Shopee:建议 800×800,正方形;
- Lazada:建议 800×800,白底;
- 速卖通:建议 800×800 以上。
把 size 参数改成对应数值,同一套代码就能出不同平台的版本。
容易踩的几个坑
- 直接
resize拉伸:会改变比例,商品变形,千万别用resize硬改; - 忽略 EXIF 方向:手机竖拍的图可能横过来,先用
exif_transpose修正; - PNG 透明通道直接转 JPG:透明部分会变黑,一定要先贴到白底上再保存;
- 保存质量太低:
quality建议 90 以上,否则放大后模糊; - 原图太小:低于 500 像素的原图强行放大到 1000 会糊,
thumbnail只缩小不放大的策略可以避免越放越糊。
小结
批量统一主图不用学复杂的修图软件,十几行 Python 代码就能解决:等比缩放 + 白底画布 + 居中粘贴。把脚本保存下来,每次上新直接丢文件夹里跑一遍,主图规范就统一了,省下来的时间可以多花在选品和运营上。
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)