# python_image_compress **Repository Path**: enzoism/python_image_compress ## Basic Information - **Project Name**: python_image_compress - **Description**: python_image_compress - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-08-25 - **Last Updated**: 2026-08-25 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 图片压缩工具 (Python Image Compress) 一个基于 Flask 的图片压缩网页应用,复现 [zippic.cn](https://zippic.cn/zh) 的核心功能。 ## 功能特性 - ✅ **支持多种格式**: JPEG、PNG、WebP、GIF - ✅ **Web 界面**: 基于 Flask 的网页应用,浏览器访问即可使用 - ✅ **拖动对比**: 滑块对比压缩前后的图片质量 - ✅ **压缩统计**: 显示压缩率、节省空间、原始大小、压缩后大小 - ✅ **质量调节**: 可自定义压缩质量 (10-100) - ✅ **格式转换**: 支持 JPEG/PNG/WebP 输出格式转换 - ✅ **优化的 PNG 压缩**: 使用颜色深度减少实现有效压缩 ## 快速开始 ### 安装依赖 ```bash # 安装 uv (如果还没安装) curl -LsSf https://astral.sh/uv/install.sh | sh # 安装项目依赖 uv pip install flask pillow ``` ### 启动服务 ```bash # 启动 Flask 应用 uv run python app.py ``` ### 访问应用 打开浏览器访问: **http://127.0.0.1:5001** ## 项目结构 ``` python_image_compress/ ├── app.py # Flask 主应用 ├── templates/ │ └── index.html # 页面模板 ├── static/ │ ├── css/ │ │ └── style.css # 样式文件 │ └── js/ │ └── app.js # 前端交互逻辑 ├── src/ │ └── python_image_compress/ │ ├── __init__.py # 模块初始化 │ └── compressor.py # 图片压缩核心逻辑 ├── pyproject.toml # 项目配置 └── README.md ``` ## API 接口 ### POST /api/compress 压缩图片 **请求参数:** ```json { "image": "data:image/jpeg;base64,...", "quality": 85, "format": "JPEG" } ``` **响应:** ```json { "success": true, "compressed_image": "data:image/jpeg;base64,...", "original_size": 2048000, "compressed_size": 512000, "compression_ratio": 75.0, "saved_space": 1536000, "format": "JPEG", "ext": "jpg" } ``` ### POST /api/download 下载压缩后的图片 **请求参数:** ```json { "image": "data:image/jpeg;base64,...", "filename": "compressed_image.jpg" } ``` **响应:** 返回图片文件 ## 核心模块说明 ### compressor.py - 图片压缩核心 ```python from src.python_image_compress import ImageCompressor, CompressResult # 创建压缩器 compressor = ImageCompressor(quality=85) # 压缩文件 result = compressor.compress_file('input.jpg', output_format='JPEG') # 查看结果 print(f"原始大小: {result.format_size(result.original_size)}") print(f"压缩后大小: {result.format_size(result.compressed_size)}") print(f"压缩率: {result.compression_ratio:.2f}%") print(f"节省空间: {result.format_size(result.saved_space)}") ``` ### 主要类和方法 #### ImageCompressor - `__init__(quality=85)`: 初始化压缩器,设置默认质量 - `compress_file(image_path, output_format, quality)`: 压缩图片文件 - `compress_jpeg(image, quality)`: 压缩 JPEG 格式 - `compress_png(image, quality)`: 压缩 PNG 格式(使用颜色深度减少) - `compress_webp(image, quality)`: 压缩 WebP 格式 - `load_image(image_path)`: 加载图片文件 - `load_image_from_bytes(image_data)`: 从字节数据加载图片 #### CompressResult 压缩结果类,包含以下属性: - `original_size`: 原始文件大小 (bytes) - `compressed_size`: 压缩后文件大小 (bytes) - `original_image`: 原始 PIL Image 对象 - `compressed_image`: 压缩后 PIL Image 对象 - `format`: 输出格式 - `compression_ratio`: 压缩率 (%) - `saved_space`: 节省的空间 (bytes) - `format_size(size)`: 格式化文件大小显示 ## 界面功能 1. **上传区域**: 拖拽或点击选择图片 2. **控制面板**: 调节压缩质量和输出格式 3. **对比区域**: 拖动滑块查看压缩前后效果 4. **统计信息**: 显示压缩率和节省空间 5. **下载功能**: 一键下载压缩后的图片 ## 压缩策略 ### JPEG 压缩 - 使用 Pillow 的 quality 参数控制压缩质量 - 范围: 10-100,数值越小压缩率越高 ### PNG 压缩 - **质量 90+**: 保持原样 - **质量 70-89**: 转换为 256 色调色板 - **质量 50-69**: 转换为 128 色调色板 - **质量 30-49**: 转换为 64 色调色板 - **质量 <30**: 转换为 32 色调色板 ### WebP 压缩 - 使用 quality 参数和 method=6 实现高效压缩 - 支持透明度通道 ## 技术栈 - **Python 3.11+** - **Flask**: Web 框架 - **Pillow**: 图片处理库 - **HTML/CSS/JavaScript**: 前端界面 ## 与 zippic.cn 的对比 | 功能 | zippic.cn | 本项目 | |------|-----------|--------| | 多格式支持 | ✅ | ✅ | | Web 界面 | ✅ | ✅ | | 拖动对比 | ✅ | ✅ | | 压缩统计 | ✅ | ✅ | | 批量压缩 | ✅ | ❌ | | AVIF 格式 | ✅ | ❌ | | 开源 | ❌ | ✅ | ## 待优化功能 - [ ] 添加批量压缩功能 - [ ] 支持 AVIF 格式 - [ ] 添加预设配置 (高质量/平衡/高压缩) - [ ] 压缩预览优化 - [ ] EXIF 信息保留选项 - [ ] 部署到生产环境 ## License MIT License