3

gm用于调整图像大小。现在我知道如何webp加快我的网站速度。所以我想将图像转换为webp使用相同的库。但以下不起作用。

如何将图像转换为webpby 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)
})

我也使用此代码

4

2 回答 2

2

您所要做的就是致电:

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

或使用streams

.stream('webp');

但要让它工作,你必须使用 webp 显式安装 imagick

brew install imagemagick --with-webp

否则直接安装graphicsmagick支持webp

根据您的操作系统:

Ubuntu/Debian

sudo apt-get install graphicsmagick

苹果系统

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)
  })
于 2018-07-09T16:05:07.750 回答
2

对我来说,我使用的是 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

祝你好运 !

于 2018-07-19T06:44:17.817 回答