2013-12-13 94 views
6

如果我通過網絡傳輸簡單的圖像,速度很快。當我嘗試使用toDataURL傳輸在畫布中創建的相同圖像時,速度會更慢。爲什麼?爲什麼toDataURL太慢?

+1

沒有足夠的信息。 – akonsu

+0

優化?普通圖像與生成的圖像相比有多重? – Boaz

+0

define'transfer' – charlietfl

回答

8

你沒有給予太多的背景所以一般:

當您使用toDataURL()瀏覽器將圖像編碼爲一個小的頭一個基本64個流。與非編碼尺寸相比,base-64尺寸總是會增加33%。

如果您本地傳輸JPEG編碼文件,它的尺寸通常比圖像的PNG版本要小。如果您忘記指定toDataURL的圖片類型,瀏覽器將始終默認爲PNG。

在這種情況下,指定JPEG這樣:

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

跟進問題。就性能而言,保存dataUri以說明localstorage是否存在任何缺點? – JohnAndrews

+1

@JohnAndrews不是爲了表現(開銷仍然在那裏),但由於localSotrage只接受字符串,所以需要data-uri。但是存儲空間*很容易成爲問題。對於這個恕我直言,IndexedDB是更好的選擇,它可以存儲Blob。 – K3N

+0

啊,就是這樣,我認爲它會默認輸入圖像,改變爲JPEG讓事情變得更快,謝謝兄弟!期待Chrome實現'canvas.toBlob',以便它可以更快速和無阻塞 –