Хэш для дубликатов изображений работает не для всех дубликатов. ⇐ JAVA
-
Anonymous
Хэш для дубликатов изображений работает не для всех дубликатов.
Мне нужно обнаружить дубликаты изображений. Вот что я сделал:
попробуй { MessageDigest messageDigest = MessageDigest.getInstance("SHA-512"); FileInputStream fi = новый FileInputStream (файл); байт fileData[] = новый байт[(int) file.length()]; fi.read(fileData); фи.закрыть(); вернуть новый BigInteger(1, messageDigest.digest(fileData)).toString(16); } поймать (Исключение е) { throw new RuntimeException("невозможно прочитать файл" + file.getAbsolutePath(), e); } Причина, по которой это не работает для всех изображений, заключается в том, что файлы, конечно же, должны быть одинаковыми. Например, он практически такой же, но имеет другой размер (195 КБ против 196 КБ):
https://i.stack.imgur.com/rzXq9.jpg https://i.stack.imgur.com/bRY2r.jpg
Однако меня беспокоит тот факт, что я получил два разных хэша для изображения, которое имеет абсолютно одинаковый размер, одинаковый цветовой профиль, одинаковое разрешение и т. д. (не уверен, что смогу опубликовать изображение, поскольку это лицо человека, и я не спрашивал его согласия).
Мне нужно обнаружить дубликаты изображений. Вот что я сделал:
попробуй { MessageDigest messageDigest = MessageDigest.getInstance("SHA-512"); FileInputStream fi = новый FileInputStream (файл); байт fileData[] = новый байт[(int) file.length()]; fi.read(fileData); фи.закрыть(); вернуть новый BigInteger(1, messageDigest.digest(fileData)).toString(16); } поймать (Исключение е) { throw new RuntimeException("невозможно прочитать файл" + file.getAbsolutePath(), e); } Причина, по которой это не работает для всех изображений, заключается в том, что файлы, конечно же, должны быть одинаковыми. Например, он практически такой же, но имеет другой размер (195 КБ против 196 КБ):
https://i.stack.imgur.com/rzXq9.jpg https://i.stack.imgur.com/bRY2r.jpg
Однако меня беспокоит тот факт, что я получил два разных хэша для изображения, которое имеет абсолютно одинаковый размер, одинаковый цветовой профиль, одинаковое разрешение и т. д. (не уверен, что смогу опубликовать изображение, поскольку это лицо человека, и я не спрашивал его согласия).
Мобильная версия