(上下文:运行autohotkey脚本以尝试自动化某些测试。计划是截取屏幕截图,然后将它们与“标准”屏幕截图进行比较,以检测输出是否已更改)。
是否有'聪明'的方法来检查两个png图像是否不同?
聪明的我是指除了逐字节比较之外? (显然比较了它们的尺寸后)
答案 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)
您可以对标准屏幕截图进行哈希处理,然后将该哈希值与新的屏幕截图哈希进行比较。