← 首页 / 压缩对比 · CompressionStream vs Canvas→PNG 待审核
CompressionStream · Canvas→PNG

压缩对比 · CompressionStream vs Canvas→PNG

同一份数据,分别用浏览器原生 CompressionStream(DEFLATE / gzip)和把字节伪装成像素 → 让 canvas 编码成 PNG两种方式压缩,各自解压回原文校验往返一致性,并对比体积(原始字节 / base64 字符数,后者是塞进 URL 时的真实大小)。

原理:Canvas 方案把每 3 个字节塞进一个像素的 R/G/B 通道(alpha 恒为 255——canvas 用预乘 alpha 存储,alpha 小于 255 时 getImageData / putImageData 往返会因舍入破坏数据),再用 toDataURL("image/png") 让浏览器内置的 PNG(DEFLATE) 编码器做无损压缩。本质上就是复用 PNG 的 zlib。

因此两者都是无损 DEFLATE,压缩率接近;但 Canvas 方案额外背着 PNG 头 + alpha 通道 25% 浪费 + base64 膨胀,对小数据 / 高熵数据常常不如直接用 CompressionStream。这个 demo 就是用来直观看到差距的。

相关链接