一款基于 WPF (.NET 9) 的桌面级像素级图片对比工具,采用 odiff 的 YIQ 感知色彩差异算法,按人眼视觉敏感度判定图片差异,适用于 UI 回归测试、设计稿比对、截图审查等场景。
- YIQ 感知色彩空间对比 —— 按人眼对亮度最敏感的特性加权判定差异,过滤肉眼无感的微小变化
- 差异阈值调节(0~1.00),实时重新计算
- 忽略抗锯齿 —— 智能排除图像边缘的平滑过渡像素,减少误报(移植自 pixelmatch 算法)
- 忽略区域 —— 在图上框选任意矩形区域,排除时间戳、广告位等动态内容后再对比
| 模式 | 说明 |
|---|---|
| 并排对比 | 左右两个独立查看器,同步缩放与拖拽 |
| 叠加混合 | 两图半透明叠加,错位处即差异 |
| 差异高亮 | 灰度底图 + 红色标记差异像素 |
| 擦除对比 | 可拖动分界线,左看图1、右看图2 |
- 差异热力图 —— 按严重程度着色:黄(轻微) → 橙 → 红 → 深红(严重)
- 差异导航 —— 自动检测差异块,
◀ 3/17 ▶逐处跳转并居中显示 - 实时像素信息 —— 鼠标悬停同时显示两图同一坐标的 X/Y、灰度、RGB 值
- 放大镜 —— 圆形放大镜跟随光标,左右半区分别显示两图同位置细节
- 同步缩放(以鼠标位置为锚点)+ 同步拖拽平移
- 尺寸不同的两图自动缩放对齐后对比
- 最近 10 对图片记录,下拉快速重载
- 窗口置顶、现代化扁平 UI
- 导出差异图 —— PNG 格式
- 导出对比报告 —— 单张 PNG 拼合原图1 + 原图2 + 差异图 + 统计信息
| 按键 | 功能 |
|---|---|
Tab |
切换视图模式 |
F |
适合窗口 |
+ / - |
缩放 |
| 方向键 | 平移(按住 Ctrl 加速) |
PageUp / PageDown |
上/下一处差异 |
环境要求:Windows 10 及以上、.NET 9 SDK
git clone https://github.com/Mike-CD-Csharp/ImageCompare.git
cd ImageCompare
dotnet run --project ImageComparison发布单文件版本:
dotnet publish ImageComparison -c Release -r win-x64 --self-contained false两图的每个像素转换到 NTSC YIQ 色彩空间后计算加权平方距离:
Δ = 0.5053·Δy² + 0.299·Δi² + 0.1957·Δq²
判定不同像素的条件:
Δ > 35215 × threshold²
其中亮度分量 Y 权重最高(0.5053),符合人眼对明度变化远比色度敏感的视觉特性——因此灰度上的细微改动更容易被检出,而肉眼难辨的色度抖动会被阈值自然过滤。
半透明像素先按 alpha 与白色混合后再比较。
ImageComparison/
├── MainWindow.xaml # 界面布局与样式(现代扁平化设计系统)
├── MainWindow.xaml.cs # 交互逻辑:视图模式、同步缩放平移、区域选择等
├── PerceptualDiffEngine.cs # 核心算法:YIQ 差异、抗锯齿检测、差异区域提取
├── app.ico # 应用图标
└── ImageComparison.csproj # 项目配置 (net9.0-windows)
- odiff(MIT License)—— YIQ 差异算法与常数来源
- pixelmatch(ISC License)—— 抗锯齿检测思路来源
MIT