Skip to content

Repository files navigation

Lin Image Cleaner

Lin Image Cleaner

一键清除图片元数据,画质、格式与分辨率保持不变。

下载绿色版 · 下载安装版 · 查看最新版

Windows 10 / 11 100% 本地处理 v2.1.0 MIT License

Windows 本地桌面图片元数据清理应用,使用 Tauri 2 + Rust + React 19 + Vite + TypeScript。不上传图片、不登录、不调用云端服务。2.1 支持真实格式识别与后缀修正、统一输出目录、安全覆盖原图,以及完成后防止重复导出。连续添加多个不同位置的文件夹,仍使用单一总进度条。

当前正式版:v2.1.0(2026 年 9 月定稿)。本次包含 2.0 的品牌与界面升级,以及 2.1 的实际使用反馈修复。详细变化见 更新日志

为什么做这个工具

图片文件除了画面,还可能包含 Prompt、生成参数、ComfyUI 工作流、拍摄信息、编辑软件、作者字段、说明文字和 Content Credentials。Lin Image Cleaner 默认生成一份不覆盖原图的干净副本,只清理文件级附加信息,不重新压缩画面。

分辨率不变 · 格式不变 · 画质不变

运行

Releases 下载:

  • Lin-Image-Cleaner-v2.1.0-portable.exe:绿色便携版,双击即用。
  • Lin-Image-Cleaner-v2.1.0-x64-setup.exe:Windows x64 安装包。
  • SHA256SUMS-v2.1.0.txt:本版两个程序文件的 SHA-256 完整性校验值。

运行环境:Windows 10/11 x64,Microsoft Edge WebView2 Runtime。重新构建的原始产物位于 src-tauri/target/release/ 及其 bundle/nsis/ 子目录。

开发环境:Node.js 22+、Rust MSVC stable、Visual Studio C++ Build Tools、Windows SDK。项目提供的 Windows 脚本会自动发现并加载 MSVC 工具链。

cd 'C:\image clean'
npm ci
npm run desktop:dev
npm test                 # Rust 核心测试 + React 交互测试
npm run build            # TypeScript + Vite 生产构建
npm run desktop:build    # Windows 可执行文件及 NSIS 安装包
powershell -NoProfile -ExecutionPolicy Bypass -File scripts/windows.ps1 check

npm run dev 仅启动浏览器 UI 预览;本地图片选择、拖拽路径和导出需使用桌面模式。首次构建下载依赖需要联网,构建后的图片处理完全离线。安装包在目标机缺少 WebView2 时可能需要联网安装该运行时;已经安装 WebView2 的电脑可以直接离线运行 EXE。

使用

  1. 点击 选择图片添加文件夹;图片和文件夹均可多选,也可以连续添加不同位置的文件夹,或直接拖入窗口。
  2. 列表展示真实缩略图、文件名、格式、文件大小、原始像素宽高和来源目录。支持移除单项及清空列表。
  3. 点击 清理并导出。界面切换为单一动感总进度条,后台最多 4 个工作线程并行处理;不逐张刷新列表状态。
  4. 默认输出位于每张原图所在目录的 Cleaned 子目录,也可选择统一指定文件夹或覆盖原图。photo.JPGCleaned/photo_clean.JPG;重名依次生成 _clean_2_clean_3
  5. 完成后显示成功/失败数量、逐项错误,以及 打开输出目录。全部成功后主按钮禁用,新增图片仅处理新增项;失败项可单独重试。多目录结果通过下拉框选择打开。切换输出方式不会自动重跑已完成项;需要再次导出时请清空后重新导入。

文件夹递归扫描,跳过其中的 Cleaned 子目录及目录符号链接。只接收 PNG/JPG/JPEG/WEBP,大小写扩展名均支持,重复路径去重。受支持扩展名与真实格式不符时,按真实内容识别并在输出中修正后缀,不转码。损坏文件仍会报错。

清理方式与保证

导出过程不解码再编码,不缩放、不裁剪。 缩略图解码仅用于 UI,不参与输出文件生成。

格式 清理 保留
PNG / APNG eXIf、tEXt、zTXt、iTXt、caBX(C2PA)、时间及非显示附加块、IEND 后的附加数据 IHDR、PLTE、IDAT、透明度、色彩/HDR、动画控制及帧数据
JPG / JPEG EXIF/XMP(APP1)、IPTC(APP13)、JUMBF/C2PA(APP11)、COM、其他非必要 APP 段、缩略图、EOI 后附加数据;扫描间的元数据也移除 原始扫描码流、量化/Huffman 表、ICC、Adobe 色彩变换;保留不含缩略图和原始密度信息的最小 JFIF
WEBP EXIF、XMP、C2PA 和其他非图像 RIFF chunks;动画帧内部未知 chunks;容器尾部数据 VP8/VP8L 原始码流、ALPH、ICCP、ANIM、ANMF;同步修正 VP8X 元数据标志与 RIFF 长度

Software / Creator Tool 等字段随所在 EXIF、XMP 或 PNG 文本块移除。C2PA 清理针对文件内嵌的 manifest / Content Credentials 数据;不会删除第三方服务保存的记录、外部 sidecar,也不处理像素内容中的隐形/可见水印。

每张图片导出前检查 真实格式、width、height 与输入严格一致,写入临时文件后再读取校验,最后使用 persist_noclobber 发布副本。副本模式重名自动编号,原图保持不变。覆盖模式在批次确认后执行:校验成功,再调用 Windows 文件替换,不先删除原图;失败的临时文件自动回收。扩展名错误的图片即使选择覆盖,也会在原目录另存正确后缀的 _clean 副本并保留原文件,避免改名冲突误删其他文件。

必须说明的边界

  • EXIF 方向:原图如果依赖 Orientation 元数据来旋转或镜像显示,移除后部分查看器的显示方向可能改变。本应用不应用旋转,以保持原始像素、width 和 height;界面已说明。
  • 色彩配置:ICC、gamma、透明度、Adobe 颜色变换等影响图像显示的数据保留。因此“干净”指清除识别性/描述性附加元数据,不是删除所有辅助结构。ICC profile 自身可能包含配置名称等信息。
  • 资源限制:单文件上限 512 MiB;缩略图解码内存上限 128 MiB,超大图片可不生成缩略图但仍执行容器清理。批处理内存随文件大小增长;V2 没有取消/断点恢复功能。
  • 输入验证:检查文件类型、尺寸、容器块边界、PNG CRC,常见解码损坏会在导入时报错。不是对所有恶意图像或所有非标准编码的形式化验证。
  • 清除内嵌签名信息会使输出不再拥有原始 Content Credentials。该工具不保证匿名性或改变平台对图片来源的判断。

项目结构

src/                       React 界面、状态与本地调用
src-tauri/src/cleaner.rs    可独立测试的容器清理和安全输出核心
src-tauri/src/lib.rs        异步导入、后台工作池、总进度事件、目录打开
src-tauri/tests/            格式、尺寸、像素、动画、批量测试
tests/App.test.tsx          前端交互测试(模拟 Tauri IPC)
scripts/windows.ps1        自动加载 MSVC 的开发/构建/测试入口

测试样本为代码或 FFmpeg testsrc2 合成,不包含用户照片。检查不同宽高、透明 PNG、JPEG、无损/有损 WebP、APNG/WebP 动画、EXIF Orientation、扫描间 Comment、嵌套附加块、CRC/截断损坏、扩展名不符、100 张并行、多格式 200 张统一目录输出、安全覆盖及同名并发输出。解码后的像素逐个比较,动画逐帧比较像素与时序。

实现参考:PNG 规范WebP RIFF 规范Tauri Rust 调用

About

Windows 本地图片元数据清理工具:无损移除 EXIF/XMP/IPTC/C2PA,保持格式、画质和分辨率不变。

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages