@olegar said in Как вызвать функцию БАС в node?:
Благодарю. А если в вызываемой функции есть "node.js" то такая функция работать не будет?
Другая функция на встроенном языке уже выполняется
Да
устанавливаю библиотеку node.js "jimp"

Далее выполняю код, код не выдает ошибок или результата и так не только с этой библиотекой с другими такая же история.
const Jimp = require('jimp');
async function compareImages(imagePath1, imagePath2) {
const [img1, img2] = await Promise.all([Jimp.read(imagePath1), Jimp.read(imagePath2)]);
// Масштабируем изображения к одному размеру, если они разные
if (img1.bitmap.width !== img2.bitmap.width || img1.bitmap.height !== img2.bitmap.height) {
img1.scaleToFit(img2.bitmap.width, img2.bitmap.height);
}
const diff = Jimp.diff(img1, img2);
const similarity = (1 - diff.percent) * 100;
return similarity;
}
async function run() {
try {
const imagePath1 = 'C:/FOTO/1.jpg';
const imagePath2 = 'C:/FOTO/2.jpg';
const similarity = await compareImages(imagePath1, imagePath2);
console.log(`Сходство между изображениями: ${similarity.toFixed(2)}%`);
} catch (error) {
console.error('Произошла ошибка:', error);
}
}
run();
Если выполнить просто
console.log(`Сходство между изображениями`);
все выводится.
Подскажите пожалуйста в чем может быть проблема?
Спасибо.
@mocard said in Помогите понять почему не выводится в лог не ошибка не результат при использовании node.js:
устанавливаю библиотеку node.js "jimp"
Далее выполняю код, код не выдает ошибок или результата и так не только с этой библиотекой с другими такая же история.
const Jimp = require('jimp'); async function compareImages(imagePath1, imagePath2) { const [img1, img2] = await Promise.all([Jimp.read(imagePath1), Jimp.read(imagePath2)]); // Масштабируем изображения к одному размеру, если они разные if (img1.bitmap.width !== img2.bitmap.width || img1.bitmap.height !== img2.bitmap.height) { img1.scaleToFit(img2.bitmap.width, img2.bitmap.height); } const diff = Jimp.diff(img1, img2); const similarity = (1 - diff.percent) * 100; return similarity; } async function run() { try { const imagePath1 = 'C:/FOTO/1.jpg'; const imagePath2 = 'C:/FOTO/2.jpg'; const similarity = await compareImages(imagePath1, imagePath2); console.log(`Сходство между изображениями: ${similarity.toFixed(2)}%`); } catch (error) { console.error('Произошла ошибка:', error); } } run();Если выполнить просто
console.log(`Сходство между изображениями`);все выводится.
Подскажите пожалуйста в чем может быть проблема?
Спасибо.
Потому что у вас синхронный вызов функции run();
@mocard said in Помогите понять почему не выводится в лог не ошибка не результат при использовании node.js:
удалил run(); и тоже самое..
Зачем вы удалили вызов функции?
можете по подробнее объяснить в чем баг?
Вам именно объяснить или дать готовое решение?
Объяснение: https://developer.mozilla.org/ru/docs/Learn/JavaScript/Asynchronous/Introducing
Решение, вместо run();
;(async function(){await run()})();
Внес изменения и всё равно ничего не выводит, выполняется без ошибок и результата.
const Jimp = require('jimp');
async function compareImages(imagePath1, imagePath2) {
const img1 = await Jimp.read(imagePath1);
const img2 = await Jimp.read(imagePath2);
// Масштабируем изображения к одному размеру, если они разные
if (img1.bitmap.width !== img2.bitmap.width || img1.bitmap.height !== img2.bitmap.height) {
img1.scaleToFit(img2.bitmap.width, img2.bitmap.height);
}
const diff = Jimp.diff(img1, img2);
const similarity = (1 - diff.percent) * 100;
return similarity;
}
async function run() {
try {
const imagePath1 = 'C:/FOTO/1.jpg';
const imagePath2 = 'C:/FOTO/2.jpg';
const similarity = await compareImages(imagePath1, imagePath2);
console.log(`Сходство между изображениями: ${similarity.toFixed(2)}%`);
} catch (error) {
console.error('Произошла ошибка:', error);
}
}
(async function() {
await run();
})();
Думал может проблема в доступе к файлам но нет.. вот пример кода где пытаюсь сравнивать через base64 и таже история.
const Jimp = require('jimp');
async function compareImages(buffer1, buffer2) {
const img1 = await Jimp.read(buffer1);
const img2 = await Jimp.read(buffer2);
// Масштабируем изображения к одному размеру, если они разные
if (img1.bitmap.width !== img2.bitmap.width || img1.bitmap.height !== img2.bitmap.height) {
img1.scaleToFit(img2.bitmap.width, img2.bitmap.height);
}
const diff = Jimp.diff(img1, img2);
const similarity = (1 - diff.percent) * 100;
return similarity;
}
// Замените [[FOTO1]] и [[FOTO2]] на фактические base64-строки
const encodedImage1 = [[FOTO1]];
const encodedImage2 = [[FOTO2]];
const buffer1 = Buffer.from(encodedImage1, 'base64');
const buffer2 = Buffer.from(encodedImage2, 'base64');
compareImages(buffer1, buffer2)
.then((similarity) => {
console.log(`Сходство между изображениями: ${similarity.toFixed(2)}%`);
})
.catch((error) => {
console.error('Произошла ошибка:', error);
});
@mocard said in Помогите понять почему не выводится в лог не ошибка не результат при использовании node.js:
@UserTrue Спасибо протестирую.!
Ранее выполнял все классическими функциями в BAS и периодически крашился BAS при сравнении фото. Хочется более качественное решение использовать.
А причем тут БАС, это библиотека на Nodejs... Просто ее в модуль обернули