0

アプリケーションで webgl を使用しており、オフスクリーン レンダー ターゲット (フレーム バッファー) に何かをレンダリングしてから readPixels を実行しています。ピクセル データを取得したら、ここで入手できる javascript jpeg エンコーダーを使用して jpeg に変換します。

Javascript JPEG エンコーダー

ローカル ファイル システムに書き込みたい生のバイナリ jpeg データを取得します。これが私が書くために使用しているコードです:

root.getFile(filename, {create: true}, function(fileEntry)
{
    fileEntry.createWriter(function(writer)
    {
        writer.onwriteend = function(e)
        {
            System.debug("Write done");
        };
        writer.onerror = function(e)
        {
            System.error(e);
        }
        var data = new Blob(jpegData, { type: "image/jpeg" });
        writer.write(data);
        jpegData = null;
        pixels = null;
        uoozo.core.write[filename] = false;
    });
},
function(e)
{
    System.error(e);
});

しかし、奇妙な結果が得られます。jpegData は、画像要素に入れると問題ありませんが、blob を作成すると、たとえば jpegData のサイズは 3200 バイトですが、作成される Blob は常に 4818 バイトであり、FileWriter も書き込み操作後に同じ位置を返します。作成された jpeg は明らかに間違っており、開きません。賢く(または愚かに)しようとせずに、FileWriterにひどいバイナリデータをファイルに書き込む方法がわかりません。

誰かがこれで私を助けてくれますか? ありがとうございました。

4

1 に答える 1

0

そのため、Uint8Array に変換した後でも、必要な結果が得られませんでした。dataURLToBlob メソッドを見た後、次のように配列オブジェクトを Blob コンストラクターに渡していることがわかりました。

var blob = new Blob(jpegData_ConvertTo_Uint8Array, "image/jpeg");

これは正しくありません。Blob を適切に動作させるには、次のような配列を渡す必要があるようです。

var blob = new Blob([jpegData_ConvertTo_Uint8Array], "image/jpeg");

これは完全に機能し、続いて FileWriter を呼び出して jpeg をファイルに書き込みます。書き込み (ブロブ) 関数。ありがとうダンダビス!

于 2013-06-12T21:28:29.607 に答える