Как конвертировать изображение в webp используя gm в node.js

Я использовал gm для изменения размера изображений. Теперь я узнаю о webp ускорить мой сайт. Поэтому я хочу конвертировать изображения в webp используя ту же библиотеку. Но следующее не работает.

Как я могу конвертировать изображения в webp от gm?

function resize(last) {
    self.resize(width, height)
    .quality(80)
    .strip()
    .gravity('Center')
    .toBuffer(imageType, function(err, buffer) {
        if (err) last(err);
        else last(null, buffer);
    });
},

РЕДАКТИРОВАТЬ

gm('thumb_3.JPG')
  .toBuffer('webp', (err, buffer) => {
  fs.writeFile('buffer.webp', buffer, console.log)
})

Я также использую этот код

2 ответа

Решение

Все, что вам нужно сделать, это позвонить:

.toBuffer('webp', (err, buffer) => { /* ... */ })

Или используя streams

.stream('webp');

Но чтобы это работало, вы должны явно установить imagick с webp

brew install imagemagick --with-webp

В противном случае установите graphicsmagick что поддерживает webp непосредственно.

В зависимости от вашей ОС:

Ubuntu / Debian

sudo apt-get install graphicsmagick

Mac OS

brew install graphicsmagick

Для Windows или другой ОС, проверьте:


Рабочий пример:

const fs = require('fs');
const gm = require('gm');

gm('/tmp/img.jpg')
  .stream('webp')
  .pipe(fs.createWriteStream('/tmp/img.webp'));

gm('/tmp/img.jpg')
  .toBuffer('webp', (err, buffer) => {
    fs.writeFile('/tmp/img-buffer.webp', buffer, console.log)
  })

Для меня я использую версию GM 1.3.30 и это не включает webp автоматически. вместо этого вам нужно установить его вручную

Проверять, gm -version

Feature Support:
  Native Thread Safe       yes
  Large Files (> 32 bit)   yes
  Large Memory (> 32 bit)  yes
  BZIP                     yes
  ...
  WebP                     no
  WMF                      no
  X11                      no
  XML                      yes
  ZLIB                     yes

установить с заваркой,

brew install graphicsmagick --with-webp

если вы уже установили его до того

brew reinstall graphicsmagick --with-webp

в том числе webp решит вопрос Stream yields empty buffer также.

удачи!

Другие вопросы по тегам