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/17 4:10:55

学术开题“神器”大揭秘:书匠策AI如何让你的论文赢在起点

在学术研究的道路上&#xff0c;开题报告是至关重要的一步。它就像一座灯塔&#xff0c;为后续的研究指引方向&#xff1b;又似一张蓝图&#xff0c;勾勒出整个研究项目的框架。然而&#xff0c;撰写开题报告并非易事&#xff0c;许多研究者常常在选题、文献综述、研究规划等方…

作者头像 李华
网站建设 2026/4/18 0:31:06

为什么SGLang部署总失败?RadixAttention适配问题解决指南

为什么SGLang部署总失败&#xff1f;RadixAttention适配问题解决指南 1. 问题现象&#xff1a;不是模型不行&#xff0c;是环境没对上 你是不是也遇到过这样的情况&#xff1a; 模型本身在vLLM或HuggingFace Transformers里跑得好好的&#xff0c;一换到SGLang就卡在启动阶段…

作者头像 李华
网站建设 2026/4/18 0:12:07

多重利好共振,基于AI算法的金价预测模型直指5000美元临界点

摘要&#xff1a;本文通过AI模型对市场动态数据的深度解析&#xff0c;结合宏观经济指标与地缘风险评估算法&#xff0c;分析黄金突破4900美元价格波动背后的多维度驱动因素。周四&#xff08;1月22日&#xff09;&#xff0c;基于多因子量化分析的AI交易系统捕捉到金价在多重利…

作者头像 李华
网站建设 2026/4/18 2:01:03

AI驱动下的黄金定价范式重构:高盛5400美元目标价背后的量化逻辑

摘要&#xff1a;本文通过引入AI多因子分析模型与机器学习预测框架&#xff0c;结合高盛最新黄金5400目标价调整报告&#xff0c;深度解析央行与私人部门需求对金价中枢的量化影响机制&#xff0c;分析全球政策风险溢价在黄金定价中的动态嵌入过程。黄金市场的定价机制正经历AI…

作者头像 李华
网站建设 2026/4/18 1:57:42

YOLO26训练教程:基于官方镜像的全流程部署实战

YOLO26训练教程&#xff1a;基于官方镜像的全流程部署实战 最新 YOLO26 官方版训练与推理镜像&#xff0c;专为高效落地设计。它不是简单打包的环境&#xff0c;而是一套经过完整验证、开箱即用的端到端解决方案——从模型加载、图片推理、数据集配置&#xff0c;到完整训练流…

作者头像 李华
网站建设 2026/4/18 1:58:41

Martech视角下AI智能名片链动2+1模式S2B2C商城系统的归类整合与应用研究

摘要&#xff1a;在数字化营销与新零售深度融合的背景下&#xff0c;Martech&#xff08;营销技术&#xff09;已成为企业突破增长瓶颈的核心支撑&#xff0c;但其工具碎片化、功能割裂等问题制约了应用价值的最大化。AI智能名片链动21模式S2B2C商城系统基于Martech机构的技术与…

作者头像 李华