目录
[一、写在前面:Picasa 停更之后,本地相册还缺一款"顺手"的工具](#一、写在前面:Picasa 停更之后,本地相册还缺一款"顺手"的工具)
[二、技术选型:为什么用 Rust 从零重写](#二、技术选型:为什么用 Rust 从零重写)
[三、整体架构:后台 worker + SQLite 的"轻前端、重后台"设计](#三、整体架构:后台 worker + SQLite 的"轻前端、重后台"设计)
[六、重复照片检测:基于 dHash 的感知哈希](#六、重复照片检测:基于 dHash 的感知哈希)
[七、元数据与兼容性:EXIF、XMP 与 picasa.ini](#七、元数据与兼容性:EXIF、XMP 与 picasa.ini)
[九、离线 AI 能力:OCR、人脸聚类与 CLIP 语义搜索](#九、离线 AI 能力:OCR、人脸聚类与 CLIP 语义搜索)
一、写在前面:Picasa 停更之后,本地相册还缺一款"顺手"的工具
Google Picasa 曾是桌面端口碑最好的图片管理与处理软件之一,快速启动、简洁交互、流畅浏览是它最被人记住的几个特点。2016 年官方停止更新并下架后,桌面端其实一直缺一款能真正接住这份体验的工具------不少同类产品要么功能臃肿、加载缓慢,要么强制绑定云端同步,以隐私为代价换取便利。
马良(Maliang,取名自"神笔马良")就是冲着填补这个空缺来的:它用 Rust 语言从零重写,在保留 Picasa 3 核心交互逻辑的基础上,补上了现代的性能优化与 AI 能力。
**📥︎ 马良 Maliang - 以AI之笔,续写 Picasa >>**Google Picasa 精神续作 Rust 重写的离线本地相册工具
https://dl.relinkclan.com/maliang它给自己的定位很清楚------原生、离线、隐私优先的本地桌面照片管理工具,所有数据都保存在用户本机,不上传云端、不扫描隐私数据。
项目目前发布了 v0.1.0 早期版本,仅提供 64 位 Windows 编译包,主程序体积约 38M,下载后免安装即可运行。

二、技术选型:为什么用 Rust 从零重写
把一款老牌软件的体验"重做一遍",选语言是第一个绕不开的决定。
马良选择 Rust 作为核心开发语言,主要看中几点:
- 内存安全:Rust 的所有权与借用检查在编译期就挡掉了大量内存越界、数据竞争类问题,而图片管理软件恰恰要长时间高频地读写文件与缓冲区,安全性收益很直接;
- 零成本抽象:高层写法不会带来额外运行时开销,配合高性能特性,运行效率可以逼近原生 C++;
- 无 GC、体积可控:没有垃圾回收带来的停顿,也是主程序能压到 38M、做到秒级启动的重要原因。
换句话说,它没有依赖 Electron 之类的重型运行时,而是走了一条"把性能做进底层"的路子。
三、整体架构:后台 worker + SQLite 的"轻前端、重后台"设计
马良整体采用前后端分离的 worker 架构,思路是把界面和耗时任务彻底切开:
- 后台常驻独立 worker 线程,专门处理 IO 密集型工作,比如缩略图生成、目录扫描、人脸检测等,避免这些任务阻塞 UI,界面始终跟手;
- 核心数据用 SQLite 构建本地索引,兼顾查询效率与数据可靠性,且天然是本地文件、便于迁移与备份;
- 图像处理全部基于自研原生像素算子实现,不依赖 OpenCV 这类重型框架,既控制了体积,也加快了启动速度。
这套结构的关键在于:用户感受到的是"点哪哪响",而重活都被悄悄挪到了后台。
四、照片索引与文件系统监控:三档门控机制
索引是本地相册的地基。马良首次启动时会递归扫描用户指定的本地目录,提取文件元数据与 EXIF 信息,写进 SQLite 索引库。真正有难度的是"扫完之后怎么持续感知变化",它用了一套三档门控的目录监控机制:
- 事件驱动去抖:监听文件系统事件,短时间内的高频变动合并处理,避免抖动;
- 定时轮询:作为兜底,定期比对目录状态,防止事件丢失;
- 基线全量校验:以一份基线快照做全量核对,纠正长期运行后的索引漂移。
三者叠加,既保证新增、修改、删除的文件能被近实时感知,又避免因文件系统事件丢失导致的索引不一致。浏览层面则提供两套视图:时间线视图按拍摄日期自动聚合,复刻 Picasa 的经典排序;文件夹视图保留原生目录结构,按文件系统层级浏览。
五、四档缩略图缓存:流畅滚动浏览的关键
滚动卡顿几乎是所有相册软件的顽疾,根源在于大图解码太贵。马良的解法是一套四档分级缩略图体系:
- Small 96px:网格视图快速预览;
- Normal 256px:常规列表展示;
- Big 512px:单图预览的低清占位;
- Preview 1024px:全屏浏览的快速加载。
后台 worker 会按优先级异步生成并缓存各档缩略图。滚动界面时,优先加载低清占位图,再渐进式替换为高清图,从根本上避免了"一次性加载大量大图"带来的卡顿。
六、重复照片检测:基于 dHash 的感知哈希
这是原版 Picasa 没有、而马良补上的一项实用能力。它采用 **dHash(差异感知哈希)** 做近似重复图片检测:
- 为每张图片生成 64 位感知哈希值,再通过汉明距离衡量视觉相似度;
- 能识别出经过缩放、压缩、轻微裁剪后的重复照片,帮助用户清理磁盘空间;
- 整个比对过程完全在本地离线完成,不会上传任何图片内容。
相比只按文件名或文件大小判重,感知哈希的思路更贴近"人眼看到的是不是同一张图"。
七、元数据与兼容性:EXIF、XMP 与 picasa.ini
一款本地相册好不好用,很大程度上取决于它和既有生态的兼容程度:
- EXIF 完整读取:拍摄参数、相机型号、拍摄时间、GPS 经纬度等都能解析;
- GPS 轨迹导出:支持把 GPS 信息导出为 KML 格式,可在常见地球类工具中查看拍摄轨迹;
- 兼容 picasa.ini:能够读写原版 Picasa 保存的标签、星标等元数据,与旧版 Picasa 无缝互通,老用户的整理成果不会丢;
- XMP 元数据镜像:把编辑操作与标签写入标准 XMP sidecar 文件,方便与其他专业修图工具交换数据。
这几项加起来,意味着用户不必"从零再整理一遍相册"。
八、图像处理引擎:一套算子化的滤镜体系
马良自研了一套轻量级像素处理引擎,不依赖重型图像库就能完成各类效果,设计上有几个层次:
- 基础调整:基于自然三次样条曲线的色阶调整,支持曝光、对比度、饱和度等基础参数;
- 一键增强:除常规的黑白、棕褐、锐化外,还自主设计了暖调、冷调、暗角、褪色、伽马校正、线性模糊、焦点柔化、方向性亮度/饱和度/锐度等效果;
- 算子体系:所有效果都由可复用的基础算子组合而成,包括混合模式、遮罩运算、盒式模糊、线性模糊、渐变映射、边缘检测、变焦模糊、色阶压缩、边框、投影、旋转等;
- 风格配方系统:内置约 28 组成套滤镜,覆盖浓郁胶片、画框投影、变焦拖影、胶片颗粒、强动态 HDR、玩具相机、柔光、铅笔素描、交叉冲印、六十年代复古等。每个配方本质是一串固定顺序的像素操作,强度可由混合比例统一控制,参数集中在资源包里便于后续调校;
- 非破坏性编辑:编辑操作只保存参数,原始文件始终不动,导出时才把效果烘焙进新文件。
这套设计的巧妙之处在于"算子 + 配方"的分层:底层算子尽量少而通用,上层风格靠排列组合来堆,扩展新滤镜的成本很低。
九、离线 AI 能力:OCR、人脸聚类与 CLIP 语义搜索
值得单独说的是,马良的 AI 能力全部为本地离线运行,无需联网、不上传数据,默认随程序启用:
- OCR 文字识别:离线识别照片里的文字内容,支持"按文字搜索照片";
- 人脸半自动聚类:自动给出归类建议,用户确认后完成分组,聚类结果还会根据命名反馈持续优化,越用越准;
- CLIP 语义搜索:基于跨模态语义检索模型,支持自然语言找图,比如直接输入"有猫的照片""海边日落的照片",无需提前手动打标签。
把 AI 放到端侧跑,牺牲的是模型规模,换来的是隐私与响应速度,对于"私人相册"这个场景,取舍是合理的。
十、设备导入与多媒体支持
在设备接入上,马良针对 Windows 平台做了适配:
- 通过 **WPD(Windows Portable Devices)/ WIA(Windows Image Acquisition)** 标准协议接入相机、手机、U 盘等便携设备,支持直接从设备导入照片;
- 识别常见视频格式,自动抽取视频缩略图,并调用系统默认播放器播放视频文件。
十一、项目现状
项目目前处于 v0.1.0 早期开发阶段,核心的照片扫描、索引、缩略图、浏览链路已经可用,人脸检测、基础编辑、重复检测等功能也已上线,更多高级能力仍在持续迭代。