检测两个png图像是否不同

时间:2010-06-01 12:01:42

标签: .net diff png

(上下文:运行autohotkey脚本以尝试自动化某些测试。计划是截取屏幕截图,然后将它们与“标准”屏幕截图进行比较,以检测输出是否已更改)。

是否有'聪明'的方法来检查两个png图像是否不同?

聪明的我是指除了逐字节比较之外? (显然比较了它们的尺寸后)

3 个答案:

答案 0 :(得分:3)

假设您的PNG文件是由同一软件生成的(不同的PNG编写者可以为相同的原始图像创建不同的文件,因为有一些可选的设置)并且他们不会写time related optional informational chunks(少数PNG创建者会这样做)我相信你可以在文件级别逐字节检查它们。标准方法是计算它们的哈希值(MD5或SHA1)。

答案 1 :(得分:1)

我当前的实现对我有用,但有点慢(特别是如果 相同):

open System.Drawing

let aresame fp1 fp2 =
    let bitmap (f:string) = new Bitmap(f)

    let same (bm1:Bitmap) (bm2:Bitmap) =
        if bm1.Size <> bm2.Size then
            false
        else 
            seq { for x = 0 to bm1.Width - 1 do
                    for y = 0 to bm1.Height - 1 do
                        yield bm1.GetPixel(x, y) = bm2.GetPixel(x, y) } 
            |> Seq.forall id

    use bm1 = bitmap fp1
    use bm2 = bitmap fp2
    same bm1 bm2

答案 2 :(得分:0)

您可以对标准屏幕截图进行哈希处理,然后将该哈希值与新的屏幕截图哈希进行比较。