Guetzli for Node.js/Browser
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
用处在于把很大的 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的编码时间相对较长,可能不适合实时或高性能要求的场景。在生产环境中使用时,请权衡压缩率和编码时间的需求。