Python自动化:一键批量压缩图片,节省90%存储空间
问题场景
你有没有遇到这样的情况:
- 手机拍了100张照片,想发朋友圈,但每张都10MB+
- 项目需要上传图片,但文件太大,超出限制
- 网站需要大量图片,但存储空间不够
手动一张张压缩?太慢了!
今天教你用 Python 一键批量压缩图片。
────────────────────────────────────────
准备工作
安装依赖
```bash
pip install Pillow
```
导入库
```python
from PIL import Image
import os
```
────────────────────────────────────────
完整代码
```python
from PIL import Image
import os
def compress_images(input_dir, output_dir, quality=85, max_width=1920):
"""
批量压缩图片
参数:
- input_dir: 输入文件夹路径
- output_dir: 输出文件夹路径
- quality: 压缩质量(1-100,默认85)
- max_width: 最大宽度(超过则缩放,默认1920)
"""
创建输出文件夹
if not os.path.exists(output_dir):
os.makedirs(output_dir)
支持的图片格式
supported_formats = ['.jpg', '.jpeg', '.png', '.bmp', '.webp']
遍历所有文件
for filename in os.listdir(input_dir):
检查是否为支持的图片格式
ext = os.path.splitext(filename)[1].lower()
if ext not in supported_formats:
continue
打开图片
input_path = os.path.join(input_dir, filename)
output_path = os.path.join(output_dir, filename)
try:
img = Image.open(input_path)
缩放图片(如果超过最大宽度)
if img.width > max_width:
ratio = max_width / img.width
new_height = int(img.height * ratio)
img = img.resize((max_width, new_height), Image.LANCZOS)
PNG转JPG(可选)
if ext == '.png':
转换为RGB模式(PNG可能有透明通道)
img = img.convert('RGB')
output_path = os.path.join(output_dir,
os.path.splitext(filename)[0] + '.jpg')
保存压缩后的图片
img.save(output_path, quality=quality, optimize=True)
计算压缩比例
original_size = os.path.getsize(input_path) / 1024
compressed_size = os.path.getsize(output_path) / 1024
ratio = (1 - compressed_size / original_size) * 100
print(f'✅ {filename}: {original_size:.1f}KB → {compressed_size:.1f}KB (压缩{ratio:.1f}%)')
except Exception as e:
print(f'❌ {filename}: 压缩失败 - {e}')
使用示例
if __name__ == '__main__':
input_dir = '原始图片' # 输入文件夹
output_dir = '压缩图片' # 输出文件夹
compress_images(input_dir, output_dir, quality=80, max_width=1920)
print('\n�� 批量压缩完成!')
```
────────────────────────────────────────
代码解析
1. 参数说明
| 参数 | 说明 | 默认值 |
|------|------|--------|
| input_dir | 原始图片文件夹 | 必填 |
| output_dir | 压缩后输出文件夹 | 必填 |
| quality | 压缩质量(1-100) | 85 |
| max_width | 最大宽度(像素) | 1920 |
2. 核心步骤
- **遍历文件夹**:找到所有支持的图片格式
- **缩放图片**:如果宽度超过 max_width,等比例缩放
- **压缩保存**:使用 quality 参数控制压缩质量
3. 压缩效果
| 参数 | 效果 |
|------|------|
| quality=90 | 高质量,压缩少 |
| quality=85 | 平衡质量与大小 |
| quality=70 | 较小体积,质量下降 |
────────────────────────────────────────
进阶功能
1. 保留透明通道(PNG)
```python
如果PNG有透明通道,保持透明
if img.mode == 'RGBA':
img.save(output_path, 'PNG', optimize=True)
else:
img = img.convert('RGB')
img.save(output_path, 'JPEG', quality=quality, optimize=True)
```
2. 批量重命名
```python
在循环中添加
new_name = f'image_{i:04d}.jpg' # image_0001.jpg
output_path = os.path.join(output_dir, new_name)
```
3. 递归处理子文件夹
```python
for root, dirs, files in os.walk(input_dir):
for filename in files:
处理每个文件
```
────────────────────────────────────────
实际效果
测试环境:100张手机照片,每张约 10MB
| 指标 | 压缩前 | 压缩后 |
|------|--------|--------|
| 总大小 | 1.0GB | 150MB |
| 单张大小 | 10MB | 1.5MB |
| 压缩比例 | - | 85% |
| 处理时间 | - | 约30秒 |
────────────────────────────────────────
使用场景
- **网站图片优化**:减少加载时间,提升用户体验
- **手机相册瘦身**:节省存储空间
- **批量上传**:减少上传时间
- **邮件附件**:避免超出大小限制
────────────────────────────────────────
总结
核心价值:
- 节省 90% 存储空间
- 批量处理,效率提升 100 倍
- 简单易用,复制粘贴即可
适用场景:
- 网站图片优化
- 手机相册瘦身
- 批量上传准备
────────────────────────────────────────
#Python #自动化 #图片压缩 #效率提升
更多推荐



所有评论(0)