java 如何检查两个图片是否一致。在同一目录下有多个图像文件,如果有重复的,怎么check.谢谢

解决方案 »

  1.   

    判断文件之间的length,如果有length相等的话,就是同样的图片。(不同图片如果length还想等的话,是不是几率很小啊,呵呵。)
      

  2.   


    long fileLengthA = new File("a.jpg").length();
    long fileLengthB = new File("b.jpg").length();if (fileLengthA == fileLengthB) {
      // 文件一样
    } else {
      // 文件不一样。
    }
      

  3.   

    先判断文件size
    如果相等的话,再比较长宽
    再相等的话,逐点判断RGB值
      

  4.   

    判断两个文件的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)));
      }}
      

  5.   

    顶 ticmy比较日志我也是用这个方式,摘要算法,楼主比较图片还可以在使用这个方法的时候同时使用稀释,就是说你使用channel map 文件中部分流比如: 1-128  256-384     这个间距  和  byte数据长度还可以自定义变化。这样就更合理了。  这样md5的计算量还会变小。  
      

  6.   

    简单的办法就是使用Base64Encoder压缩,然后比较byte[],省好多代码
      

  7.   

    先遍历所有图片文件,生成每个文件的CRC32,然后比较CRC32
      

  8.   

    md5的方法不会,我的话先比较扩展名,然后逐步比较文件大小,长宽,io流比较二进制。
      

  9.   

    上面例子里2个getDirMD5方法有什么区别
    ?
      

  10.   

    关于在光盘镜像或大型软件下载中“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”是控制下载完整性的“总开关”,我就不在这里罗嗦了。但是,建议光临本博客的各位网友,就此进行思考、各抒己见。——假如你的下载与提供的校验值“不合拍”,那只有两种可能:其一,下载过程中出现数据缺失;其二,使用的校验工具“不称职”。