判断图片是否重复 如何判断两幅图片是否重复(不能通过文件名判断)? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 根据图片的MD5判断吧,不过比较慢。可以试着读取文件的前面若干字节+尾部若干字节等,然后生成MD5试试。 图片放在哪里?获取具体的属性 要是相同就认为相同 不过这样也不是很完善 你试试看 fileinfo类对象的那个get开头的方法你看看 哦,不一定图片,所有的文件(二进制流)都可以根据MD5算法(一种哈希算法,常用于加密密码)得到一个串,从概率上可以保证不同的二进制流生成的这个串肯定不相同。当然,相同的二进制流肯定是相同的。所以你要判断这个文件是否相同,是否可以试着比较这个。至于我说只取部分目的是要减少计算的工作量。为什么不按楼上说的直接比较二进制流呢?比如你有20个文件,你要比较文件是否重复,需要把这20个文件两两比较,这样实际上你需要比较190对。如果你比较二进制流的长度为1000字节,那么你需要读取的字节数:1000*2*190。因为你每次比较都需要读取和判断。如果用MD5的话呢,你读取这20个文件一次,生成20个MD5,这个MD5大概只有20个字节不到。大概需要20*1000*MD5的计算时间+190*20*2前面的时间是生成MD5的时间,后面的是比较MD5的时间。这是我一个大概的估计,并不是准确的计算结果。如果你真要做需要自己进行测试。 多谢phy-------有时下载文件时,遇到有MD5验证码这个MD5验证码是取文件的前面若干字节+尾部若干字节生成的吧文件比较大有几百M,不可能用全部的。还有一个文件完整性的证码机,指定一个文件就会生成一个MD5验证码如果这个MD5验证码和发表者提供的验证码一样,说明你下载的文件是完整的。这有什么标准吗,比如取前面多少字节+后面多少字节,生成一个MD5验证码 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 项目、聊天、咨询、探讨、统统收费,呵呵......╚---------------------------------------------------------------------------------------------------------ō*︻$▅▆▇◤ 唉,用最笨的方法来比较一下吧: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;} md5比较取前5k字节因为主要的颜色表,图片信息集中在这5k里面然后在后面随机取4节5k数据,做md5运算后比较,基本上可以保证99%以上的正确率 如何在Webbrowser控件获取指定部分的内容 此服务器版本不受支持。必须安装sql2005 beta2 或者更高版本。 动态增加的文本框的取值问题 一段C# 组播代码 求解释! 帮我看看里面的代码哪出了错,很急 升星了!!低调庆祝一下!! 用文字替换WORD模板的某个标签时,怎么更改字体属性? PdfReader 出 Invalid ActiveX State Exception 错误 winform中保存图片到数据库 如何取得字体的宽度 gridview中linkbutton的使用 线程数量的问题
获取具体的属性 要是相同就认为相同 不过这样也不是很完善 你试试看 fileinfo类对象的那个get开头的方法你看看
所以你要判断这个文件是否相同,是否可以试着比较这个。至于我说只取部分目的是要减少计算的工作量。
为什么不按楼上说的直接比较二进制流呢?
比如你有20个文件,你要比较文件是否重复,需要把这20个文件两两比较,这样实际上你需要比较190对。
如果你比较二进制流的长度为1000字节,那么你需要读取的字节数:1000*2*190。因为你每次比较都需要读取和判断。
如果用MD5的话呢,你读取这20个文件一次,生成20个MD5,这个MD5大概只有20个字节不到。大概需要
20*1000*MD5的计算时间+190*20*2
前面的时间是生成MD5的时间,后面的是比较MD5的时间。这是我一个大概的估计,并不是准确的计算结果。如果你真要做需要自己进行测试。
-------
有时下载文件时,遇到有MD5验证码
这个MD5验证码是取文件的前面若干字节+尾部若干字节生成的吧
文件比较大有几百M,不可能用全部的。还有一个文件完整性的证码机,指定一个文件就会生成一个MD5验证码
如果这个MD5验证码和发表者提供的验证码一样,说明你下载的文件是完整的。
这有什么标准吗,比如取前面多少字节+后面多少字节,生成一个MD5验证码
{07DFB552-A1C9-4A56-923C-F97529FE3C30}.JPG
││博客空间:http://blog.csdn.net/lovingkiss
││资源下载:http://download.csdn.net/user/lovingkiss
││Email:loving-kiss@163.com [MSN也是这个]
││联系方式:Q66840199 项目、聊天、咨询、探讨、统统收费,呵呵......
╚---------------------------------------------------------------------------------------------------------ō*︻$▅▆▇◤
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;
}
取前5k字节
因为主要的颜色表,图片信息集中在这5k里面
然后在后面随机取4节5k数据,做md5运算后比较,基本上可以保证99%以上的正确率