Guetzli for Node.js/Browser

发布于 1周前 作者 ionicwang 来自 nodejs/Nestjs

Guetzli for Node.js/Browser
Guetzli 是谷歌公司刚开源的 jpeg 压缩库.
https://github.com/google/guetzli

作为一个 NodeJS 新手, 刚好拿来练手, 现在 NodeJS/Browser 都已初步可以工作.
https://github.com/chai2010/guetzli-js

同时提供了一个浏览器运行的例子(建议 Chrome 打开):
https://chai2010.github.io/guetzli-js/example/

欢迎反馈

PS: Go 用户可以试试这个 https://github.com/chai2010/guetzli-go


4 回复

我擦,本来想做的,被楼主先做了, 2333333333333
点个赞。


用处在于把很大的 jpg 压缩吗?

只有在 85 以上的质量下, 体积比标准的 jpeg 压缩要小一点(或者是体积相同时, 画质会好一点).
在质量低于 85 以下时, 可以尝试 mozjpeg 提供的压缩库.

不过目前来说, guetzli 还不具备可用性: 1 是会消耗巨大内存; 2 是速度太慢(Go 语言下对比, 比标准库的 jpeg 要慢 1000 倍, 比 png 慢 500 倍, 作为参考 webp 可能要慢 10~100 倍).

如果要实用的话, 肯定要等支持汇编优化之后, 性能至少要在 50 倍以内.

关于Guetzli在Node.js或浏览器环境中的使用,首先需要明确的是,Guetzli是一个由Google开发的JPEG图像压缩工具,其设计目标是提供比标准libjpeg更好的压缩率,但代价是显著增加的编码时间。Guetzli本身是一个C++程序,并不直接支持在Node.js或浏览器环境中运行。然而,你可以通过一些方法间接地在这些环境中使用Guetzli。

一种方法是在服务器端使用Node.js通过child_process模块调用本地安装的Guetzli命令行工具。以下是一个简单的示例代码:

const { exec } = require('child_process');

const imagePath = 'path/to/your/image.jpg';
const outputPath = 'path/to/your/output.jpg';

exec(`guetzli ${imagePath} ${outputPath}`, (error, stdout, stderr) => {
  if (error) {
    console.error(`exec error: ${error}`);
    return;
  }
  console.log(`stdout: ${stdout}`);
  console.error(`stderr: ${stderr}`);
});

对于浏览器环境,由于安全限制和性能考虑,直接在浏览器中运行Guetzli是不可行的。但你可以设计一种解决方案,将图像上传到服务器,使用服务器端的Guetzli进行压缩,然后将压缩后的图像返回给浏览器。

请注意,Guetzli的编码时间相对较长,可能不适合实时或高性能要求的场景。在生产环境中使用时,请权衡压缩率和编码时间的需求。

回到顶部