Skip to content

Latest commit

 

History

1 Commit

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

PhotoSelect

PhotoSelect 是一款面向 Windows 的轻量级原生图片筛选工具。它使用 Rust、Win32 API 和 GDI 构建,专注于通过键盘快速完成大量照片的浏览、评分、淘汰和导出。

功能

  • 递归扫描文件夹中的 JPG、JPEG、PNG、WebP、BMP、GIF 和 TIFF 图片
  • 响应式缩略图网格和虚拟滚动
  • 大图浏览及相邻图片预加载
  • 05 星级评分与按评分排序
  • 标记移除、撤销恢复和一键导出留存图片
  • EXIF 内嵌缩略图优先加载
  • GDI 双缓冲绘制,避免界面闪烁
  • 8 个缩略图工作线程和 4 个大图解码线程

PhotoSelect 的“移除”操作只改变当前会话中的筛选状态,不会删除原始照片。导出时,程序会把所有未移除图片复制到用户选择的目录。

快捷键

快捷键 功能
F 选择图片文件夹
Space 切换网格和大图模式
Esc 从大图模式返回网格
/ 切换选中图片或翻页
标记移除
恢复最近一次移除
05 设置星级评分
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 run

项目结构

src/
├── 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
  • 图片处理:imagekamadak-exif
  • 并发:标准库线程和 MPSC 通道
  • 大图缩放:Lanczos3,最长边限制为 4096 像素

当前限制为最多加载 10,000 张图片、目录递归深度最多 5 层。RAW 文件解析尚未接入当前版本。

贡献

欢迎提交 Issue 或 Pull Request。提交代码前请先运行:

cargo fmt --check
cargo check --locked

许可证

本项目使用 MIT License

About

Lightweight native Windows photo culling tool built with Rust, Win32 API, and GDI.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages