adong1982 发表于 2008-8-19 18:16:20

图片比较

最近在写图片比较脚本时,遇到问题.
我的设计思路是如果两个文件二进制比较不同,则认为图片内容不同.

但是在测试过程中发现,我写的函数, 当图片不同时,二进制比较竟然相同.


脚本如下
'*********************************

   FunctionCompare   (arg1 ,arg2)

   Const ForReading = 1, ForWriting = 2
    Dim fso, MyFile,MyFile1
   
   Set fso = CreateObject("Scripting.FileSystemObject")
   Set MyFile    = fso.OpenTextFile(arg1, ForReading, True)
   Set MyFile1 = fso.OpenTextFile(arg2, ForReading, True)
   Flag=0
   Dim tmp ,tmp1
   tmp=0
   tmp1=0
While MyFile.AtEndofLine<>trueand MyFile1.atendofline <>true
   
    tmp=MyFile.readline
tmp1=MyFile1.readline
res=StrComp (tmp,tmp1,0)
    If res<>0 Then
    Flag=1
       End If
       Wend
   
    MyFile.Close
   MyFile1.Close
   
IfFlag=0Then   
      Compare=true
else
      Compare= false
End If
   
End Function

path1="c:\back_icon1.bmp"
path2="c:\back_icon2.bmp"
msgbox compare (path1, path2)

补充一句:在debug过程中,我发现一个问题.
在set myfile 和myfile1 结束后,查看变量发现,myfile 和myfile1都只有一行一列, 我很困惑

koala114 发表于 2008-8-20 13:50:10

你的函数没问题,我测下来可以分别出2张图片不一样,并输出False。
你大概在测的时候C盘下面没有back_icon1.bmp,和back_icon2.bmp吧?
如果没有这2个文件脚本会自动创建2个文件,所以比较下来2进制就一样了。

至于你说只有一行一列的问题,我debug下来发现readline这个函数是读取文件中的一行数据,也就是以回车判断是否一行,BMP文件格式里面有可能没有换行符所以认为整个文件就是一行。

adong1982 发表于 2008-8-20 14:34:50

谢谢楼上的回答.

我困惑的地方在于:
1. 正如你说,返回Flase.
    你是否注意到,此时,DEBUG VIEW中 MYFILE和MYFILE2创建时, colume 并不是1

2.而当出现错误,返回true时
   DEBUG VIEW 中MYFILE和MYFILE2创建时, colume 显示为1

我担心指针在MYFILE 和MYFILE1 创建时,就直接指到最后一行,导致只比较两个文件的最后一行,相同,因此返回true
我用UC二进制对比过了,最后一行是一样的.

我想知道如果readline后, 如何可以将指针跳回刚才已读的那行

koala114 发表于 2008-8-20 14:52:02

我这里debug时看到MyFile喝MyFile1创建时Column就是1,看图
页: [1]
查看完整版本: 图片比较