更新:
2013/08/01: 解決了後面遇到的bug: 圖片被壓扁(IOS6); 圖片被旋轉;
整個源碼放在: https://github.com/kairyou/html5-make-thumb
新方案須要後面實現的, 就是下面的舊版本里的功能(水印/是否強制拉伸以適應目標尺寸等功能).html
w3ctech長沙站交流會, 裏面分享的PPT: http://www.slideshare.net/99leon/html5-create-thumbnail前端
以前有bug的版本放在分支old裏(不推薦使用), 請使用更新的方案~html5
2013/01/07:
11年作的公司的移動頁面, 上傳圖片時縮略圖是靠後端生成, 可是隨着如今的手機愈來愈牛X(攝像頭比數碼相機還厲害~), 圖片體積也愈來愈大.
一個幾M的圖, 也許咱們只是用來生成一個100*100的小圖, 上傳到後端再生成縮略圖就大大的浪費了, 並且提交表單的等待時間也非長久, 對用戶體驗也很差.
普通的web表單, 上傳圖片靠後端來生成縮略圖很日常, 但有了HTML5, 針對移動Web開發能夠考慮使用前端生成縮略圖了.jquery
寫了個生成縮略圖的jquery的插件, 主要參數:git
大致思路以下:
首先判斷是否支持fileReader(支持fileReader, canvas就不在話下了)
不支持的話: 不作任何操做, 默認的input type="file"上傳, 靠後端生成縮略圖.
支持的狀況: input change時, 判斷選擇的文件是圖片, 就建立一個隱藏的canvas, 並把圖片畫到canvas裏,
由於要生成縮略圖, 因此在canvas裏畫圖的時候, 控制剪切座標和被剪切的寬高就OK了.
另外能夠加上水印, 圖片水印或者文字水印加到canvas上面也是比較方便的.
最後 canvas.toDataURL 轉成base64, post到後端(先把input type="file"移除, 再生成個新的input type="hidden"儲存圖片數據), 後端接收後直接保存爲圖片就OK了.
主要用到: FileReader和canvas, 一個用來讀取本地圖片, 一個用來生成縮略圖.github
作移動網頁開發的同窗能夠考慮下.web
轉自:http://www.fantxi.com/blog/archives/create-thumbnail-images-html5/canvas