用于javascript lzw压缩的字母词典;仅使用这些字符“-一串

用于javascript lzw压缩的字母词典;仅使用这些字符“-一串,javascript,google-chrome,compression,syntax-error,lzw,Javascript,Google Chrome,Compression,Syntax Error,Lzw,祝各位读者和助手们早安, 我想利用我最近发现的一个javascript函数,它的LZW压缩字符串 function lzw_encode(s) { var dict = {}; var data = (s + "").split(""); var out = []; var currChar; var phrase = data[0]; var code = 256; for (var i=1; i<data.length; i++)

祝各位读者和助手们早安, 我想利用我最近发现的一个javascript函数,它的LZW压缩字符串

function lzw_encode(s) {
    var dict = {};
    var data = (s + "").split("");
    var out = [];
    var currChar;
    var phrase = data[0];
    var code = 256;
    for (var i=1; i<data.length; i++) {
        currChar=data[i];
        if (dict[phrase + currChar] != null) {
            phrase += currChar;
        }
        else {
            out.push(phrase.length > 1 ? dict[phrase] : phrase.charCodeAt(0));
            dict[phrase + currChar] = code;
            code++;
            phrase=currChar;
        }
    }
    out.push(phrase.length > 1 ? dict[phrase] : phrase.charCodeAt(0));
    for (var i=0; i<out.length; i++) {
        out[i] = String.fromCharCode(out[i]);
    }
    return out.join("");
}
更新1:不过如果您也看到解码功能,它可能会有所帮助

function lzw_decode(s) {
    var dict = {};
    var data = (s + "").split("");
    var currChar = data[0];
    var oldPhrase = currChar;
    var out = [currChar];
    var code = 256;
    var phrase;
    for (var i=1; i<data.length; i++) {
        var currCode = data[i].charCodeAt(0);
        if (currCode < 256) {
            phrase = data[i];
        }
        else {
           phrase = dict[currCode] ? dict[currCode] : (oldPhrase + currChar);
        }
        out.push(phrase);
        currChar = phrase.charAt(0);
        dict[code] = oldPhrase + currChar;
        code++;
        oldPhrase = phrase;
    }
    return out.join("");
}
功能lzw_解码{
var dict={};
变量数据=(s+“”)。拆分(“”);
var currChar=数据[0];
var oldphase=currChar;
var out=[currChar];
var代码=256;
var短语;

对于(var i=1;i确定可以发送哪些字节,不能发送哪些字节。(希望来自可靠的文档源,而不是测试,但通过测试进行验证。)

设计转义码,其中使用一个有效字符作为转义字符,下一个字符(也是有效字符之一)对无法发送的字节进行编码

将其应用于压缩器的输出。最好将压缩工作留给压缩器,而不是尝试将其与编码结合起来。您应该将编码作为单独的步骤


不要使用LZW。与现代方法(、等)相比,LZW无效且过时。

确定可以发送哪些字节,不能发送哪些字节。(希望来自可靠的文档来源,而不是测试,但经过测试验证。)

设计转义码,其中使用一个有效字符作为转义字符,下一个字符(也是有效字符之一)对无法发送的字节进行编码

将其应用于压缩器的输出。最好将压缩工作留给压缩器,而不是尝试将其与编码结合起来。您应该将编码作为单独的步骤


不要使用LZW。与现代方法(如、、等)相比,LZW无效且过时

我非常感谢您的建议和工作,我之所以使用lzw,是因为它作为一个函数的简单性和高压缩率,就像我达到50%的较小图像块的比率一样,我在图像上传时进行压缩,在服务器端再次解压缩,因为在我的应用程序中,我想提供上传的可能性一次加载各种图像。压缩过程大大加快了整个过程,使一切都变得平滑了一点。我计算出,我以前通过压缩仍然可以获得上传时间。我没有发现任何“简单”的东西要使用zlib javascript lib,我现在使用的是huffman压缩,但使用huffman,我最多只能压缩30%。你认为在上传之前让客户端压缩是一个坏主意吗?我认为这是一种创新。我非常欣赏你的建议,非常有效,我使用lzw的原因是简单y作为一个函数和高压缩率,就像我达到50%的较小图像块的比率一样,我在图像上传时进行压缩,在服务器端我再次解压缩,因为在我的应用程序中,我希望能够一次上传各种图像。进行压缩大大加快了整个过程,这是非常困难的我稍微想了想,我计算了一下,我仍然可以通过压缩来获得上传的时间。我没有发现任何“简单”的东西要使用zlib javascript libright,我现在使用的是huffman压缩,但使用huffman,我最多只能压缩30%。你认为在上传之前让客户端压缩是个坏主意吗?我认为这有点创新
function lzw_decode(s) {
    var dict = {};
    var data = (s + "").split("");
    var currChar = data[0];
    var oldPhrase = currChar;
    var out = [currChar];
    var code = 256;
    var phrase;
    for (var i=1; i<data.length; i++) {
        var currCode = data[i].charCodeAt(0);
        if (currCode < 256) {
            phrase = data[i];
        }
        else {
           phrase = dict[currCode] ? dict[currCode] : (oldPhrase + currChar);
        }
        out.push(phrase);
        currChar = phrase.charAt(0);
        dict[code] = oldPhrase + currChar;
        code++;
        oldPhrase = phrase;
    }
    return out.join("");
}