Задача
Я пытаюсь преобразовать этот код JS в Java:
let url = e.image.url;
request(imageurl, async function(err, res, body) {
if (err !== null) return;
imghash
.hash(body)
.then(hash => {
console.log(hash);
})
});
Используются следующие библиотеки:
https://www.npmjs.com/package/imghash https://www.npmjs.com/package/request
Согласно документам imghash , когда количество битов не указано, по умолчанию используется значение 8, однако я нахожу это странным, поскольку в качестве примера хеш из этого кода равен ff3f2783818f8fff
, isn ' это 128 бит?
Пока что мне удалось преобразовать изображение в байтовый массив и преобразовать этот байтовый массив в шестнадцатеричный хэш, однако вместо такого хеша, как этот ff3f2783818f8fff
, я получаю огромный.
Есть ли способ преобразовать изображение в аналогичный хэш?
Мой код:
URL url = new URL(e.getImage().getUrl());
final HttpURLConnection connection = (HttpURLConnection) url
.openConnection();
connection.setRequestProperty(
"User-Agent",
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_5) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/26.0.1410.65 Safari/537.31");
BufferedImage image = ImageIO.read(connection.getInputStream());
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ImageIO.write( image, "jpg", baos );
baos.flush();
byte[] imageInByte = baos.toByteArray();
baos.close();
hex = getHexString(imageInByte);
getHexString:
public static String getHexString(byte[] b) throws Exception {
String result = "";
for (int i=0; i < b.length; i++) {
result +=
Integer.toString( ( b[i] & 0xff ) + 0x100, 16).substring( 1 );
}
return result;
}