Почему файл картинки .webp не сжался?

Запустил на ноде преобразование jpg весом 20 кб - > в webp base64 используя вот этот npm модуль https://www.npmjs.com/package/webp-converter

Получаю норм файл WEBP в виде строки base64 , но когда сохраняю то файл webp имеет размер 19 KB, то есть сжатие 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();


Ответы (1 шт):

Автор решения: eri

base64 увеличивает размер в 4 раза. используй бинарный формат для сохранения в файл.

почему бы не использовать imagemagick для этого?

команда найти все файлы размером больше 20к

$ find . -size +20k -iname "*.jpg" -exec ls -sh {} \;
172K ./1623912179161899925.jpg
36K ./Веб-камера/2021-09-20-151622.jpg
36K ./Веб-камера/2021-09-20-151641.jpg
40K ./изображение_viber_2021-10-23_23-31-38.jpg
24K ./photo_2020-12-27_18-25-14.jpg

пережимаем

$ find . -size +20k -iname "*.jpg" -exec mogrify -format webp {} \;

и вот результат

$ find . -iname "*.webp" -exec ls -sh {} \;
20K ./изображение_viber_2021-10-23_23-31-38.webp
20K ./Веб-камера/2021-09-20-151641.webp
20K ./Веб-камера/2021-09-20-151622.webp
16K ./photo_2020-12-27_18-25-14.webp
92K ./1623912179161899925.webp
→ Ссылка