news 2026/2/28 7:12:46

批量压缩图片,保留清晰度的同时,减少文件体积,适配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/2/25 8:49:04

学术开题“黑科技”:书匠策AI如何让你的开题报告一键“起飞”

对于许多正在为论文开题抓耳挠腮的学子来说&#xff0c;开题报告就像一座难以翻越的大山。选题撞车、文献堆砌、逻辑混乱、格式错乱……这些问题如同绊脚石&#xff0c;让研究者在学术起点就陷入困境。不过别担心&#xff0c;今天要给大家介绍一款学术开题的“黑科技”——书匠…

作者头像 李华
网站建设 2026/2/27 13:09:43

如何用XML控制角色属性?NewBie-image-Exp0.1提示词实战详解

如何用XML控制角色属性&#xff1f;NewBie-image-Exp0.1提示词实战详解 1. 为什么你需要关注这个镜像&#xff1f; 你是否试过用普通提示词生成多角色动漫图&#xff0c;结果人物混在一起、发色错乱、甚至把“蓝发双马尾”画成“金发单马尾”&#xff1f;这不是你的描述问题&…

作者头像 李华
网站建设 2026/2/26 20:43:21

区间预测 | MATLAB实现LSTM长短期记忆神经网络分位数回归多输入单输出

区间预测 | MATLAB实现LSTM长短期记忆神经网络分位数回归多输入单输出 目录 区间预测 | MATLAB实现LSTM长短期记忆神经网络分位数回归多输入单输出 基本介绍 模型描述 程序设计 参考资料 基本介绍 分位数回归是简单的回归,就像普通的最小二乘法一样,但不是最小化平方误差的总…

作者头像 李华
网站建设 2026/2/27 13:11:00

语音情感识别要不要勾选Embedding?两种用途对比说明

语音情感识别要不要勾选Embedding&#xff1f;两种用途对比说明 1. 引言&#xff1a;一个简单选项背后的深层意义 在使用 Emotion2Vec Large 语音情感识别系统时&#xff0c;你是否曾犹豫过——那个“提取 Embedding 特征”的复选框&#xff0c;到底该不该勾&#xff1f; 看…

作者头像 李华
网站建设 2026/2/27 5:29:39

为何选择DeepSeek-R1蒸馏模型?Qwen优化版部署优势深度解析

为何选择DeepSeek-R1蒸馏模型&#xff1f;Qwen优化版部署优势深度解析 1. 模型背景与核心价值 你有没有遇到过这样的问题&#xff1a;想要一个轻量级但又具备强推理能力的文本生成模型&#xff0c;却发现大多数开源模型要么太重跑不动&#xff0c;要么逻辑能力弱得连基本的数…

作者头像 李华
网站建设 2026/2/27 8:53:40

如何解释JavaScript 中 this 的值?

文章目录如何解释Javascript中的this值&#xff1f;1.函数调用2.对象方法调用3.构造函数调用4.apply、call、bind 方法调用5.箭头函数中的this如何解释Javascript中的this值&#xff1f; 在 JavaScript 中&#xff0c;this 的值是动态的&#xff0c;通常会由被使用的函数来决定…

作者头像 李华