# image-compress **Repository Path**: crane2017/image-compress ## Basic Information - **Project Name**: image-compress - **Description**: 一个基于 Node.js 的图片无损压缩工具,支持 JPEG、PNG、GIF 和 SVG 格式的压缩。 - **Primary Language**: Unknown - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-11-18 - **Last Updated**: 2025-11-18 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 图片无损压缩工具 一个基于 Node.js 的图片无损压缩工具,支持 JPEG、PNG、GIF 和 SVG 格式的压缩。 ## 🎯 压缩效果验证结果 ✅ **已验证真实的压缩能力** - 通过系统工具实现有效的图片压缩 ### 支持的格式和压缩工具 - **JPEG格式**: ✅ 支持 (使用系统 MozJPEG 工具: `djpeg` + `cjpeg`) - **PNG格式**: ✅ 支持 (使用系统 `optipng` 工具) - **GIF格式**: ✅ 支持 (使用系统 `gifsicle` 工具) - **SVG格式**: ⚠️ 基础支持 (使用文本优化,需要安装 `svgo` 获得更好效果) ### 实测压缩效果示例 - **JPEG文件**: 175.24 KB → 165.03 KB (节省 5.8%) - **PNG文件**: 27.86 KB → 27.67 KB (节省 0.7%) ## 功能特点 - 🖼️ 支持多种图片格式:JPEG、PNG、GIF、SVG - 🗜️ **真实的压缩效果**,非简单文件复制 - 📊 显示压缩前后的文件大小对比 - 📁 支持批量压缩整个目录 - 🎯 简单易用的命令行和Web界面 ## 安装 ```bash # 克隆仓库 git clone cd image-compress # 安装依赖 npm install ``` ## 使用方法 ### Web 界面使用(推荐) 启动 Web 服务器: ```bash npm run web ``` 然后在浏览器中访问 http://localhost:3000,您可以: - 拖拽或点击上传图片文件 - 批量压缩多个图片 - 查看压缩前后的对比 - 下载压缩后的图片 ### 交互式命令行使用 ```bash npm start ``` ### 命令行使用 ```bash npm run cli -- [输入目录] [输出目录] ``` ### 程序化使用 ```javascript const ImageCompressor = require('./index.js'); const compressor = new ImageCompressor(); compressor.compressImages('./input', './output') .then(result => { console.log('压缩完成:', result); }) .catch(error => { console.error('压缩失败:', error); }); ``` ## 技术栈 ### 核心压缩引擎 - **系统压缩工具**: 使用系统安装的专业压缩工具,确保真正的压缩效果 - **[MozJPEG](https://github.com/mozilla/mozjpeg)**: 优化的JPEG编码器,提供更好的压缩比 - **[OptiPNG](http://optipng.sourceforge.net/)**: PNG优化工具,无损压缩PNG文件 - **[Gifsicle](https://github.com/kohler/gifsicle)**: GIF优化工具,减少GIF文件大小 - **[SVGO](https://github.com/svg/svgo)**: SVG优化工具(可选,可提升SVG压缩效果) ### Web框架 - [express](https://github.com/expressjs/express) - Web 服务器框架 - [multer](https://github.com/expressjs/multer) - 文件上传处理 - [inquirer](https://github.com/SBoudrias/Inquirer.js) - 命令行交互 - [chalk](https://github.com/chalk/chalk) - 终端颜色输出 ## 系统要求 ### 必需的系统工具 确保系统中安装以下压缩工具: ```bash # macOS (使用 Homebrew) brew install mozjpeg optipng gifsicle # Ubuntu/Debian (使用 apt) sudo apt-get install mozjpeg optipng gifsicle # 可选安装 (增强SVG压缩) brew install svgo ``` ## 示例输出 ``` 🖼️ 图片无损压缩工具 支持格式: JPEG, PNG, GIF, SVG 🔧 可用压缩工具: { JPEG: [ 'cjpeg', 'djpeg' ], PNG: [ 'optipng' ], GIF: [ 'gifsicle' ] } 📁 找到 3 个图片文件 📊 处理: test-large.jpg (175.24 KB) 🖼️ 压缩JPEG: test-large.jpg ✅ 使用MozJPEG压缩成功 ✅ 结果: 165.03 KB (节省 5.8%) 📊 处理: test2.png (27.86 KB) 🖼️ 压缩PNG: test2.png ✅ 使用optipng压缩成功 ✅ 结果: 27.67 KB (节省 0.7%) 🎯 压缩完成! 原始大小: 203.19 KB 压缩大小: 192.70 KB 节省空间: 10.49 KB (5.2%) ``` ## 许可证 ## 🚨 问题修复历史 本项目经过详细测试和验证,解决了之前的"压缩无效"问题: **2024-11-17 修复记录:** - ✅ 验证了真实的压缩效果(JPEG节省5.8%,PNG节省0.7%) - ✅ 修复了系统工具调用的bug - ✅ 优化了压缩参数设置 - ✅ 添加了详细的格式支持验证 **关键发现:** - 使用 `imagemin-mozjpeg` 包无法获得真正的压缩效果 - **必须使用系统自带的MozJPEG工具** (`djpeg` + `cjpeg`) - 质量参数对压缩效果有决定性影响(建议使用 `-quality 65`) ## 压缩质量使用建议: - 极致压缩: 适合缩略图、预览图 - 高压缩: 适合网页图片、移动端显示 - 标准压缩: 日常使用,平衡大小和质量 - 高质量: 适合高质量展示、印刷 - 最佳质量: 专业摄影、重要文档 - 无损优化: 仅优化元数据,保持原质量 ## 许可证 ISC