Конвертация картинки в WEBP формат.

Поддержка
  • @Fox может там нужно еще подключить в бас npm-модуль для работы с файловой системой ?

  • @Nikolas said in Конвертация картинки в WEBP формат.:

    @Fox просто весь код не стал сюда скидывать, естессно что в коде поменял, но эффекта нет, [[ITOG]] -пустой :

    А вы читали вообще свой код то? У вас идёт объявление функции function get_webpbase64(path) {..., а в конце кода вызов этой функции с атрибутами get_webpbase64("./nodejs_logo.jpg")

  • @Fox

    Объявили в начале function get_webpbase64(path)
    Поэтому удалил внизу. Но результ пустой.

    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");
            result.then(function(result) {
             [[ITOG]]=result;
          // you access the value from the promise here
              console.log(result)
    	    });
      }
    });
    }
    
  • @Nikolas said in Конвертация картинки в WEBP формат.:

    @Fox

    Объявили в начале function get_webpbase64(path)
    Поэтому удалил внизу. Но результ пустой.

    Вы вообще не понимаете что делаете?

  • @Fox
    Пробовал экранировать слеши в пути. В перем [[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();
    
  • @UserTrue said in Конвертация картинки в WEBP формат.:

    await main();

    Спасибо. Заработало, но есть проблема! получаю виде строки base64 в [[ITOG]] , и когда сохраняю этот base64 в файл, то файл webp имеет размер 19 KB, а ориг файл jpg весит 20 кб....то есть сжатие 5%, хотя по идее файл webp должен иметь сжатие оч сильное (в ~3 -4 раза) с тем же качеством картинки.

    Менял параметр -q 80 на 30 и менее. Но это влияет только на качество картинки, но не на "сжатие веса".

    Код:

    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;
    }
    
    await main();
    
  • @Nikolas по поводу этого уже обращайтесь к документации библиотеки, к NodeJS и BAS это уже имеет крайне косвенное отношение, хотя если кто занимался этим здесь - может быть и подскажут, но проще документацию посмотреть.

  • Поставил 65% качество (см в коде), тогда размер картинки уменьшается примерно в 2,5 раза.
    Почему такое качество, т к это оптимальное по тестам (cм график, тесты на графике делал не я). Но мои небольшие тесты подтвердили что 65% - это оптимально:

    рррррррррр.png
    Вобщем вот готовое решение, может кому-то будет полезно:

    Заранее создаем папку temp руками или basовскими экшенами вот тут:
    C:\Users\Administrator\Desktop\BrowserAutomationStudio\apps\ 25.3.8 \e\ рандом имя папки может быть \distr\app\node_modules\webp-converter\ temp

    В Басе включаем Node.js на версии 18.0 работает , проверил!
    Добавляем npmjs модуль https://www.npmjs.com/package/webp-converter в Node.js .

    В переменную [[PYT]] указываем путь к jpg файлу на диске.

    После отработки скрипта в экшене Node.js мы в переменной [[ITOG]] получаем текст (тип строка) который является webp-картинкой но представлен в base64 форме, далее этот код уже можно другими экшенами сохранить в виде картинки.

    Код для экшена Node.js

    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 65');
    }
    
    async function main() {
    
      const path = [[PYT]];
      
      const result = await getWebpBase64(path);
      console.log(result);
      
      [[ITOG]] = result;
    }
    
    await main();
    
  • @Nikolas said in Конвертация картинки в WEBP формат.:

    Код для экшена Node.js
    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 65');
    }
    async function main() {
    const path = [[PYT]];
    const result = await getWebpBase64(path);
    console.log(result);
    [[ITOG]] = result;
    }
    await main();

    var webp = require('webp-converter');
    [[RESULT]] = await webp.str2webpstr([[FILE_CONTENT]], 'jpg', '-q 65');
    
  • @Fox said in Конвертация картинки в WEBP формат.:

    var webp = require('webp-converter');
    [[RESULT]] = await webp.str2webpstr([[FILE_CONTENT]], 'jpg', '-q 65');

    Да, результат тот же, единственное что вначале нужно до экшена ноды прочитать экшном "Читать файл" файл картинки в base64.