news 2026/4/17 11:15:26

批量压缩图片,保留清晰度的同时,减少文件体积,适配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/15 10:27:50

IQuest-Coder-V1-40B-Instruct微调教程:领域适配实战步骤

IQuest-Coder-V1-40B-Instruct微调教程&#xff1a;领域适配实战步骤 1. 引言&#xff1a;为什么需要对IQuest-Coder-V1-40B-Instruct进行微调&#xff1f; 你有没有遇到过这样的情况&#xff1a;一个号称“最强”的代码大模型&#xff0c;在你自己的项目里写出来的代码却总是…

作者头像 李华
网站建设 2026/4/16 16:00:01

漏洞挖掘基础知识简介(漏洞挖掘流程/漏洞挖掘方法)

1.漏洞与Bug 漏洞&#xff1a;通常情况下不影响软件的正常功能&#xff0c;但如果被攻击者利用&#xff0c;有可能驱使软件去执行一些额外的恶意代码&#xff0c;从而引发严重的后果。最常见的漏洞有缓冲区溢出漏洞、整数溢出漏洞、指针覆盖漏洞等。 Bug&#xff1a;影响软件…

作者头像 李华
网站建设 2026/4/12 23:27:34

AI语音情感识别最新进展:Emotion2Vec+ Large多场景落地分析

AI语音情感识别最新进展&#xff1a;Emotion2Vec Large多场景落地分析 1. 为什么Emotion2Vec Large值得重点关注 语音不只是信息的载体&#xff0c;更是情绪的窗口。当客服电话里那句“我理解您的心情”听起来毫无温度&#xff0c;当在线教育中学生沉默三秒后突然叹气&#x…

作者头像 李华
网站建设 2026/4/16 2:17:35

Qwen3-Embedding-4B对比测试:与Cohere Embed最新版评测

Qwen3-Embedding-4B对比测试&#xff1a;与Cohere Embed最新版评测 1. Qwen3-Embedding-4B介绍 Qwen3 Embedding 模型系列是 Qwen 家族中专为文本嵌入和排序任务打造的最新成员&#xff0c;基于强大的 Qwen3 系列基础模型构建。该系列覆盖了从 0.6B 到 8B 不同参数规模的模型…

作者头像 李华
网站建设 2026/4/17 1:04:28

MinerU自动化报告生成:Python脚本调用mineru命令

MinerU自动化报告生成&#xff1a;Python脚本调用mineru命令 PDF文档处理一直是技术写作、学术研究和企业知识管理中的高频痛点。多栏排版、嵌入图表、复杂公式、跨页表格……这些元素让传统OCR工具束手无策&#xff0c;人工重排又耗时费力。MinerU 2.5-1.2B 镜像的出现&#…

作者头像 李华
网站建设 2026/4/16 14:37:25

C盘空间不足但找不到大文件怎么办,用什么工具好呢?

theme: default themeName: 默认主题c盘空间不足是一个常见又烦人的问题&#xff0c;你检查了文件&#xff0c;但似乎没有什么大文件能解释那么多gb空间去了哪里&#xff0c;这些隐藏空间通常被系统文件&#xff0c;临时数据&#xff0c;以及旧的更新文件占据&#xff0c;它们在…

作者头像 李华