给用户上传的图生成缩略图,或者把一批 png 转成 jpg,python 里第一选择就是 pillow库。它是老 PIL 的延续分支,pip install pillow 一行装好,import 的名字还是 PIL,新手容易在这里懵一下。装之前把旧 PIL 卸干净,两个包混装 import 会打架。

打开、缩放、保存

from PIL import Image  im = Image.open('a.png')  print(im.size, im.mode)  im.thumbnail((200, 200))  im.save('a_small.png')

thumbnail 按比例缩到指定框内,不会拉伸变形;要精确尺寸用 resize,宽高自己给。先看 mode 打印出来是 RGB 还是 RGBA,转格式之前这个值很关键。透明图想保住圆角就留在 png,别为了统一格式硬转 jpg。

png 转 jpg 的透明坑

RGBA 的图直接 save 成 jpg 会抛 OSError,因为 jpg 不支持透明通道。先 convert('RGB') 再保存,默认补成黑底,介意就先贴到白底上再转。反过来 jpg 转 png 没任何限制。另外 GIF 这类动图,pillow 默认只处理第一帧,要逐帧得自己循环 seek。webp 也能读写,批量压缩素材时 save 里给 quality 参数,80 上下体积和画质比较平衡。

加水印和批量处理

水印用 ImageDraw 在副本上写 text,中文必须通过 ImageFont.truetype 指定字体文件,不然全是方块,位置习惯放右下角,离边缘留几十像素。批量任务套一个 os.listdir 的循环,几百张图几秒跑完,比在图像软件里逐张导出省力得多,配合 argparse 做成小脚本,同事都能拿来用。照片横竖颠倒的话,用 transpose 转一次,省得每张手动摆正。

小工具、缩略图、格式转换这类活,pillow库 一把梭就够;要图层、蒙版、精修,那是专业图像软件的事,别硬为难它。