news 2026/4/23 10:03:04

批量压缩图片,保留清晰度的同时,减少文件体积,适配PPT/邮件上传图片过大的问题。

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
批量压缩图片,保留清晰度的同时,减少文件体积,适配PPT/邮件上传图片过大的问题。

1. 实际应用场景与痛点

场景

在办公或教学场景中,我们常需要把多张高分辨率图片插入 PPT 或发送邮件附件,但:

- 高分辨率图片体积大(几 MB 甚至几十 MB)

- 邮件附件有大小限制(如 5MB~20MB)

- PPT 文件体积过大会影响打开和分享速度

- 手动压缩费时且容易失真

痛点

- 手动一张张压缩很慢

- 在线压缩工具有隐私风险

- 批量处理时无法保证统一质量

- 需要兼顾清晰度和文件大小

2. 核心逻辑讲解

1. 输入:指定文件夹路径,读取所有常见图片格式(jpg, png, jpeg, bmp, webp)

2. 压缩策略:

- 对 JPEG:使用

"Pillow" 调整质量参数(quality=85 左右)

- 对 PNG:先尝试转换为 JPEG(如果无透明背景),否则用

"optipng" 或

"tinify" API 无损压缩

- 保持宽高不变,只改压缩质量

3. 输出:保存到新目录,文件名加

"_compressed" 后缀

4. 批量处理:遍历文件夹,支持递归子目录

5. 可选 AI 增强(高级版):用

"OpenCV" + 超分辨率模型(如 ESRGAN)先提升细节再压缩,保证小体积下更清晰

3. 项目结构

image_compressor/

├── compressor.py # 主程序

├── utils.py # 工具函数

├── config.py # 配置参数

├── requirements.txt # 依赖

├── README.md # 使用说明

└── sample_images/ # 示例图片

4. 代码实现

"config.py"

# 配置参数

COMPRESS_QUALITY = 85 # JPEG 压缩质量 (1-100)

OUTPUT_SUFFIX = "_compressed" # 输出文件后缀

SUPPORTED_FORMATS = ('.jpg', '.jpeg', '.png', '.bmp', '.webp')

MAX_WIDTH = 1920 # 可选:限制最大宽度

"utils.py"

import os

from PIL import Image

def is_supported_format(filename):

return filename.lower().endswith(SUPPORTED_FORMATS)

def get_output_path(input_path, output_dir):

base_name = os.path.splitext(os.path.basename(input_path))[0]

ext = os.path.splitext(input_path)[1]

if ext.lower() == '.png':

# 尝试转 JPEG 如果无透明

img = Image.open(input_path)

if img.mode in ('RGBA', 'LA') or (img.mode == 'P' and 'transparency' in img.info):

return os.path.join(output_dir, base_name + OUTPUT_SUFFIX + ext)

else:

ext = '.jpg'

return os.path.join(output_dir, base_name + OUTPUT_SUFFIX + ext)

"compressor.py"

import os

import sys

from PIL import Image

from utils import is_supported_format, get_output_path

import config

def compress_image(input_path, output_path):

try:

with Image.open(input_path) as img:

# 可选:限制最大宽度

if config.MAX_WIDTH and img.width > config.MAX_WIDTH:

ratio = config.MAX_WIDTH / float(img.width)

new_height = int(img.height * ratio)

img = img.resize((config.MAX_WIDTH, new_height), Image.ANTIALIAS)

# 保存

if output_path.lower().endswith('.jpg') or output_path.lower().endswith('.jpeg'):

img = img.convert('RGB')

img.save(output_path, 'JPEG', quality=config.COMPRESS_QUALITY, optimize=True)

else:

img.save(output_path, optimize=True)

print(f"Compressed: {input_path} -> {output_path}")

except Exception as e:

print(f"Error compressing {input_path}: {e}")

def batch_compress(input_dir, output_dir):

if not os.path.exists(output_dir):

os.makedirs(output_dir)

for root, _, files in os.walk(input_dir):

for file in files:

if is_supported_format(file):

input_path = os.path.join(root, file)

rel_path = os.path.relpath(root, input_dir)

out_subdir = os.path.join(output_dir, rel_path)

if not os.path.exists(out_subdir):

os.makedirs(out_subdir)

output_path = get_output_path(input_path, out_subdir)

compress_image(input_path, output_path)

if __name__ == "__main__":

if len(sys.argv) != 3:

print("Usage: python compressor.py <input_folder> <output_folder>")

sys.exit(1)

batch_compress(sys.argv[1], sys.argv[2])

5.

"requirements.txt"

Pillow>=9.0.0

6. README.md

# 批量图片压缩工具

适用于 PPT / 邮件场景,批量压缩图片,保持清晰度,减少文件体积。

## 功能

- 支持 JPG, PNG, BMP, WEBP

- 自动转换 PNG 为 JPG(若无透明)

- 可限制最大宽度

- 批量处理子目录

## 安装

bash

pip install -r requirements.txt

## 使用

bash

python compressor.py ./sample_images ./output_images

## 配置

修改 `config.py` 调整压缩质量、最大宽度等参数。

7. 核心知识点卡片

知识点 说明

Pillow Python 图像处理库,支持多种格式读写与压缩

质量参数 JPEG 的 quality 值影响文件大小与画质平衡

透明度检测 PNG 转 JPG 前需检查透明通道

批量遍历

"os.walk" 递归遍历目录

优化配置

"optimize=True" 让 Pillow 进一步优化文件结构

8. 总结

这个工具解决了办公中图片过大的痛点,通过 Python 脚本实现批量、自动化、可配置的压缩流程,适合 PPT 制作、邮件发送等场景。

后续可扩展:

- 接入 Tinify API 进行智能压缩

- 使用 OpenCV + ESRGAN 做超分辨率预处理

- 添加 GUI 界面方便非技术人员使用

如果你愿意,可以写一个 带进度条和并行处理的增强版本,这样在处理大量图片时会更快。

利用AI高效解决实际问题,如果你觉得这个工具好用,欢迎关注我!

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/17 17:06:18

论文开题不再愁!书匠策AI带你解锁高效写作新姿势

对于许多论文写作者&#xff0c;尤其是刚踏入学术领域的新手来说&#xff0c;开题报告就像是一座难以翻越的大山。选题没方向、文献梳理一团乱麻、框架搭建毫无头绪……这些问题常常让人头疼不已。别担心&#xff0c;今天就给大家介绍一位论文开题“神器”——书匠策AI&#xf…

作者头像 李华
网站建设 2026/4/17 14:05:46

学术开题“救星”降临!书匠策AI开题报告功能大揭秘

在学术研究的漫漫征途中&#xff0c;开题报告就像是那开启宝藏大门的钥匙&#xff0c;它不仅决定了研究的方向是否正确&#xff0c;还关乎着后续研究的顺利开展。然而&#xff0c;对于许多学者&#xff0c;尤其是初涉学术领域的新手来说&#xff0c;撰写开题报告就像是一场噩梦…

作者头像 李华
网站建设 2026/4/19 0:54:20

2026最值得尝试的语音工具:CAM++镜像一键部署推荐

2026最值得尝试的语音工具&#xff1a;CAM镜像一键部署推荐 1. 为什么说CAM是2026年最值得关注的语音识别工具&#xff1f; 你有没有遇到过这些场景&#xff1a; 客服系统分不清张三和李四的声音&#xff0c;反复确认身份&#xff1b;企业想搭建内部声纹门禁&#xff0c;但开…

作者头像 李华
网站建设 2026/4/18 13:13:54

CosyVoice2-0.5B实时对话应用:低延迟优化完整指南

CosyVoice2-0.5B实时对话应用&#xff1a;低延迟优化完整指南 1. 为什么你需要关注这个语音模型&#xff1f; 你有没有遇到过这样的场景&#xff1a; 正在开发一个智能客服系统&#xff0c;用户刚说完问题&#xff0c;却要等3秒以上才听到AI回复&#xff1f; 想给短视频配上定…

作者头像 李华
网站建设 2026/4/20 3:39:51

YOLOv11边缘计算:树莓派5部署性能实测

YOLOv11边缘计算&#xff1a;树莓派5部署性能实测 你是不是也试过在树莓派上跑目标检测模型&#xff0c;结果卡在加载、卡在推理、卡在内存溢出&#xff1f;这次我们不绕弯子&#xff0c;直接把最新版YOLOv11&#xff08;注意&#xff1a;官方尚未发布v11&#xff0c;本文所指…

作者头像 李华
网站建设 2026/4/11 20:20:27

FSMN-VAD实战案例:长音频自动切分系统搭建详细步骤

FSMN-VAD实战案例&#xff1a;长音频自动切分系统搭建详细步骤 1. 引言&#xff1a;为什么需要语音端点检测&#xff1f; 你有没有遇到过这样的问题&#xff1a;一段30分钟的会议录音&#xff0c;真正说话的时间可能只有15分钟&#xff0c;其余都是静音、翻页声或环境噪音。如…

作者头像 李华