使用JS壓縮用戶上傳的圖片

手機用戶拍的照片通常會有2M以上,這對服務器帶寬產生較大壓力。

因此在某些應用下(對圖片要求不那麼高)我們可以在客戶端來壓縮圖片,然後再提交給服務器。

總體思路是:

1. 使用HTML5的FileReader接口來讀取用戶上傳的圖片

2. 使用canvas drawImage接口繪製到Canvas 2d中

3. 使用canvas toDataUrl接口把圖片轉成base64編碼字符串(這裏可以降低圖片質量)

4. 完成image src的替換後,表單提交時,就提交新的被壓縮過的圖像

這裏不重複貼代碼,直接看在線演示:http://wow.techbrood.com/fiddle/30625

該方案支持IE10+, FF, Chrome, Safari等現代瀏覽器。

有兩點需要注意:

1. 注意在FF下,類似這樣的處理方案必須確保canvas繪製和toDataUrl的處理是同步進行的,

也就是不能是異步處理的,否則可能會出現其他事件觸發頁面組合(Composite)而導致canvas緩存被清空的情況,那樣toDataUrl出來的會是空白字符串。

2. 需要等image加載完成再做draw和轉換的動作,否則一些瀏覽器會有問題。


by iefreer

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章