如何使用Node.js中的gm将图像转换为WebP

3

我曾使用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)
})

我也使用这段代码。
2个回答

2

对于我来说,我正在使用版本为1.3.30的gm,它不会自动包含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。祝好运!

我怎样在 Debian 上安装 WebP? - Muhammad Ateek
sudo apt install webp - MiguelSlv
我正在使用Windows Linux子系统。在我的情况下,我必须安装webp软件包。--with-wepb选项不受支持。 - MiguelSlv

2

你只需要打电话:

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

或者使用

.stream('webp');

但是要使其正常工作,您需要显式安装支持webp格式的imagick。

brew install imagemagick --with-webp

否则安装直接支持 webpgraphicsmagick

根据您的操作系统不同:

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

是的,它确实可以减小文件大小。不过这取决于图片本身,有些图片可能已经无法再进行优化了。我刚刚测试了一个大小为 14.5kbjpg 图片,转换成 webp 格式后大小缩小到了 2.3kb。总之,你问如何将图片转换成 webp 格式,我的回答已经清楚地回答了这个问题。 - Marcos Casagrande
通过这个你可以测试它。 - Haseeb Ahmad
展示你的所有代码,你可能正在使用回调函数的错误值。或者你没有安装正确的依赖。 - Marcos Casagrande
它记录了空值并创建了一个空的webp文件。 我在Ubuntu 14.04上...是的,我两个都有。 - Haseeb Ahmad
err 抛出:流产生空缓冲区 - Marcos Casagrande
显示剩余11条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接