Joe*_*ani 5 javascript compression blob inflate
我正在使用websocket以blob格式发送Jpeg图像.我已经压缩(gzipped)blob但我无法找到使用JavaScript解压缩它的方法.有谁知道怎么样?
这是我用来读取blob然后将其转换为base64字符串的代码:
var r = new FileReader();
r.onload = function(){
draw(btoa(r.result));
};
r.readAsBinaryString(e.data);
Run Code Online (Sandbox Code Playgroud)
该draw()函数基本上使用base64字符串将图像绘制到HTML5画布上.
我发现这个库可以膨胀字符串,但它不支持blob.(据我所知/已经测试过)如果有人知道某种方式,我会赞同它.:) 谢谢!
我为我的粒子系统编辑器做了非常类似的事情,它支持读取 Cocos2D plist 文件。plist文件中是纹理数据,它是经过gzip压缩然后转换为base64的png。我是这样做的:
var input = 'byu9g1RZpINUpVtoKoiKIqJYoris...'; // really long string
// from base64 to ascii binary string
var decodedAsString = atob(input);
// ascii string to bytes in gzipped format
var data = this._binaryStringToArray(decodedAsString);
// raw, uncompressed, binary image data into an array using gzip.js
var uncompressed = require('gzip-js').unzip(data);
// now take the raw uncompressed png and convert it
// back to base64 to use it as a data url
var asString = this._arrayToBinaryString(uncompressed);
var encodedForDataUrl = btoa(asString);
var img = new Image();
img.src = encodedForDataUrl;
Run Code Online (Sandbox Code Playgroud)
我正在使用gzip.js来完成繁重的工作。您可以在此处查看所有这些操作,您可以在此处获取一些要加载到其中的 plist 。BoilingFoam.plist 可以工作,只需将其加载到“导入/导出”部分即可。
在上面的代码中我调用了两个方法,它们是:
_binaryStringToArray: function(binaryString) {
var data = [];
for (var i = 0; i < binaryString.length; ++i) {
data[i] = binaryString.charCodeAt(i);
}
return data;
},
_arrayToBinaryString: function(array) {
var str = '';
for (var i = 0; i < array.length; ++i) {
str += String.fromCharCode(array[i]);
}
return str;
},
Run Code Online (Sandbox Code Playgroud)
整个shebang都在这里