在Html5規范的支持下,WebApp在手機上拍照已經成為可能。在下面,我將講解Web App如何用手機進行拍照,顯示在頁面上並上傳到服務器。
1、 視頻流
Html5 The Media Capture API提供了對攝像頭的可編程訪問,用戶可以直接用getUserMedia獲得攝像頭提供的視頻流。我們需要做的是添加一個Html5的Video標簽,並將從攝像頭獲得視頻作為這個標簽的輸入來源(請注意目前僅Chrome和Opera支持getUserMedia)。
XML/Html Code復制內容到剪貼板
視頻流
2、 拍照
拍照功能,我們采用Html5的Canvas實時捕獲Video標簽的內容,Video元素能作為Canvas圖像的輸入,這一點很棒。主要代碼如下:
JavaScript Code復制內容到剪貼板
3、 圖片獲取
下面我們要從Canvas獲取圖片數據,其核心思路是用canvas的toDataURL將Canvas的數據轉換為base64位編碼的PNG圖像,類似於“data:image/png;base64,xxxxx”的格式。
JavaScript Code復制內容到剪貼板因為真正圖像數據是base64編碼逗號之後的部分,所以我們實際服務器處理的圖像數據應該是這部分,我們可以用兩種辦法來獲取。
第一種:是在前端截取22位以後的字符串作為圖像數據,例如:
JavaScript Code復制內容到剪貼板如果要在上傳前獲取圖片的大小,可以使用:
JavaScript Code復制內容到剪貼板
第二種:是在後端獲取傳輸的數據後用後台語言截取22位以後的字符串。例如PHP裡:
JavaScript Code復制內容到剪貼板4、 圖片上傳
在前端可以使用AJax將上面獲得的圖片數據上傳到後台腳本。例如使用jQuery時:
JavaScript Code復制內容到剪貼板在後台我們用PHP腳本接收數據並存儲為圖片。
JavaScript Code復制內容到剪貼板請注意,以上的解決方案不僅能用於Web App拍照上傳,並且你可以實現把Canvas的輸出轉換為圖片上傳的功能。這樣你可以使用Canvas為用戶提供圖片編輯,例如裁剪、上色、塗鴉的畫板功能,然後把用戶編輯完的圖片保存到服務器上。
Canvas塗鴉功能
在Html5的驅動下,Web App與Native App之間是否還有不可逾越的鴻溝?我將會在3月23日百度開發者大會上現場來解答這個問題,敬請期待。
相關規范:
The MediaCapture API:http://www.w3.org/TR/media-capture-api/
Canvas:http://dev.w3.org/Html5/2dcontext/