簡體   English   中英

使用JavaScript來膨脹blob?

[英]Using JavaScript to inflate a blob?

我正在使用websocket以blob格式發送Jpeg圖像。 我已經壓縮(gzipped)blob但我無法找到使用JavaScript解壓縮它的方法。 有誰知道怎么樣?

這是我用來讀取blob然后將其轉換為base64字符串的代碼:

var r = new FileReader();

r.onload = function(){
    draw(btoa(r.result));
};
r.readAsBinaryString(e.data);

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;

我正在使用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;
    },

整個shebang在這里

獲取byteArray,你可以使用pako解碼它: http//jsfiddle.net/9yH7M/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM