Не работает npm модуль (скрипт)



  • Всем привет товарищи. В общем вторые сутки мучаюсь, хочу установить модуль перцептивный хэш для изображения, выбор пал на https://www.npmjs.com/package/phash-js.

    Что я сделал:

    1. Установил Node.js 12.18.3
    2. Установил npm модуль (https://www.npmjs.com/package/phash-js)
    3. Вызвал скрипт следующим кодом:
     var pHash = require('phash-js');
    
     var image = '[[PROJECT_DIRECTORY]]/123.jpg';
     pHash.hash(image).then(hash => {
      console.log(hash.toBinary()) // 1011010111010110010100100000101100101011001011110011110111110111
      console.log(hash.toHex()) // b5d6520b2b2f4000
      console.log(hash.toInt()) // 13102750373803672000
    })
    

    Однако, увы и ах, но не работает. В логах пишет мне "ReferenceError: Worker is not defined", кто разбирается подскажите пожалуйста как правильно подключить данный модуль... А то действительно, уже сдался)



  • @GippeR said in Не работает npm модуль (скрипт):

    var image = '[[PROJECT_DIRECTORY]]/123.jpg';

    Не берусь утверждать, но почему у вас весь путь к картинке в кавычках?

    var image = '[[PROJECT_DIRECTORY]]/123.jpg';
    

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

    var image = [[PROJECT_DIRECTORY]]+'/'+'123.jpg';
    


  • @bigorat Попробовал сделать как вы и предложили, однако, снова в лог выдало сообщение "ReferenceError: Worker is not defined"...



  • @GippeR Эта библиотека для браузера, а еще надо ждать разрешения промиса через await



  • @UserTrue Ох... как же это все сложно)... Может подскажите, модуль для phash, который не привязан к браузеру... А то мне надо превращать картинки в перцептивный хэш, затем сравнивать на схожесть... А то я полный профан в JS...



  • @GippeR Jimp по моему умеет



  • @UserTrue said in Не работает npm модуль (скрипт):

    Jimp

    Посмотрел, да... там можно ресайзить и так далее, но там целый скрипт надо будет писать для хеширования, я нуб в этом... Мне бы готовый вариант, чтобы пару строчек исправить и в путь. Или я наивен и таких скриптов в природе не существует?





  • Нашел вот этот https://www.npmjs.com/package/imghash, работает, но с файлами которые в корневой директории скрипта.... Не очень удобно, как можно дописать или переделать, чтобы он работал с картинками в формате base64...?



  • Подскажите пожалуйста... Вот фрагмент кода, который работает и создает кеш для картинки

    const hash1 = await imghash.hash([[PROJECT_DIRECTORY]]+'/'+'original.jpg', 8, "binary");
    

    Однако, у меня изображения будут в base64 формата.... Как мне правильно написать, чтобы скрипт обрабатывал base64 изображения? И делал для них хеш. Просто качать картинки на сервер геморойно... Или это невозможно?



  • @GippeR там написано, что надо передать путь или буфер. Буфер можно создать из base64



  • @UserTrue Спасибо большое за помощь, с этим я разобрался.... Правда и методом тыка, все-таки вернулся к вашей рекомендации по использованию модуля jimp... Но я до сих пор не допер, как мне создать хеш для картинки, пробовал такой вариант

    Jimp.read(image)
      .then(image_user => {
        return image_user
          .hash(8)
          .write('тест.txt');
      });
    

    Тут понятно, он ничего не сохраняет... Но и ощибок модуль не выдает, значит хеш создает, но вот как его взять... Вывести в ту же переменную, вот здесь я застрял...



  • @GippeR Примерно так

     const image = await Jimp.read(imgSrc);
    [[IMG_HASH]] = image.hash(8);
    


  • Все.... Разобрался, надо было через "await" запускать функцию....



  • Тут такое дело, а как посчитать среднее значение цвета пикселя, и если оно меньше 50%, то делаем его белым.... В идеале хочу вот так картинку преобразовывать http://joxi.ru/BA0egnef1ZwaYr

    На данный момент, я сделал 3 пункта, но с 4 не знаю как написать код... Помогите пожалуйста.



  • @GippeR если я правильно вас понял то вам нужен метод threshold https://github.com/oliver-moran/jimp/tree/master/packages/plugin-threshold



  • @UserTrue Большое спасибо... То что нужно.


Log in to reply