img-squeeze
一个用 Rust 编写的快速、高效的图片压缩工具,支持多线程并行处理、批量压缩、多种图片格式和去中心化存储。
✨ 特性
- 🖼️ 多格式支持 - 支持 JPEG、PNG、WebP、BMP、TIFF、GIF 格式
- 🎯 质量调整 - 可自定义压缩质量 (1-100)
- 📏 尺寸调整 - 可调整图片宽度和高度
- 🚀 多线程处理 - 基于 Rayon 的高性能并行处理
- 📦 批量处理 - 支持目录批量压缩和文件通配符
- 📊 详细统计 - 实时进度显示和性能统计
- 🔧 灵活配置 - 自定义线程数和递归处理
- 🎨 友好界面 - 清晰的进度提示和错误信息
- 🚀 PNG 优化 - 使用 oxipng 库进行高级 PNG 压缩优化
- 🌐 Walrus 上传 - 支持上传到 Walrus 去中心化存储网络
📦 安装
从源码构建
# 克隆仓库
# 构建项目
# 将二进制文件添加到 PATH
使用 Cargo 安装
🚀 使用方法
基本压缩
# 基本压缩(自动线程数)
# 查看帮助
多线程压缩
# 指定线程数压缩
# 自动线程数(默认,根据CPU核心数)
高级选项
# 指定压缩质量 (1-100, 默认 80)
# 调整图片尺寸
# 指定输出格式
# 多线程 + 高级选项组合
批量处理(新增功能)
# 批量压缩整个目录
# 批量压缩(递归处理子目录)
# 批量压缩 + 线程控制
# 批量压缩 + 质量和尺寸调整
# 批量压缩 + 格式转换
# 使用通配符批量处理
Walrus 上传(新增功能)
# 上传到 Walrus(默认设置)
# 上传到自定义 Walrus 节点
# 上传并设置存储时长(epochs)
# 临时上传(1 epoch,约24小时后自动删除)
# 组合选项
临时文件管理:
- 使用
-t标志上传临时文件,24小时后自动删除 - 适合测试、开发、临时分享等场景
- 无需手动删除,系统自动清理
上传成功后,您将获得:
- 🆔 Blob ID - 用于唯一标识上传的文件
- 🌐 访问 URL - 直接访问上传文件的链接
- 📊 文件信息 - 文件大小和存储详情
输出示例:
)
临时上传示例:
)
)
查看图片信息
# 查看图片详细信息
输出示例:
批量处理性能统计
批量处理完成后会显示详细的性能统计:
📖 命令详解
compress 命令
压缩图片文件。
参数:
INPUT- 输入图片文件路径OUTPUT- 输出图片文件路径
选项:
-q, --quality <QUALITY>- 压缩质量 (1-100),默认 80-w, --width <WIDTH>- 最大宽度(像素)-H, --height <HEIGHT>- 最大高度(像素)-f, --format <FORMAT>- 输出格式 (jpeg, png, webp)
upload 命令
上传图片到 Walrus 去中心化存储网络。
参数:
INPUT- 要上传的图片文件路径
选项:
-a, --aggregator-url <AGGREGATOR_URL>- Walrus aggregator URL-p, --publisher-url <PUBLISHER_URL>- Walrus publisher URL-e, --epochs <EPOCHS>- 存储时长(epochs)
info 命令
显示图片的详细信息。
参数:
INPUT- 要分析的图片文件路径
🛠️ 开发
环境要求
- Rust 1.70+
- Cargo
构建项目
# 开发构建
# 发布构建
# 运行测试
# 检查代码
项目结构
img-squeeze/
├── src/
│ ├── main.rs # 主程序入口
│ ├── cli.rs # 命令行接口
│ ├── processing.rs # 核心压缩逻辑
│ ├── batch.rs # 批量处理
│ ├── info.rs # 图片信息分析
│ ├── walrus.rs # Walrus 存储集成
│ └── error.rs # 错误处理
├── Cargo.toml # 项目配置
├── LICENSE # MIT 许可证
├── README.md # 项目说明
├── CLAUDE.md # Claude Code 开发指南
└── WALRUS_URLS.md # Walrus 网络地址说明
📊 性能特点
- 内存效率 - 使用 Rust 的零成本抽象和内存安全
- 处理速度 - 基于高性能的
image库 - 并行处理 - 支持多线程图片处理(基于 Rayon)
- PNG 优化 - 使用 oxipng 进行无损 PNG 压缩,支持 Zopfli 算法
- 流式处理 - 大文件的流式处理(未来版本)
- 去中心化存储 - 集成 Walrus 网络,支持区块链存储
- 异步上传 - 基于 tokio 的异步文件上传
- 网络优化 - 智能重试和错误处理机制
🤝 贡献
欢迎贡献代码!请遵循以下步骤:
- Fork 本仓库
- 创建特性分支 (
git checkout -b feature/AmazingFeature) - 提交更改 (
git commit -m 'Add some AmazingFeature') - 推送到分支 (
git push origin feature/AmazingFeature) - 创建 Pull Request
📄 许可证
本项目采用 MIT 许可证 - 详见 LICENSE 文件。
🙏 致谢
- Rust - 强大的系统编程语言
- image - Rust 图片处理库
- oxipng - 高级 PNG 压缩优化库
- clap - 命令行参数解析库
- indicatif - 进度条库
- walrus_rs - Walrus 去中心化存储客户端库
- tokio - Rust 异步运行时
- Walrus Network - 去中心化存储网络
📞 支持
如果您遇到问题或有建议,请:
- 查看 Issues
- 创建新的 Issue
- 发送邮件至:your.email@example.com
注意:这是一个开源项目,欢迎任何形式的贡献和反馈!