【问题标题】:How to convert image into webp using gm in node.js如何在 node.js 中使用 gm 将图像转换为 webp
【发布时间】:2018-12-17 08:54:43
【问题描述】:

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

我也用这个代码

【问题讨论】:

    标签: javascript node.js node-modules webp gm


    【解决方案1】:

    你所要做的就是打电话:

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

    或使用streams

    .stream('webp');
    

    但要使其正常工作,您必须使用 webp 显式安装 imagick

    brew install imagemagick --with-webp
    

    否则直接安装支持webpgraphicsmagick

    取决于您的操作系统:

    Ubuntu/Debian

    sudo apt-get install graphicsmagick
    

    Mac 操作系统

    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,我的回答清楚地回答了这个问题。
    • 你测试它的方式
    • 你的答案似乎是对的,但不幸的是它对我不起作用
    • 它只是打印 null 并创建空 webp 文件
    【解决方案2】:

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

    祝你好运!

    【讨论】:

    • 如何在 debian 上安装 webp?
    • sudo apt install webp
    • 我正在使用 windows linux 子系统。就我而言,我必须安装 webp 包。不支持 --with-wepb 选项。
    猜你喜欢
    • 2019-11-18
    • 1970-01-01
    • 2013-11-20
    • 2021-09-18
    • 2019-01-31
    • 2018-12-01
    • 2020-09-24
    • 2017-09-10
    • 2018-05-10
    相关资源
    最近更新 更多