如何在 node.js 中使用 gm 将图像转换为 webp

How to convert image into webp using gm in node.js

我正在使用 gm 来调整图像大小。现在我了解 webp 来加速我的网站。所以我想使用相同的库将图像转换为 webp。但是下面的不行。

如何通过 gm 将图像转换为 webp

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)
})

我也用这个代码

您只需致电:

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

或使用streams

.stream('webp');

但要使其正常工作,您必须使用 webp

显式安装 imagick
brew install imagemagick --with-webp

否则直接安装支持webpgraphicsmagick

取决于你的OS:

Ubuntu/Debian

sudo apt-get install graphicsmagick

Mac OS

brew install graphicsmagick

对于windows或其他OS,检查:


工作示例:

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 安装,

brew install graphicsmagick --with-webp

如果你之前已经安装了它

brew reinstall graphicsmagick --with-webp

包括 webp 也会解决问题 Stream yields empty buffer

祝你好运!