使用js等浏览器理解的技术在客户端压缩文件

时间:2017-09-08 05:27:35

标签: javascript

我正在使用文件api在js中压缩文件的项目。我使用Huffmann Coding在javascript中压缩文件。现在我得到了包含编码位的字符串。可以帮我转换成实际位以便文件大小必须减少。

我的Js:

<script type="text/javascript">
function loadFile(o) {

  var fr = new FileReader();
  fr.onload = function(e) {

    showDataFile(e, o);
  };
  fr.readAsText(o.files[0]);
}

function showDataFile(e, o) {
  document.getElementById("data").innerHTML = e.target.result;
  var freqs = {};
  freqs = frequency(e.target.result);
  var tup = [];
  tup = sortfreq(frequency(e.target.result));
  //console.log(tup);
  tree = buildTree(tup);

  assignCode(tree, pat);
  encoded = encode(e.target.result);
  document.getElementById("data1").innerHTML = encoded;

  /* alert(encoded); */
}

function frequency(str) {
  var freqs = {};
  for (var i in str) {

    if (freqs[str[i]] == undefined) {

      freqs[str[i]] = 1;
    } else {
      freqs[str[i]] = freqs[str[i]] + 1;
    }

  }

  return freqs;
}

function sortfreq(freqs) {
  var tuples = [];
  for (var
    let in freqs) {
    tuples.push([freqs[let],
      let
    ]);
  }

  return tuples.sort();
}

function buildTree(tuples) {
  while (tuples.length > 1) {
    leastTwo = [tuples[0][1], tuples[1][1]]
    //console.log(leastTwo);  
    theRest = tuples.slice(2, tuples.length);
    //console.log(theRest);  
    combFreq = tuples[0][0] + tuples[1][0];
    //console.log(combFreq);  
    tuples = theRest;
    end = [combFreq, leastTwo];
    tuples.push(end);
    //console.log(tuples);  
    tuples.sort();
    //console.log(tuples);  
  }

  return tuples[0][1];
}
code = {};
pat = '';
//assiging codes to each letter  
function assignCode(node, pat) {
  if (typeof(node) == typeof(""))
    code[node] = pat;
  else {
    assignCode(node[0], pat + '0');
    assignCode(node[1], pat + '1');
  }

}

function encode(string) {
  output = '';
  for (s in string)
    output += code[string[s]];
  return output;

}       
</script>

我的身体:

Select file to read </pre> input type="file" onchange="loadFile(this)"><br>
Before Encoding: <p id="data"></p>
   After Encoding: <p id="data1"></p>

浏览器上的我的输出:

Before Encoding:
hiiiiiiiiiiiiihhhhiiiiiiiiiijjjjkk

After Encoding:

1001001001001001001001001001001001001001111100100100100100100100100100100101010101000000

enter image description here

0 个答案:

没有答案
相关问题