1

次のような方法を使用して、AJAX でキャンバス画像をサーバーにアップロードしています。

myCanvas.toBlob( function( blob ) {
    var fdata = new FormData( );
    fdata.append( 'myFile', blob );
    $.ajax( {
        url: 'http://myScript.foo',
        type: 'POST',
        data: fdata,
        processData: false,
        contentType: false
    } );
}, 'image/jpeg', 0.9 );

( https://stackoverflow.com/a/8244082/1180785に感謝します)

しかし、モジラによれば、

toBlobBlob[…]キャンバスに含まれる画像を表すオブジェクトを返します。このファイルは、ユーザー エージェントの裁量で、ディスクにキャッシュされるか、メモリに保存されます。

( https://developer.mozilla.org/en-US/docs/Web/API/HTMLCanvasElement )

私のプログラムにとって、画像が保持されないことは非常に重要です (制限としてではなく、プライバシー上の懸念として)。したがって、このキャッシュされた可能性のあるコピーが削除されるという保証があるかどうか、またいつ削除されるかを知る必要があります。また、削除取り消しプログラムがそれを見つける潜在的なリスクもあるため、データを上書きするか、別の方法で安全に削除できるかどうかを知りたい.

ローカルにキャッシュされたコピーを危険にさらすことなく同じ結果を得ることができれば、さらに良いでしょう。可能であれば、暗号化もオプションです。

私は最新のブラウザーのみに関心があり、getUserMedia具体的にサポートしているため、IE はありません (メモリ内のすべてを処理する古いブラウザー用の Flash フォールバックがあります)。

4

2 に答える 2

0

プライバシーとセキュリティが重要な場合は、オブジェクトdata-uriではなくキャンバスから を生成することを検討してください。Blob

ブロブはディスクに一時的に保存(キャッシュ)される場合とされない場合があるため、ファイルはセキュリティ状況の対象になります(つまり、言及したように削除を取り消す)。もちろん、メモリ ファイル/文字列はメモリ スキャンに使用できますが、これは転送のためにキャンバスから画像を取得するときに「安全」に近いものです。

*通常、 Adata-uriはメモリ内でのみ生成され、通常は base64 でエンコードされたイメージを含みます (イメージが非常に大きい場合、ディスクにページングされる危険性があります)。

*)実装に依存します。たとえば、利用可能なメモリ リソースが不足している場合、モバイル ブラウザは temp-to-file を使用する可能性が高くなりますが、この可能な動作は文書化されていません。

data-uri代わりに使用するには:

canvas.toDataURL();

必要に応じて画像の種類を指定できます (デフォルトは PNG)。

canvas.toDataURL('image/jpeg'); //optional second parameter is quality [0.0, 1.0]

もう 1 つのオプションは、ピクセルをキャンバスから直接抽出し、(型指定された) 配列に格納することです。その後、データをそのまま転送するか、圧縮ライブラリを使用して、データを送信する前に zip などに圧縮することができます。

ただし、このアプローチは最も効率的ではありません。

于 2013-08-22T18:34:00.430 に答える
0

おそらく、次のいずれかの場合にブロブが削除されます。

  1. それへの参照はありません(ガベージコレクション)
  2. タブ/ウィンドウが閉じている

そのコンテキストでは、「キャッシュ」は長期間にわたることを意味するのではなく、アクセスされるたびに再計算されるわけではありません。

キャンバスは動的に設計されているため、コンテンツを長期的にキャッシュすると、ストレージスペースが無駄になります。静的コンテンツの場合は、<img>を使用する必要があります。

ソースコードは見ていませんが、これは論理的な結論です。jQuery が blob の参照を停止した後 (要求が送信されたとき)、blob はガベージ コレクターによって取得され、破棄される必要があります。


安全な削除は非常に低レベルであり、ブラウザーは決して許可しません。これは基本的に、ハード ドライブ上の特定のアドレスに書き込むことで機能しますが、計算を誤ると、何千ものファイル (非常に断片化されたパーティション) が台無しになる可能性があります。ディスクに保存すると、コンピュータのフォレンジックによって復元できます。

于 2013-08-21T22:03:06.583 に答える