PhotoSelect 是一款面向 Windows 的轻量级原生图片筛选工具。它使用 Rust、Win32 API 和 GDI 构建,专注于通过键盘快速完成大量照片的浏览、评分、淘汰和导出。
- 递归扫描文件夹中的 JPG、JPEG、PNG、WebP、BMP、GIF 和 TIFF 图片
- 响应式缩略图网格和虚拟滚动
- 大图浏览及相邻图片预加载
0–5星级评分与按评分排序- 标记移除、撤销恢复和一键导出留存图片
- EXIF 内嵌缩略图优先加载
- GDI 双缓冲绘制,避免界面闪烁
- 8 个缩略图工作线程和 4 个大图解码线程
PhotoSelect 的“移除”操作只改变当前会话中的筛选状态,不会删除原始照片。导出时,程序会把所有未移除图片复制到用户选择的目录。
| 快捷键 | 功能 |
|---|---|
F |
选择图片文件夹 |
Space |
切换网格和大图模式 |
Esc |
从大图模式返回网格 |
← / → |
切换选中图片或翻页 |
↓ |
标记移除 |
↑ |
恢复最近一次移除 |
0–5 |
设置星级评分 |
R |
按评分降序排列 |
S |
导出所有留存图片 |
鼠标滚轮可在网格模式中滚动,在大图模式中翻页;大图模式下也可以点击画面左右区域翻页。
- Windows 10 或 Windows 11
- 从源码构建需要稳定版 Rust 工具链
git clone https://github.com/Inginnng/PhotoSelect.git
cd PhotoSelect
cargo build --release构建产物位于:
target\release\photoselect.exe
开发阶段可以运行:
cargo check --locked
cargo runsrc/
├── main.rs # 程序入口
├── window.rs # Win32 窗口、消息循环和 GDI 渲染
└── core/
├── image_data.rs # 图片及筛选状态
├── thumbnail.rs # 缩略图与大图解码
├── file_ops.rs # 文件扫描与复制工具
└── grouping.rs # 实验性的相似图片分组算法
icons/ # 应用图标
grouping.rs 已包含基于颜色直方图和余弦相似度的实验实现,但尚未接入当前界面。
- UI:Win32 API 与
windows-rs - 渲染:GDI 离屏双缓冲和
BitBlt - 图片处理:
image与kamadak-exif - 并发:标准库线程和 MPSC 通道
- 大图缩放:Lanczos3,最长边限制为 4096 像素
当前限制为最多加载 10,000 张图片、目录递归深度最多 5 层。RAW 文件解析尚未接入当前版本。
欢迎提交 Issue 或 Pull Request。提交代码前请先运行:
cargo fmt --check
cargo check --locked本项目使用 MIT License。