首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Java 高效比對兩張圖片是否完全相同

     編輯:程式設計綜合問答

問題

目前採用讀取圖片流並計算哈希值比對,效率較低。有無更高效的方法判斷兩張圖片是否為同一張?

優化策略

  1. 先比檔案大小:大小不同直接判定為不同圖片,避免後續運算。
  2. 再比尺寸:寬高不一致即可排除。
  3. 逐塊比較位元組內容:無需計算哈希,直接以固定緩衝區(如 4KB)逐塊讀取兩文件並比較位元組;遇到差異立即返回 false,讀完且全同則為相同圖片。此法適用於單對單比對,I/O 密集型場景下效能最優。

代碼示例

public static boolean isSameImage(File f1, File f2) throws IOException {
    if (f1.length() != f2.length()) return false;
    // 可選:再比圖片寬高,需解碼圖片頭
    try (FileInputStream in1 = new FileInputStream(f1);
         FileInputStream in2 = new FileInputStream(f2)) {
        byte[] buf1 = new byte[4096];
        byte[] buf2 = new byte[4096];
        int len1, len2;
        while ((len1 = in1.read(buf1)) != -1) {
            len2 = in2.read(buf2);
            if (len1 != len2) return false;
            for (int i = 0; i < len1; i++) {
                if (buf1[i] != buf2[i]) return false;
            }
        }
        return in2.read() == -1;
    }
}
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved