我有渲染使用Adobe PDF引擎PDF文件以及其它PDF裂口。我想尝试找出他们渲染不同的地方。问题是它们都呈现略微不同的抗混叠,颜色和极小的位置差异。我更关心更大的差异。我想比较附件match1.png
和match2.png
。这两个应该匹配。文件diff1.png
和diff2.png
不应该匹配。他们应该失败,因为那个人失踪了。我曾与ImageMagick的比较,但没有得到足够好的结果忽略轻微的渲染差异,只专注于主要的。我认为下面的算法可以工作,但我不知道如何读取PNG文件并逐个像素地比较它们。比较图像的呈现差异(忽略抗锯齿)
- 在ImageA每个像素比较在ImageB相同的像素。也比较每个相邻像素ImageB
- 查找在ImageB所有测试像素的最近的匹配像素。
- 商店这个最接近匹配的像素作为用于ImageA该像素差分索引的色差。
- 对ImageA中的每个像素重复此计算。
- 将差值标准化以使最小差值为零。未归一化的值可能是(3,8,5,18),归一化值可能是(0,5,2,15)或某种其他类型的归一化函数。
- 然后计算有多少像素超过阈值,比如5或其他。然后,可以使用这个“坏”像素的计数来计算其中一个图像中存在渲染错误的概率。
这只是一个样本算法。我不知道如何逐个像素地处理PNG文件。我会开到PHP的解决方案,或者使用命令行工具,如ImageMagick的解决方案等