16.11.2022, 23:25
|
Кандидат Javascript-наук
|
|
Регистрация: 21.06.2020
Сообщений: 145
|
|
Как используя 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]] не сохраняется ничего (она пустая)
Последний раз редактировалось mik888em, 17.11.2022 в 00:15.
|
|
17.11.2022, 03:19
|
|
Тлен
|
|
Регистрация: 02.01.2010
Сообщений: 6,590
|
|
Ставлю палку колбасы, что не пустая, а там лежит 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, так что может и вообще не работать. Но проверять мне лень.)
__________________
29375, 35
Последний раз редактировалось Aetae, 17.11.2022 в 03:22.
|
|
17.11.2022, 10:33
|
|
Профессор
|
|
Регистрация: 25.10.2016
Сообщений: 1,012
|
|
Сообщение от Aetae
|
const data = await fs.readFile(path);
const buf = Buffer.from(data);
const dataBase64 = Buffer.from(buf).toString('base64');
|
зачем ты дополнительно два раза делаешь Buffer из Buffer? data уже готовый буфер
|
|
17.11.2022, 12:34
|
Кандидат Javascript-наук
|
|
Регистрация: 21.06.2020
Сообщений: 145
|
|
Сообщение от Aetae
|
Ставлю палку колбасы, что не пустая, а там лежит 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, так что может и вообще не работать. Но проверять мне лень.)
|
Запустил но [[ITOG]] - пустой(
Попробовал экранировать слеши в пути. В перем [[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();
|
|
17.11.2022, 12:44
|
Кандидат Javascript-наук
|
|
Регистрация: 21.06.2020
Сообщений: 145
|
|
Убрал
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();
|
|
17.11.2022, 13:50
|
|
Тлен
|
|
Регистрация: 02.01.2010
Сообщений: 6,590
|
|
Alexandroppolus, я просто переписал код неглядя.)
mik888em, экранирование работает не так, что ты за домики понарисовал.
'C:\\Users\\username\\Downloads\\777\\1c.jpg'
Цитата:
|
но [[ITOG]] -пустой.
|
Похрен что он пустой, если тебе всю консоль ошибками засрать должно было при таком коде. Может и другие ошибки которые тебе либа пишет ты не читал?
__________________
29375, 35
Последний раз редактировалось Aetae, 17.11.2022 в 13:52.
|
|
17.11.2022, 22:47
|
Кандидат Javascript-наук
|
|
Регистрация: 21.06.2020
Сообщений: 145
|
|
спасибо , получилось)
|
|
|
|