跳过主要内容
全部文章
技术

PixSip 内部揭秘:让 MozJPEG 在你的浏览器里跑起来

深入了解一个浏览器端图片压缩工具的底层:WebAssembly 编解码器、Worker 流水线,以及 20 张图片测试中 18 张持平或优于 TinyPNG 的基准。

PixSip 看起来很简单——把图片丢进去,拿到更小的文件——但背后是一套真实的压缩流水线,完全运行在你的标签页里。它每批最多处理 20 张图片,在 20 张图片的测试中,有 18 张的体积持平或小于 TinyPNG。下面拆解这些零件是怎么拼起来的。

编码器栈

我们使用与 Google Squoosh 同款的开源代码库,编译成 WebAssembly 运行:

  • MozJPEG —— 针对感知质量调优的 JPG 编码器,处理 JPG 和 HEIC 输入
  • libwebp —— WebP 编码
  • OxiPNG —— PNG 无损优化
  • libavif 和 libjxl —— AVIF 与 JPEG XL

Squoosh 是这里的参照系。我们与 Google 及 Squoosh 项目没有关联——我们运行同样的编解码器,并补上批量工作流需要的部分。

为什么是一套固定质量,而不是滑杆

大多数压缩工具给你一个画质滑杆,让你自己猜。我们反过来:每个格式标定一套质量参数,以 TinyPNG 的输出为基准。在 20 张图片的测试中,我们的结果有 18 张在可比画质下体积持平或小于 TinyPNG。

这也意味着"压缩过"不等于"糊成一团":JPG 和 HEIC 走 MozJPEG,照片类 PNG 重编码为调色板模式,参考图上 PSNR 达到 46 dB。

流水线

  1. 解码 —— JPG、PNG、WebP、AVIF 和 HEIC 全部本地解码;HEIC 解码是我们自己实现的,因为 Squoosh 没有,iPhone 照片在 Chrome、Firefox、Edge 里会直接加载失败。
  2. 编码 —— 每个文件在 Web Worker 里跑对应格式的编码器,20 张批量任务并行压缩,页面不卡顿。
  3. 对比 —— 每个输出都有对比视图:拖动分割线在原图与结果之间擦拭,或切到 1:1 在原始分辨率下检查压缩伪影。
  4. 导出 —— 逐张下载,或者把整批打包成一个 ZIP,全程本地生成。

我们刻意不做的事

没有上传、没有账号、没有服务器往返。正是这个约束让架构变得简单:没有上传队列、没有需要保护的存储、没有按用户计的算力成本——这也是它能免费且不设额度墙的原因。

代价是诚实的:大批量任务用的是你的 CPU 而不是服务器。对 20 张图来说,这不过是现代设备几秒钟的事,而你的文件从未离开房间。

img

如果你在意细节,打开 PixSip 后看一眼浏览器的网络面板,观察什么没有被发送。那个空白,就是整个设计。


继续阅读:为什么选择浏览器端讲隐私背后的逻辑,图片格式指南把数字变成格式决策。试试工具:压缩 JPG、HEIC 转 JPG、转成 WebP。