【问题标题】:Native javascript decompress function in Chrome/webkitChrome/webkit 中的原生 javascript 解压功能
【发布时间】:2011-06-16 20:13:03
【问题描述】:

如果您发送的是 base64 编码和压缩的数据(例如,使用 python 的 zlib.compress()),您可以使用原生 Chrome 函数 window.atob() 将 base64 数据转换为二进制数据。有没有类似的原生javascript函数来解压zlib压缩的数据?有什么技巧可以做到这一点吗?

我知道解压数据的代码已经在浏览器中,因为它可以接收带有 gzip 标头的 HTML。

我不是在寻找用于解压的 javascript 库。

如果你在浏览器上想出一个解压方案,我可以把它压缩成那个格式进行传输。换句话说,任何解压程序都是可以接受的。

【问题讨论】:

  • 也许你只是在寻找“btoa()”,但记录base64编码是不是压缩;事实上,它使数据更大。
  • 好吧,我想我不清楚。我不是在寻找 btoa()。我知道那件事。我说的是解压缩使用 LZ77 或 LZW 或 gzip 或任何类似压缩算法压缩的数据。
  • 这就是我所怀疑的 :-) 不幸的是,我不知道有什么 API 可以公开它,但我不熟悉非标准浏览器内部结构,尤其是 Chrome。

标签: javascript google-chrome webkit compression


【解决方案1】:

这是一个将包含压缩数据的 PNG 绘制到 canvas 并逐像素读取数据的技巧:Compression using Canvas and PNG-embedded data。如果您想要任何使用浏览器的本机压缩库的东西,这里有一个选项。不幸的是,您必须在 javascript 中将 ImageData 转换为字符串。

【讨论】:

  • 链接已失效:
  • 更新了与 archive.org 的链接
【解决方案2】:

没有公开这样的功能。

【讨论】:

  • 好的,你怎么知道的?我怎样才能相信这一点?
  • 通过查看每个浏览器提供的公开的全局 API,例如在 JavaScript 控制台中。
【解决方案3】:

2020 年更新

Chrome 80+ 支持 CompressionStreamDecompressionStream API

Gzip 压缩流

const compressedReadableStream = inputReadableStream.pipeThrough(new CompressionStream('gzip'));

Deflate-压缩一个 ArrayBuffer

function compressArrayBuffer(input) {
  const stream = new Response(input).body
    .pipeThrough(new CompressionStream('deflate'));
  return new Response(stream).arrayBuffer();
}

Gzip-解压一个 Blob 到一个 Blob

这会将输入视为 gzip 文件,而不考虑 mime 类型。输出 Blob 的 mime 类型为空。

async function DecompressBlob(blob) {
  const ds = new DecompressionStream('gzip');
  const decompressedStream = blob.stream().pipeThrough(ds);
  return await new Response(decompressedStream).blob();
}

https://github.com/WICG/compression/blob/master/explainer.md

【讨论】:

  • 太棒了。在我问这个问题仅仅 9 年后——很久以前,我不记得我为什么想要这个。 :-)
【解决方案4】:

试试window.btoa

【讨论】:

  • 我不是在寻找 atob 的倒数。一个常见的com,position是取数据,用LZ77或类似的算法压缩,base64编码,然后传输到客户端,客户端解开base64编码,然后解压数据。撤消 base64 编码可以使用 atob 本地完成。什么本机函数(如果有)可以撤消压缩?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-02
  • 2018-03-23
  • 2013-10-02
  • 2015-02-02
相关资源
最近更新 更多