Как мне преобразовать изображение в «8 бит»?шестнадцатеричная строка? - PullRequest
0 голосов
/ 17 марта 2019

Задача

Я пытаюсь преобразовать этот код 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;
}
...