Не работает npm модуль (скрипт)
-
Всем привет товарищи. В общем вторые сутки мучаюсь, хочу установить модуль перцептивный хэш для изображения, выбор пал на https://www.npmjs.com/package/phash-js.
Что я сделал:
- Установил Node.js 12.18.3
- Установил npm модуль (https://www.npmjs.com/package/phash-js)
- Вызвал скрипт следующим кодом:
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
Посмотрел, да... там можно ресайзить и так далее, но там целый скрипт надо будет писать для хеширования, я нуб в этом... Мне бы готовый вариант, чтобы пару строчек исправить и в путь. Или я наивен и таких скриптов в природе не существует?
-
@GippeR Да там все уже написано https://github.com/oliver-moran/jimp/tree/master/packages/jimp#comparing-images
-
Нашел вот этот 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 Большое спасибо... То что нужно.