java 如何检查两个图片是否一致。 java 如何检查两个图片是否一致。在同一目录下有多个图像文件,如果有重复的,怎么check.谢谢 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 判断文件之间的length,如果有length相等的话,就是同样的图片。(不同图片如果length还想等的话,是不是几率很小啊,呵呵。) long fileLengthA = new File("a.jpg").length();long fileLengthB = new File("b.jpg").length();if (fileLengthA == fileLengthB) { // 文件一样} else { // 文件不一样。} 先判断文件size如果相等的话,再比较长宽再相等的话,逐点判断RGB值 判断两个文件的md5即可!在网上下系统盘镜像的时候都附带一个md5,为什么?因为只要有一点改动md5就不一样附获取文件md5代码import java.io.File;import java.io.FileInputStream;import java.math.BigInteger;import java.security.MessageDigest;import java.util.HashMap;import java.util.Map;public class FileDigest { /** * 获取单个文件的MD5值! * @param file * @return */ public static String getFileMD5(File file) { if (!file.isFile()){ return null; } MessageDigest digest = null; FileInputStream in=null; byte buffer[] = new byte[1024]; int len; try { digest = MessageDigest.getInstance("MD5"); in = new FileInputStream(file); while ((len = in.read(buffer, 0, 1024)) != -1) { digest.update(buffer, 0, len); } in.close(); } catch (Exception e) { e.printStackTrace(); return null; } BigInteger bigInt = new BigInteger(1, digest.digest()); return bigInt.toString(16); } /** * 获取文件夹中文件的MD5值 * @param file * @param listChild ;true递归子目录中的文件 * @return */ public static Map<String, String> getDirMD5(File file,boolean listChild) { if(!file.isDirectory()){ return null; } //<filepath,md5> Map<String, String> map=new HashMap<String, String>(); String md5; File files[]=file.listFiles(); for(int i=0;i<files.length;i++){ File f=files[i]; if(f.isDirectory()&&listChild){ map.putAll(getDirMD5(f, listChild)); } else { md5=getFileMD5(f); if(md5!=null){ map.put(f.getPath(), md5); } } } return map; } public static void main(String[] args) { File file1 = new File("a.txt"); File file2 = new File("b.txt"); System.out.println(getFileMD5(file1).equals(getFileMD5(file2))); }} 顶 ticmy比较日志我也是用这个方式,摘要算法,楼主比较图片还可以在使用这个方法的时候同时使用稀释,就是说你使用channel map 文件中部分流比如: 1-128 256-384 这个间距 和 byte数据长度还可以自定义变化。这样就更合理了。 这样md5的计算量还会变小。 简单的办法就是使用Base64Encoder压缩,然后比较byte[],省好多代码 先遍历所有图片文件,生成每个文件的CRC32,然后比较CRC32 md5的方法不会,我的话先比较扩展名,然后逐步比较文件大小,长宽,io流比较二进制。 上面例子里2个getDirMD5方法有什么区别? 关于在光盘镜像或大型软件下载中“MD5”“SHA1”“CRC”校验值的内涵及其特性对于系统光盘镜像和大型软件,微软官方“MSDN”网站提供的校验值主要是“SHA1”;大家比较熟悉的校验值“MD5”则更多见于国内下载网站。但是,请你万万不可忽略微软“MSDN”网站另外一个不起眼的“CRC”:因为它是控制“全部下载过程”的“总开关”。现用最简洁、最通俗的表述(过于晦涩艰深,反倒令人生厌)对“MD5”“SHA1”“CRC”分别解析如下——SHA1——规范名称是SHA-1。SHA全称是Secure Hash Algorithm(安全散列算法),由美国“国家安全局(NSA)”和“国家标准与技术研究院(NIST)”联合研发,用来保护敏感的未保密资料。在联邦政府使用的同时,鼓励商业、企业和其它组织使用,从而实现“数位”版权管理(SHA1具有全球唯一特性)。MD5——全称是Message-Digest Algorithm 5(信息 - 摘要算法)。MD5使用的是哈希函数:不可逆加密算法。大家熟悉的典型应用,就是将“光盘镜像或大型软件”当作一个大文本信息,通过不可逆的字符串变换算法产生“字符”信息摘要,以此检查、验证信息传输的完整一致(MD5具有全球唯一特性)。CRC——全称是Cyclical Redundancy Check(循环冗余校验)。在各类下载的实际应用时:发送装置首先要计算出CRC值并随数据一同发送给接收装置;接收装置对下载数据进行计算并与收到的CRC相比较,从而确保数据传输的完整准确。CRC-32是CRC“分支”:一般用于Point-to-Point的同步传输。——关于“CRC”是控制下载完整性的“总开关”,我就不在这里罗嗦了。但是,建议光临本博客的各位网友,就此进行思考、各抒己见。——假如你的下载与提供的校验值“不合拍”,那只有两种可能:其一,下载过程中出现数据缺失;其二,使用的校验工具“不称职”。 java SFTP 据说这也是是google的域名 baidu.com.sb Storefront.java 使用了未经检查或不安全的操作。要了解详细信息,请使用 -Xlint:unchecked 重新编译。 从2007年5月31日开始 循环显示每个月的31日,循环10次,高手们有没有好办法 java windows下面的垃圾回收 策略 如何入门软件设计 applet问题,搞的俺头痛.. 有关12个瓶子 关于字体的问题?实在是看不明白sun的api文档!!!!!!!!!!!! 北京地区朋友帮忙! String里的split()函数的问题 java能执行oracle的过程吗?
long fileLengthA = new File("a.jpg").length();
long fileLengthB = new File("b.jpg").length();if (fileLengthA == fileLengthB) {
// 文件一样
} else {
// 文件不一样。
}
如果相等的话,再比较长宽
再相等的话,逐点判断RGB值
import java.io.FileInputStream;
import java.math.BigInteger;
import java.security.MessageDigest;
import java.util.HashMap;
import java.util.Map;public class FileDigest {
/**
* 获取单个文件的MD5值!
* @param file
* @return
*/
public static String getFileMD5(File file) {
if (!file.isFile()){
return null;
}
MessageDigest digest = null;
FileInputStream in=null;
byte buffer[] = new byte[1024];
int len;
try {
digest = MessageDigest.getInstance("MD5");
in = new FileInputStream(file);
while ((len = in.read(buffer, 0, 1024)) != -1) {
digest.update(buffer, 0, len);
}
in.close();
} catch (Exception e) {
e.printStackTrace();
return null;
}
BigInteger bigInt = new BigInteger(1, digest.digest());
return bigInt.toString(16);
}
/**
* 获取文件夹中文件的MD5值
* @param file
* @param listChild ;true递归子目录中的文件
* @return
*/
public static Map<String, String> getDirMD5(File file,boolean listChild) {
if(!file.isDirectory()){
return null;
}
//<filepath,md5>
Map<String, String> map=new HashMap<String, String>();
String md5;
File files[]=file.listFiles();
for(int i=0;i<files.length;i++){
File f=files[i];
if(f.isDirectory()&&listChild){
map.putAll(getDirMD5(f, listChild));
} else {
md5=getFileMD5(f);
if(md5!=null){
map.put(f.getPath(), md5);
}
}
}
return map;
}
public static void main(String[] args) {
File file1 = new File("a.txt");
File file2 = new File("b.txt");
System.out.println(getFileMD5(file1).equals(getFileMD5(file2)));
}}
?
对于系统光盘镜像和大型软件,微软官方“MSDN”网站提供的校验值主要是“SHA1”;大家比较熟悉的校验值“MD5”则更多见于国内下载网站。但是,请你万万不可忽略微软“MSDN”网站另外一个不起眼的“CRC”:因为它是控制“全部下载过程”的“总开关”。现用最简洁、最通俗的表述(过于晦涩艰深,反倒令人生厌)对“MD5”“SHA1”“CRC”分别解析如下——SHA1——规范名称是SHA-1。SHA全称是Secure Hash Algorithm(安全散列算法),由美国“国家安全局(NSA)”和“国家标准与技术研究院(NIST)”联合研发,用来保护敏感的未保密资料。在联邦政府使用的同时,鼓励商业、企业和其它组织使用,从而实现“数位”版权管理(SHA1具有全球唯一特性)。
MD5——全称是Message-Digest Algorithm 5(信息 - 摘要算法)。MD5使用的是哈希函数:不可逆加密算法。大家熟悉的典型应用,就是将“光盘镜像或大型软件”当作一个大文本信息,通过不可逆的字符串变换算法产生“字符”信息摘要,以此检查、验证信息传输的完整一致(MD5具有全球唯一特性)。CRC——全称是Cyclical Redundancy Check(循环冗余校验)。在各类下载的实际应用时:发送装置首先要计算出CRC值并随数据一同发送给接收装置;接收装置对下载数据进行计算并与收到的CRC相比较,从而确保数据传输的完整准确。CRC-32是CRC“分支”:一般用于Point-to-Point的同步传输。——关于“CRC”是控制下载完整性的“总开关”,我就不在这里罗嗦了。但是,建议光临本博客的各位网友,就此进行思考、各抒己见。——假如你的下载与提供的校验值“不合拍”,那只有两种可能:其一,下载过程中出现数据缺失;其二,使用的校验工具“不称职”。