news 2026/4/16 10:57:42

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

verl训练卡顿?基于vLLM集成的高性能部署优化教程

verl训练卡顿&#xff1f;基于vLLM集成的高性能部署优化教程 1. verl 是什么&#xff1a;专为大模型后训练打造的强化学习框架 你是不是也遇到过这样的问题&#xff1a;用 RL 方法微调大语言模型时&#xff0c;训练过程慢得像在等咖啡煮好——GPU 利用率忽高忽低&#xff0c;…

作者头像 李华
网站建设 2026/4/15 5:40:24

探索大语言模型(LLM):提升 RAG 性能的全方位优化策略

在大语言模型&#xff08;LLM&#xff09;应用日益普及的今天&#xff0c;检索增强生成&#xff08;RAG&#xff09;技术已成为连接外部知识与模型推理的核心桥梁。然而&#xff0c;基础版 RAG 系统往往难以满足复杂业务场景的需求&#xff0c;如何提升其准确性、效率和鲁棒性成…

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

电商大促场景下的JVM调优实战案例

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 创建一个电商秒杀场景的JVM调优演示项目。模拟10000并发下的商品库存扣减&#xff0c;包含&#xff1a;1. 压力测试模块生成模拟流量 2. 不同GC策略(Parallel/CMS/G1)性能对比 3. …

作者头像 李华
网站建设 2026/4/16 10:21:52

一文速通「机器人3D场景表示」发展史

在本文中&#xff0c;上海交通大学、波恩大学等院校的研究团队全面总结了当前机器人技术中常用的场景表示方法。 随着机器人领域的飞速发展&#xff0c;我们有一个问题不断需要思考&#xff0c;究竟如何让机器人像人类一样理解世界&#xff0c;学习周围环境的表示。对于机器人…

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

如何用AI解决Python环境管理报错:EXTERNALLY-MANAGED-ENVIRONMENT

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 创建一个Python脚本&#xff0c;自动检测当前Python环境中的包管理冲突&#xff0c;特别是当出现EXTERNALLY-MANAGED-ENVIRONMENT错误时。脚本应能分析pip和系统包管理器的冲突&am…

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

AutoML对LLM:写给开发者的机器学习管线构建手册

本文将基于广泛对比探讨AutoML与LLM在管线构建中的各自优势&#xff0c;从性能、成本与可解释性等角度加以剖析&#xff0c;尝试找出最高效的解决方案。作为当前AI领域的绝对热点&#xff0c;大语言模型正以代码生成与深度推理等多自足方式&#xff0c;彻底改变我们与数据的交互…

作者头像 李华