【发布时间】:2011-09-02 06:53:53
【问题描述】:
我正在开发一个可以生成动画 GIF 图像的 JavaScript 应用程序。 GIF 图像使用 LZW 压缩算法,因此我需要在 JavaScript 中实现它。
到目前为止,我已经有了this code,它可以将字符串(二进制或非二进制)压缩为整数数组,然后解压缩就可以了。查看完整代码的 pastebin 链接(如果您认为有必要),但这是我运行这个 sn-p 的内容,它应该证明压缩和解压缩本身可以正常工作:
var lzw = new LZW(8);
var input = "TOBEORNOTTOBEORTOBEORNOT#";
var compressed = lzw.compress(input);
console.log(input);
// "TOBEORNOTTOBEORTOBEORNOT#"
console.log(compressed);
// [84, 79, 66, 69, 79, 82, 78, 79, 84, 256, 258, 260, 265, 259, 261, 263, 35]
console.log(lzw.decompress(compressed));
// "TOBEORNOTTOBEORTOBEORNOT#"
现在的问题是我不知道如何进行二进制打包。如果我对 LZW 算法的理解正确,则只有 compressed 的第一个位模式可以整齐地适合 8 位边界,其余的需要位于 9 位边界上。
我经过Wikipedia's article on Lempel-Ziv-Welch,似乎for GIF image data,我总是将压缩模式的最低有效位与一个字节的最低有效位对齐;但我试过了,我的 GIF 不工作,而且 GIF 解析器对失败不是很明确,所以我不确定是因为压缩还是其他原因。对我来说,这看起来也是一种巨大的浪费,所以它只会让这种方法更加可疑。
谁能指出我正确的方向?
【问题讨论】:
标签: javascript compression lzw