基于顶级编解码器实现纯前端高效图片压缩
Google的Squoosh项目封装了MozJPEG、libwebp、rust Oxipng等顶级图像编解码器,但是使用依赖于Node.js,而jSquash项目对此进行了二次封装,将底层编解码器以WebAssembly的形式提供,实现不依赖node的纯前端的压缩方式。 经测试可以将10mb的png压缩为500kb的jpg,肉眼画质无损失,95%的优化。
文末会给出我的使用代码。github项目地址也在文末。
jSquash
jSquash是一个轻量级、基于WebAssembly(WASM)的图像处理库,旨在为浏览器和V8运行时(如Cloudflare Workers)提供高效的图像编解码能力。其设计来源于Squoosh,强调浏览器兼容性和模块化。特点:
- 专注于浏览器和Web Worker,适合前端环境。
- 模块化设计:支持多种图像格 式(如@jSquash/jpeg、@jSquash/png、@jSquash/webp等),按需引入。
- 无动态代码执行:可在严格环境中运行,如Cloudflare Workers。
而WASM优势:
- 接近原生代码的执行速度,适合计算密集型任务如图像压缩。
- 无需依赖特定运行时环境,浏览器即可运行。
- WASM运行在沙箱环境中,适合严格的执行环境。
比如@jSquash/jpeg使用MozJPEG库进行JPEG图像的编解码,@jSquash/webp基于libwebp实现WebP格式支持。通过Emscripten编译为WASM模块,并通过JavaScript接口暴露给开发者。
jSquash采用ES Module(ESM)格式,所有模块(如@jSquash/avif、@jSquash/png)均为独立包,可按需引入,减少了打包体积,适合Vite、Webpack这些前端构建工具。
jSquash也支持通过CDN直接使用(大陆环境不稳定):
import { decode } from 'https://unpkg.com/@jsquash/jpeg?module';
