Как используя nmpjs конвертировать JPG base64 в webp base64 или же прямо в файл?
Конвертирую картинку JPG формата в WEBP формат.
Поставил npmjs модуль https://www.npmjs.com/package/webp-converter на node 18. Поставил в перем [[PYT]] - путь к jpg файлу вот такой: C:\Users\username\Downloads\777\1c.jpg Но в переменную [[ITOG]] не сохраняется ничего (она пустая). И использую из офиц доков такой пример для: Convert base64 image to webpbase64 image const webp=require('webp-converter'); const fs=require('fs'); const path=[[PYT]]; function get_webpbase64(path) { fs.readFile(path, function (error, data) { if (error) { throw error; } else { let buf = Buffer.from(data); let dataBase64 = Buffer.from(buf).toString('base64'); // base64str of image // base64str image type jpg,png ... //option: options and quality,it should be given between 0 to 100 let result = webp.str2webpstr(dataBase64,"jpg","-q 80"); [[ITOG]]=result; result.then(function(result) { // you access the value from the promise here console.log(result) }); } }); } // use the default temp path for conversion get_webpbase64("./nodejs_logo.jpg") // use the custom temp path for conversion get_webpbase64("./nodejs_logo.jpg","/home/user/Desktop/webp/temp") Но в переменную [[ITOG]] не сохраняется ничего (она пустая) |
Ставлю палку колбасы, что не пустая, а там лежит Promise.
Советую изучить https://learn.javascript.ru/async. Без понимания асинхронности в javascript ты никуда не уедешь и будешь спотыкаться на каждом шагу. Примерно так оно должно выглядеть в плоском виде: const webp = require('webp-converter'); const fs = require('fs').promises; async function getWebpBase64(path) { const data = await fs.readFile(path); const buf = Buffer.from(data); const dataBase64 = Buffer.from(buf).toString('base64'); // base64str of image // base64str image type jpg,png ... //option: options and quality,it should be given between 0 to 100 return webp.str2webpstr(dataBase64, 'jpg', '-q 80'); } async function main() { // тут весь код, вне main ничего кроме других деклараций функций ничего быть не должно const path = [[PYT]]; const result = await getWebpBase64(path); console.log(result); [[ITOG]] = result; } main(); Вообще либа явно написана каким-то залётным хреном, мало что понимающем в js, так что может и вообще не работать. Но проверять мне лень.) |
Цитата:
|
Цитата:
Попробовал экранировать слеши в пути. В перем [[PYT]] поставил: C:/\Users/\username/\Downloads/\777/\1c.jpg Но [[ITOG]] - пустой const webp = require('webp-converter'); const fs = require('fs').promises; async function getWebpBase64(path) { const data = await fs.readFile(path); const buf = Buffer.from(data); const dataBase64 = Buffer.from(buf).toString('base64'); // base64str of image // base64str image type jpg,png ... //option: options and quality,it should be given between 0 to 100 return webp.str2webpstr(dataBase64, 'jpg', '-q 80'); } async function main() { const path = [[PYT]]; const result = await getWebpBase64(path); console.log(result); [[ITOG]] = result; } main(); |
Убрал
const dataBase64 = Buffer.from(buf).toString('base64'); но [[ITOG]] -пустой. Код: const webp = require('webp-converter'); const fs = require('fs').promises; async function getWebpBase64(path) { const data = await fs.readFile(path); const buf = Buffer.from(data); // base64str of image // base64str image type jpg,png ... //option: options and quality,it should be given between 0 to 100 return webp.str2webpstr(dataBase64, 'jpg', '-q 80'); } async function main() { // тут весь код, вне main ничего кроме других деклараций функций ничего быть не должно const path = [[PYT]]; const result = await getWebpBase64(path); console.log(result); [[ITOG]] = result; } main(); |
Alexandroppolus, я просто переписал код неглядя.)
mik888em, экранирование работает не так, что ты за домики понарисовал. 'C:\\Users\\username\\Downloads\\777\\1c.jpg' Цитата:
|
спасибо , получилось)
|
Часовой пояс GMT +3, время: 04:46. |