Как получить хеш-значение из изображения с помощью ImageMagick или GraphicsMagick Node.js? - PullRequest
2 голосов
/ 01 июля 2019

Просмотр документации этих двух узловых пакетов:

https://github.com/aheckmann/gm

https://github.com/rsms/node-imagemagick

пытается выяснить, возможно ли сгенерировать перцептуальный хэш изображения, используя его.

Я уже использую эти пакеты в своем проекте, поэтому было бы неплохо найти хэш-функциональность вместо добавления дополнительного пакета, такого как Jimp.

Любая помощь высоко ценится!

РЕДАКТИРОВАТЬ 1:

Так что, посмотрев все ссылки и предложения от вас, ребята, я попробовал следовать

    gm()
    .command("convert")
    .in("testImage.jpeg")
    .in("-verbose")
    .in("-moments")
    .write( "testOutput.json", function (err) {
        if (!err) {
            console.log("DONE :)");
        }
        else {
            console.log("ERROR :(");
            console.log(err);
        }
    });

Это дает мне этот огромный вывод, но интересующая меня часть находится здесь:

"channelPerceptualHash": {
      "colorspaces": [ "sRGB", "HCLp"],
      "Channel0": {
        "PH1": [0.514487, 11],
        "PH2": [3.46339, 11],
        "PH3": [4.96178, 11],
        "PH4": [5.09255, 11],
        "PH5": [10.2783, 11],
        "PH6": [7.0728, 11],
        "PH7": [10.2625, 11]
      },
      "Channel1": {
        "PH1": [0.514487, 11],
        "PH2": [3.46339, 11],
        "PH3": [4.96178, 11],
        "PH4": [5.09255, 11],
        "PH5": [10.2783, 11],
        "PH6": [7.0728, 11],
        "PH7": [10.2625, 11]
      },
      "Channel2": {
        "PH1": [0.514487, 0.514487],
        "PH2": [3.46339, 3.46339],
        "PH3": [4.96178, 4.96178],
        "PH4": [5.09255, 5.09255],
        "PH5": [10.2783, 10.2783],
        "PH6": [7.0728, 7.0728],
        "PH7": [10.2625, 10.2625]
      }
    },
    "renderingIntent": "Perceptual"

По этой теме http://www.imagemagick.org/discourse-server/viewtopic.php?t=30258

Если я не ошибаюсь, я могу сравнить эти значения PH, чтобы определить, является ли изображение тем же или нет.

1 Ответ

2 голосов
/ 01 июля 2019

Ответ улучшен по совету, с благодарностью полученному от @ fmw42

AFAIK, первая из ваших двух ссылок более актуальна и не поддерживается в течение 3 лет, поэтому я не надеюсь.

В командной строке это будет:

identify -verbose -moments image.png

Поэтому я скачал исходный код этих пакетов и искал moment или hash или perceptual следующим образом:

find . -type f -exec grep -Ei "moment|hash|perceptual" {} +

Единственный вывод не был связан с перцептивными хешами, только обычными хешами изображений и целью перцептивного рендеринга:

./test/selectFrame.js:  m.identify('%#', function (err, hash1) {
./test/selectFrame.js:    m.selectFrame(2).identify('%#', function (err, hash2) {
./test/selectFrame.js:      assert.ok(hash1.toString().trim() !== hash2.toString().trim())
./test/getterIdentify.js:        assert.equal(d['Rendering intent'], 'Perceptual');

Я не полон надежд, но рад исправлению, если ошибаюсь.

...