pil.image可高效完成批量格式转换与分辨率调整:用image.open()和resize()缩放,优先选bicubic;注意模式转换、exif保留、jpeg质量设置及异常捕获,推荐pathlib遍历并小样试跑。

用 PIL.Image(即 Pillow)就能干净利落地完成批量格式转换和分辨率调整,不需要额外装一堆库,也不用调用外部命令。
用 Image.open() + Image.resize() 读取并缩放图片
注意不是所有缩放方式都适合所有场景:Image.NEAREST 快但锯齿明显,Image.LANCZOS 质量高但稍慢,日常用 Image.BICUBIC 平衡效果和速度。resize 前最好先检查原图尺寸,避免把小图强行拉大导致模糊。
- 用
img.size获取宽高,再按比例计算目标尺寸(比如统一宽度为 800,高度等比缩放) - 如果要强制裁剪到固定尺寸,得自己写逻辑:先 resize 到略大于目标尺寸,再用
img.crop() -
resize()返回新对象,原图不会被修改,放心链式调用
用 Image.save() 控制输出格式与质量
格式转换本质就是换后缀名 + 指定 format 参数,否则 Pillow 可能按文件扩展名“猜”,出错概率高。JPEG 类型尤其要注意:save() 默认不保留 EXIF,且必须显式传 quality=95 这类参数,否则可能压到 75 甚至更低。
- 保存 PNG 时加
optimize=True可小幅减小体积 - 保存 JPEG 时务必加
quality=90或更高,否则细节损失明显 - 若源图是 RGBA 模式(带透明通道)而目标格式不支持(如 JPEG),需先转成 RGB:
img.convert('RGB')
遍历目录时用 pathlib.Path 而不是 os.listdir
pathlib 写起来更直观,过滤后缀、构造输出路径都不容易错。别用 os.walk 去递归处理——除非你真需要子目录里的图;多数批量任务只在单层目录操作,用 Path.glob("*.jpg") 更安全。
- 输入路径建议用
Path(input_dir)显式转对象,避免字符串拼接路径出错 - 输出文件名用
new_path = input_path.with_suffix(".webp"),自动保留原名,不手动切字符串 - 遇到无法打开的文件(损坏/非图),用
try...except OSError:捕获,跳过即可,别让整个流程中断
真正麻烦的点不在代码本身,而在隐式行为:模式不匹配、EXIF 丢失、透明通道被丢弃、JPEG 默认压缩率偏低……这些不会报错,但结果图一眼就能看出不对。动手前先拿 2–3 张典型图试跑,比写完再全量处理省半天事。
Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!











