Initial commit: Add cutPic, dexcel, and zip tools

This commit is contained in:
macro
2026-04-25 00:01:40 +08:00
commit 8fb110adbd
15 changed files with 2704 additions and 0 deletions
+283
View File
@@ -0,0 +1,283 @@
# cutpic - 图片裁切工具 🖼️
一个简单易用的命令行图片裁切工具,可以将图片按指定的行列数均匀分割成多个小图片。
## ✨ 功能特性
- 📐 **灵活分割**: 支持自定义水平和垂直分割数
- 🎯 **均匀裁切**: 自动计算每块尺寸,均匀分割图片
- 📁 **智能输出**: 默认在输入文件同级目录创建 dist 文件夹
- 🖼️ **多格式支持**: 支持 PNG, JPG, JPEG, BMP, GIF, WebP 等常见图片格式
- 🔢 **智能命名**: 自动生成带序号的文件名,方便识别和管理
-**高性能**: 基于 Rust 开发,处理速度快
## 📦 安装
### 从源码编译
```bash
cd cutPic
cargo build --release
```
编译后的可执行文件位于 `target/release/cutpic.exe`
### 添加到系统路径(可选)
`target/release/cutpic.exe` 复制到系统 PATH 目录,或将其所在目录添加到 PATH 环境变量中。
## 🚀 快速开始
### 基本用法
```bash
# 将图片分割成 3x2 的网格(共6块)
cutpic -i image.png -w 3 -h 2
# 将图片分割成 4x4 的网格(共16块)
cutpic -i photo.jpg -w 4 -h 4
```
### 指定输出目录
```bash
# 指定输出到 custom_output 目录
cutpic -i image.png -w 2 -h 2 --out ./custom_output
```
## 📖 命令参数
```bash
cutpic [OPTIONS] -i <INPUT>
参数:
-i, --input <FILE> 📁 输入图片路径(必需)
-w, --width <NUM> 📐 水平方向分割数(默认: 1)
-h, --height <NUM> 📏 垂直方向分割数(默认: 1)
--out <DIR> 📂 输出目录(默认: 输入文件同级的 dist 文件夹)
-h, --help 显示帮助信息
-V, --version 显示版本信息
```
## 💡 使用示例
### 示例 1: 制作拼图素材
将一张大图分割成 5x5 的拼图块:
```bash
cutpic -i puzzle.png -w 5 -h 5
```
**输出:**
- 生成 25 张图片
- 文件命名: `puzzle_1_25.png`, `puzzle_2_25.png`, ..., `puzzle_25_25.png`
- 输出位置: `./dist/` 目录
### 示例 2: 提取图标集中的单个图标
从 4x4 排列的图标集中提取每个图标:
```bash
cutpic -i icons.png -w 4 -h 4 --out ./individual_icons
```
**输出:**
- 生成 16 张单独的图标
- 输出到 `./individual_icons/` 目录
### 示例 3: 分割游戏精灵图(Sprite Sheet
横向分割角色动画帧(8 帧动画):
```bash
cutpic -i character.png -w 8 -h 1 --out ./animation_frames
```
**输出:**
- 生成 8 张动画帧图片
- 适合用于游戏开发中的帧动画
### 示例 4: 只进行水平分割
将横幅广告图分割成 4 部分:
```bash
cutpic -i banner.png -w 4 -h 1
```
### 示例 5: 只进行垂直分割
将长图分割成 3 段:
```bash
cutpic -i long-image.jpg -w 1 -h 3
```
## 📊 输出说明
### 文件命名规则
生成的文件遵循以下命名格式:
```
{原文件名}_{序号}_{总数}.{扩展名}
```
**示例:**
- 原文件: `image.png`
- 分割: 3x2 (共6块)
- 输出文件:
- `image_1_6.png` - 第1块
- `image_2_6.png` - 第2块
- ...
- `image_6_6.png` - 第6块
### 输出目录结构
```
项目目录/
├── image.png # 原始图片
└── dist/ # 默认输出目录
├── image_1_6.png
├── image_2_6.png
├── image_3_6.png
├── image_4_6.png
├── image_5_6.png
└── image_6_6.png
```
如果指定了 `--out` 参数:
```
项目目录/
├── image.png # 原始图片
└── my_output/ # 自定义输出目录
├── image_1_6.png
├── image_2_6.png
└── ...
```
## ⚙️ 工作原理
1. **加载图片**: 读取输入图片并获取尺寸信息
2. **计算尺寸**:
- 每块宽度 = 总宽度 ÷ 水平分割数
- 每块高度 = 总高度 ÷ 垂直分割数
3. **逐块裁切**: 按行列顺序遍历,裁切每一块
4. **处理边界**: 最后一行/列可能包含剩余像素,自动调整尺寸
5. **保存文件**: 按命名规则保存到输出目录
### 边界处理示例
假设图片尺寸为 100x100 像素,分割为 3x3
- 理论每块: 33.33 x 33.33 像素
- 实际处理:
- 第1、2块: 33 x 33 像素
- 第3块: 34 x 34 像素(包含剩余像素)
这样确保所有像素都被保留,不会丢失任何内容。
## 🎯 应用场景
### 1. 游戏开发
- 分割 Sprite Sheet 为单独的动画帧
- 提取瓦片地图(Tilemap)的单个瓦片
- 处理角色、道具等资源图片
### 2. 网页设计
- 将大图分割成小块用于懒加载
- 制作图片拼图效果
- 优化大图的加载性能
### 3. 社交媒体
- 制作 Instagram 九宫格图片
- 分割长图为适合移动端查看的多张图片
- 创建有趣的图片分割效果
### 4. 数据处理
- 批量处理扫描文档
- 分割大幅面图纸
- 处理卫星图像或地图切片
### 5. 教育用途
- 制作教学用拼图
- 分解复杂图表
- 创建互动学习材料
## ⚠️ 注意事项
1. **图片格式**: 输出格式与输入格式相同
2. **最小分割**: 分割数为 1x1 时,会生成原图的副本
3. **内存使用**: 处理超大图片时会占用较多内存
4. **文件数量**: 分割数越多,生成的文件越多,注意磁盘空间
5. **索引顺序**: 文件按先行后列的顺序编号(从左到右,从上到下)
## 🔧 技术细节
### 依赖库
- **clap**: 命令行参数解析
- **image**: 图片处理和裁切
### 性能特点
- 使用 Rust 编写,性能优异
- 支持多线程(取决于 image 库的实现)
- 内存效率高,逐块处理
### 平台支持
- ✅ Windows
- ✅ macOS
- ✅ Linux
## 📝 完整示例工作流
### 工作流 1: 制作 Instagram 九宫格
```bash
# 1. 准备一张正方形图片(建议 1080x1080 或更高)
# 2. 分割成 3x3 的九宫格
cutpic -i instagram-post.png -w 3 -h 3 --out ./instagram-grid
# 3. 上传生成的 9 张图片到 Instagram(按逆序上传以获得正确显示顺序)
```
### 工作流 2: 提取游戏资源
```bash
# 1. 从游戏中提取 sprite sheet
# 2. 分析 sprite sheet 的布局(例如 8x4 排列)
cutpic -i spritesheet.png -w 8 -h 4 --out ./game-assets
# 3. 重命名生成的文件为有意义的名称
# 4. 在游戏引擎中使用这些单独的资源
```
### 工作流 3: 创建拼图游戏
```bash
# 1. 选择一张有趣的图片
# 2. 根据难度选择分割数(简单: 3x3, 中等: 5x5, 困难: 8x8
cutpic -i puzzle-image.jpg -w 5 -h 5 --out ./puzzle-pieces
# 3. 打乱文件顺序
# 4. 开发拼图游戏逻辑
```
## 🤝 贡献
欢迎提交 Issue 和 Pull Request
## 📄 许可证
本项目采用 MIT 许可证。
## 🙏 致谢
感谢以下开源项目:
- [clap](https://github.com/clap-rs/clap) - 优秀的命令行参数解析库
- [image](https://github.com/image-rs/image) - 强大的图片处理库
---
**Made with ❤️ using Rust**