5

Websocket を使用して Jpeg 画像を blob 形式で送信しています。ブロブを圧縮 (gzip) しましたが、JavaScript を使用して解凍する方法が見つかりません。誰も方法を知っていますか?

これは、blob を読み取り、それを base64 文字列に変換するために使用しているコードです。

var r = new FileReader();

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

このdraw()関数は基本的に、base64 文字列を使用して画像を HTML5 キャンバスに描画します。

このライブラリは文字列を膨張させることがわかりましたが、ブロブはサポートしていません。(私が知る限り/テストした限り)誰かが方法を知っているなら、私はそれを感謝します. :) ありがとう!

4

2 に答える 2

3

パーティクルシステムエディタでも非常によく似た処理を行いました。Cocos2Dplistファイルの読み取りをサポートしています。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は機能します。「インポート/エクスポート」セクションにロードするだけです。

上記のコードでは、2つのメソッドを呼び出します。ここでは、次のようになります。

 _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;
    },

シバン全体がここにあります

于 2013-01-13T22:45:41.557 に答える
1

byteArray を取得すると、次を使用してデコードできますpako: http://jsfiddle.net/9yH7M/

于 2014-03-26T23:55:40.250 に答える