如何判断两幅图片是否重复(不能通过文件名判断)?

解决方案 »

  1.   

    根据图片的MD5判断吧,不过比较慢。可以试着读取文件的前面若干字节+尾部若干字节等,然后生成MD5试试。
      

  2.   

    图片放在哪里?
    获取具体的属性 要是相同就认为相同 不过这样也不是很完善 你试试看 fileinfo类对象的那个get开头的方法你看看
      

  3.   

    哦,不一定图片,所有的文件(二进制流)都可以根据MD5算法(一种哈希算法,常用于加密密码)得到一个串,从概率上可以保证不同的二进制流生成的这个串肯定不相同。当然,相同的二进制流肯定是相同的。
    所以你要判断这个文件是否相同,是否可以试着比较这个。至于我说只取部分目的是要减少计算的工作量。
    为什么不按楼上说的直接比较二进制流呢?
    比如你有20个文件,你要比较文件是否重复,需要把这20个文件两两比较,这样实际上你需要比较190对。
    如果你比较二进制流的长度为1000字节,那么你需要读取的字节数:1000*2*190。因为你每次比较都需要读取和判断。
    如果用MD5的话呢,你读取这20个文件一次,生成20个MD5,这个MD5大概只有20个字节不到。大概需要
    20*1000*MD5的计算时间+190*20*2
    前面的时间是生成MD5的时间,后面的是比较MD5的时间。这是我一个大概的估计,并不是准确的计算结果。如果你真要做需要自己进行测试。
      

  4.   

    多谢phy
    -------
    有时下载文件时,遇到有MD5验证码
    这个MD5验证码是取文件的前面若干字节+尾部若干字节生成的吧
    文件比较大有几百M,不可能用全部的。还有一个文件完整性的证码机,指定一个文件就会生成一个MD5验证码
    如果这个MD5验证码和发表者提供的验证码一样,说明你下载的文件是完整的。
    这有什么标准吗,比如取前面多少字节+后面多少字节,生成一个MD5验证码
      

  5.   

    QQ也不过是取部分信息,然后生成文件名的,例如:
    {07DFB552-A1C9-4A56-923C-F97529FE3C30}.JPG
    ││博客空间:http://blog.csdn.net/lovingkiss
    ││资源下载:http://download.csdn.net/user/lovingkiss
    ││Email:loving-kiss@163.com [MSN也是这个]
    ││联系方式:Q66840199 项目、聊天、咨询、探讨、统统收费,呵呵......
    ╚---------------------------------------------------------------------------------------------------------ō*︻$▅▆▇◤ 
      

  6.   

    唉,用最笨的方法来比较一下吧:
    Image b1 = Image.FromFile(@"D:\temp\b.bmp");
    Image b2 = Image.FromFile(@"D:\temp\b.bmp");
    private bool ImageEquals(Image b1, Image b2)
    {
    MemoryStream m1 = new MemoryStream();
    MemoryStream m2 = new MemoryStream(); b1.Save(m1, ImageFormat.Bmp);
    b2.Save(m2, ImageFormat.Bmp); Byte[] bty1 = m1.GetBuffer();
    Byte[] bty2 = m2.GetBuffer(); if (bty1.Length != bty2.Length)
    {
    return false;
    } for (int i = 0; i < bty1.Length; i++)
    {
    if (bty1[i] != bty2[i])
    {
    return false;
    }
    } return true;
    }
      

  7.   

    md5比较
    取前5k字节
    因为主要的颜色表,图片信息集中在这5k里面
    然后在后面随机取4节5k数据,做md5运算后比较,基本上可以保证99%以上的正确率