三亩地 三亩地SAN MU DI · CODE DIARY
ARTICLE DETAIL

日记详情

真实记录编程学习的某一天,欢迎挑你感兴趣的翻一翻。

AntiDupl 图片去重:一次扫描,找回被重复照片占用的几十GB磁盘空间

AntiDupl 图片去重:一次扫描,找回被重复照片占用的几十GB磁盘空间

AntiDupl 图片去重:一次扫描,找回被重复照片占用的几十GB磁盘空间

【免费下载链接】AntiDuplA program to search similar and defect pictures on the disk项目地址: https://gitcode.com/gh_mirrors/an/AntiDupl

你可能以为自己的图片库只是"有点乱"。直到某天你盯着磁盘剩余空间发呆,才意识到:手机相册三年备份、设计素材反复下载、截图随手存了又存——同一张图,往往以三四种文件名散落在不同文件夹里。手动删?几千张图根本看不完,还容易误删唯一原件。

这类问题正好是AntiDupl的看家本领。这款免费开源工具不看文件名、不比文件大小,而是直接比对图片内容本身,能找出"完全一样"和"看起来很像"的图片,顺带还能揪出损坏、模糊、有块状伪影的缺陷图片。从2003年发布至今,它已经迭代了将近二十年。

它凭什么值得你用

市面上能查重图片的工具不少,AntiDupl 的差异化优势可以归纳成三点:

  • 按内容而非名字比对。两张图只要视觉相似就会被拎出来,哪怕被缩放、旋转、调过色。它的核心比较逻辑在src/AntiDupl/adImageComparer.cpp中实现:把图片统一缩放到固定尺寸、转成灰度,再逐像素计算均方差,与阈值比较后判定相似度。
  • 格式覆盖面大。JPEG、PNG、GIF、TIFF、BMP 自不必说,连 PSD、DDS、WEBP、HEIF、HEIC、AVIF、JXL 这类偏专业或新兴的格式也在支持列表里,共18种。
  • 顺带做"体检"。搜索重复项的同时,它还会检测 JPEG 文件完整性、模糊度、块状伪影等缺陷,数据收集逻辑见src/AntiDupl/adDataCollector.cpp。换句话说,一次扫描解决两件事:去重 + 找坏图。

它由 C++ 编写核心算法、C# 搭界面(WPF 与 WinForms 两个版本可选),多线程设计能把你 CPU 的每个核心都用起来,扫描上万张图片也能在可接受的时间内跑完。

5分钟跑通第一次扫描

从拿到软件到看到结果,路径比你想的短。先看一眼空荡荡的初始界面,认识一下它的布局:

上手只需四步:

  1. 添加路径:点工具栏上的 Paths 按钮(或菜单"Search → Paths"),在窗口里勾选要扫描的文件夹,可以一次加多个目录,并决定是否深入子目录。
  2. 开始搜索:回到主窗口点 Start Search。进度会在独立窗口实时显示,绝大多数情况下默认设置就够用。
  3. 等待结果:搜索耗时取决于图片数量和你选的比较选项,全自动进行,不需要中途做任何决定。
  4. 处理结果:扫描结束,右侧表格列出所有重复对与缺陷图,左侧面板显示预览。

如果你此前完全没碰过这类工具,完成上面四步,就已经体验到了它最核心的价值闭环:扫出来、看得见、可处理。

用一次实际清理,把功能串起来

光会扫描还不够,我们拿"清理手机备份照片"这件具体的事走一遍完整流程,顺便把几个关键功能讲透。

第一步,选择保留哪个版本。结果表格里每一行是一对重复图。程序在能判断"哪张更好"时会直接给出建议,推荐保留的按钮会变成粉红色。它的判断依据很朴素:同格式且差异不大时,优先删尺寸小、体积小的那张;如果两张完全一样,则优先删除位于"删除路径"里的那张。这套推荐逻辑在src/AntiDupl/adImageComparer.cpp的配套代码里实现。

第二步,放心大胆地批量操作。全选(Ctrl+A)后点"按建议自动处理"按钮,AntiDupl 会替你执行所有推荐动作。不敢全自动?也可以手动挑选:右键菜单里能单独删除第一张/第二张/全部重复项、互相替换、重命名、移动到对方所在目录,甚至把整组图片搬到另一个文件夹。

第三步,用并排对比确认没删错。遇到拿不准的对子,双击打开并排对比视图,左右(或上下)放大看细节差异,确认无误再下手。

第四步,误删了也不怕。所有删除、重命名、移动操作都可以撤销(Ctrl+Z 撤销,Ctrl+Y 重做)。这是它敢让你一键批量清理的底气。

容易被忽略的进阶玩法

等你用顺手了,下面这几个能力值得专门挖一挖:

  • 记住历史结果,二次扫描快几倍。在 Advanced 选项卡打开 "Remember images",已扫描过的图片信息会被缓存,下次重复扫描同一目录能大幅提速。这功能在反复整理不断增长的照片库时尤其好用。
  • 用"有效路径"跳过无关目录。把确定不含新图的文件夹加进 Valid 列表,这些图片就不会再互相比较,进一步压缩重扫时间。
  • 快捷键接管一切。预览面板的每个按钮都有对应快捷键:小键盘 1 删第一张、2 删第二张、3 全删、4/6 相互替换、5 标记为误报。嫌默认键位别扭,可以在 Results → Hotkeys 里自定义,红字提示表示该组合已被占用。
  • 把误报喂回程序。程序偶尔会把"长得像但确实不同"的图判成重复,右键标记为 mistake 后,它会存入错误数据库,以后不再报这组。
  • 忽略清单与系统文件夹开关。想跳过特定文件或目录,用 Ignore 标签页;而扫描 D 盘这类 Windows 系统盘时,记得打开 "Search system folders/files" 选项,否则会一无所获。

三个真实使用场景

一位自由摄影师,靠它整理了三万多张 RAW+JPEG 混合的旅行素材。连拍和不同曝光的相似图被成组列出,他按建议保留清晰度更高的那张,一次性释放了 12GB 空间——这笔账比他想象中划算得多。

一个网店运营,每天要处理几百张从供货商手里传来的产品图。不同供货商的文件命名习惯完全不同,人工比对根本无从下手。他把图片目录丢给 AntiDupl,用"按建议自动处理"把重复项清干净,再配合移动功能把保留图归拢到统一目录,产品图库从此只认一套命名规则。

一位退休的摄影爱好者,几十年攒下的老照片扫描件里混着不少损坏文件。他不用重复功能,只靠缺陷检测就把打不开、花屏、模糊的旧扫描件筛了出来,再决定是重扫原件还是舍弃。

三个场景,三种用法,但背后的逻辑一致:把"人眼逐一比对"这件枯燥事交给算法,人只负责做最终判断。

新手常问的5个问题

问:扫描结果一大堆,几乎都是完全相同的图,怎么删最快?答:Ctrl+A 全选,然后点"按建议自动处理",程序会按自己的推荐规则批量完成删除。

问:GIF 动图怎么比对的?答:只取动图序列的第一帧参与比较。

问:为什么加了 D 盘却根本没扫描?答:Windows 把磁盘根目录视为系统目录,需要在 Search 选项里打开 "Search system folders/files"。

问:怎么导出结果清单?答:Ctrl+A 选中全部结果,Ctrl+C 复制到剪贴板,粘贴进任意文本文件即可。

问:我想自己编译,麻烦吗?答:需要 Visual Studio 2022(勾选 .NET 桌面开发 + C++ 桌面开发两个工作负载)和 vcpkg 依赖管理器。源码克隆自https://gitcode.com/gh_mirrors/an/AntiDupl,打开src/AntiDupl.sln构建即可,依赖库会由 vcpkg 自动下载编译。

从今天开始清理

重复图片不会自己消失,它们只是安静地占据着硬盘的每个角落。AntiDupl 的价值不在于它有多复杂,而在于它把一件原本需要投入大量时间的重复劳动,压缩成了"选目录 → 点开始 → 看结果"三步。

它的完整使用手册在docs/data/help/english/目录下,遇到问题时值得先翻一遍 FAQ。如果你的图片库已经乱到无从下手,不妨今天就花五分钟跑第一次扫描——先看看自己的硬盘里,到底藏了多少张"双胞胎"。

【免费下载链接】AntiDuplA program to search similar and defect pictures on the disk项目地址: https://gitcode.com/gh_mirrors/an/AntiDupl

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

← 返回列表