2013-12-13 10 views
6

単純なイメージをネットワーク経由で転送すると高速です。 toDataURLを使用してキャンバス内に作成された同じイメージを転送しようとすると、描画がはるかに遅くなります。どうして?toDataURLが遅いのはなぜですか?

+1

ない十分な情報。 – akonsu

+0

最適化?生成された画像と比較して、通常の画像の重さはどれくらいですか? – Boaz

+0

は 'transfer'を定義します – charlietfl

答えて

8

あなたは、一般的にのであまりコンテキストを与えていない:あなたはtoDataURL()を使用する場合

ブラウザは小さなヘッダとベース-64ストリームとして画像をエンコードします。ベース64は、符号化されていないサイズと比較して、常にサイズを33%増加させます。

JPEGエンコードされたファイルをネイティブに転送する場合は、通常、イメージのPNGバージョンよりもサイズが小さくなります。 toDataURLの画像タイプを指定するのを忘れた場合、ブラウザは常にデフォルトでPNGになります。この場合

、JPEGをこのように指定します。

var quality = 0.7; 
var dataUri = canvas.toDataURL('image/jpeg', quality); 
+0

質問に続きます。パフォーマンス面でlocalstorageと言うことができるようにdataUriを保存する上で不利な点はありますか? – JohnAndrews

+1

@ JohnAndrewsはパフォーマンスのためではありません(オーバーヘッドはまだそこにあります)が、localSotrageは文字列を取るだけなのでdata-uriが必要になります。しかし、ストレージスペース*は簡単に問題になります。 IndexedDBはこのIMHOのより良い選択肢であり、Blobを格納することができます。 – K3N

+0

ああ、私はそれが入力画像にデフォルトになると思った。 Chromeが 'canvas.toBlob'を実装することを楽しみにしていますので、さらに高速で非ブロック化することができます –

関連する問題