2010-02-12 115 views
8

我想通过processingjs开发一个画笔应用程序。 这个API有函数loadPixels(),它将RGB值加载到数组中。 现在我想将数组存储在服务器数据库中。Javascript客户端数据压缩

问题是数组的大小,当我转换为大小为5 MB的字符串。

最好的解决方案是在javascript级别进行压缩吗?怎么做?

回答

8

有关LZW压缩示例,请参见http://rosettacode.org/wiki/LZW_compression#JavaScript。它适用于重复模式较长的字符串。

Wikipedia article上LZW:

字典被初始化为 单字符串对应于所有可能的 输入字符 (而不是其他 ,除了透明的,如果 停止代码他们正在使用)。算法 通过扫描输入 字符串连续更长的 子串,直到找到一个不在字典中的 。当这样的 串中发现,对于 串少的最后一个字符的索引(即, 即在 字典中的最长子串)从 词典检索并发送到输出,并且 新的字符串(包括最后的 字符)被添加到词典 与下一个可用的代码。最后的 输入字符然后用作 下一个起点以扫描 子字符串。

以这种方式,连续的较长 串被登记在词典 和 后续编码作为单个输出 值提供。该算法对 数据具有重复模式效果最佳,因此消息的起始部分将看到 很小的压缩。然而,随着消息 的增长,压缩比率 倾向于渐近地达到最大值 。

+1

在我的情况下,这减少到33%的实际大小 – Soft 2010-02-12 15:08:33

+0

@Soft,这很酷!很高兴帮助。 – 2010-02-12 15:25:19

+1

此实现在某些情况下不起作用。我编码了大量的HTML,并且没有正确解码。保留返回null。改为使用此实现:https://gist.github.com/revolunet/843889 – shrimpwagon 2013-07-12 18:17:08