在做頭像上傳的時候,瀏覽器默認是無法取得本地圖片的,當然 HTML5 是可以的。
不過IE6-8怎么破?
目前比較通用的方案都是 flash 解決。
說道頭像預覽和裁剪,我最熟悉的就是 Discuz 的那個了,非常方便好用。
不僅可以選擇本地圖片,還能直接調用攝像頭拍攝,當然前提是你必須有個攝像頭。
於是我心血來潮的想把他剝離出來給項目用,於是有就了此文。。
我就不說怎么提取怎么調用,就簡單的談談他是怎么處理圖片好了,反正不是我們想的那樣,和我想的出入非常大。
這個插件呢,差不多分為四步處理:
1. 前台用js生成IE或現代瀏覽器用的flash嵌入標簽
2. 通過 flash 選擇圖片上傳給服務器 (沒錯, 這貨是直接上傳原圖的)
3. 讀取剛剛上傳到服務器的圖片,進行裁剪處理。
4. 把裁剪好的圖片分別縮放為 200x200, 120x120, 48x48 的圖,當然不文件,而是編碼數據提交給后台,
沒仔細看是什么編碼,反正后台解碼后fopen寫入文件的。
當然果然是攝像頭拍攝的話,2, 3步變為拍攝,1, 4一樣的。
好了,看過步驟,相信大家和我一樣灰常桑心,,說好的預覽,腫么變成上傳后預覽了,那要你何用?
難道僅僅為了裁剪而調用這么變態的插件么?這不是我的作風。(當然目前用他,因為項目時間有限,之后再重寫)
下面我們來談下 js 實現思路吧。
既然沒辦法預覽(HTML5除外),那么我們就先上傳,然后"裁剪"即可。
FormData或iframe做偽ajax上傳,得到文件路徑后,就可以預覽,然后"裁剪"即可。
當然不是真正的裁剪,也是偽裁剪,只是記錄坐標后提交給后台,讓后台為我們真正的裁剪。
因為圖片第一步上傳了,第二步我們只要ajax提交裁剪區域坐標即可,不需要重新上傳圖片。
相信聰明的你一定想到怎么實現了。
當然你也可以參考 碳酸次鈷 寫的《在線圖片裁剪(兼容IE8)》。
其實如果不是濾鏡的兼容性和安全問題就可全兼容,
當然我的思路就是直接上傳后裁剪,所以是真正的全兼容。