標籤:des android style http io ar os 使用 sp
今天做手機網站,想實現手機掃描二維碼功能。首先實現在瀏覽器中調用手機網路攝影機,實現拍照功能並且把拍下的照片顯示在頁面並上傳到伺服器上,然後再在伺服器端進行分析。
首先實現在瀏覽器中調用網路攝影機,當然用現在火的不行的html5,html5中的<video>標籤,並將從網路攝影機獲得視頻作為這個標籤的輸入來源。實現拍照功能的html5代碼:
<article> <style scoped> video { transform: scaleX(-1); } p { text-align: center; } </style> <h1>Snapshot Kiosk</h1> <section id="splash"> <p id="errorMessage">Loading...</p> </section> <section id="app" hidden> <p><video id="monitor" autoplay></video> <canvas id="photo"></canvas> <p><input type=button value="📷" onclick="snapshot()"> </section> <script> navigator.getUserMedia({video:true}, gotStream, noStream); var video = document.getElementById(‘monitor‘); var canvas = document.getElementById(‘photo‘); function gotStream(stream) { video.src = URL.createObjectURL(stream); video.onerror = function () { stream.stop(); }; stream.onended = noStream; video.onloadedmetadata = function () { canvas.width = video.videoWidth; canvas.height = video.videoHeight; document.getElementById(‘splash‘).hidden = true; document.getElementById(‘app‘).hidden = false; }; } function noStream() { document.getElementById(‘errorMessage‘).textContent = ‘No camera available.‘; } function snapshot() { canvas.getContext(‘2d‘).drawImage(video, 0, 0); } </script></article>
經本人測試在android手機的opera瀏覽器瀏覽器下可以正常實現手機拍照功能。android手機下的google chrome瀏覽器還不行,內建的瀏覽器也測試沒有通過。iphone手機的safari瀏覽器也是不支援的。
想瞭解更多關於html5調用手機網路攝影機的內容可以點擊http://dev.w3.org/2011/webrtc/editor/getusermedia.html。
圖片的擷取:
下面我們要從Canvas擷取圖片資料,其核心思路是用canvas的toDataURL將Canvas的資料轉換為base64位編碼的PNG映像,類似於“data:image/png;base64,xxxxx”的格式。
Html代碼
var imgData =canvas.toDataURL("image/png");
因為真正映像資料是base64編碼逗號之後的部分,所以我們實際伺服器處理的映像資料應該是這部分,我們可以用兩種辦法來擷取。
第一種:是在前端截取22位以後的字串作為映像資料,例如:
Html代碼
var data = imgData.substr(22);
如果要在上傳前擷取圖片的大小,可以使用:
Html代碼
var length = atob(data).length;// atob decodes a string of data which has been encoded using base-64 encoding
第二種:是在後端擷取傳輸的資料後用後台語言截取22位以後的字串。例如PHP裡
php代碼:
$image = base64_decode( str_replace(‘data:image/jpeg;base64,‘, ‘‘,$data);
圖片上傳:
在前端可以使用Ajax將上面獲得的圖片資料上傳到後台指令碼。例如使用jQuery時:
js代碼
$.post(‘upload.php‘,{ ‘data‘ : data } );
在後台我們用PHP指令碼接收資料並儲存為圖片。
php代碼
function convert_data($data){
$image = base64_decode( str_replace(‘data:image/jpeg;base64,‘, ‘‘,$data);
save_to_file($image);
}
function save_to_file($image){
$fp = fopen($filename, ‘w‘);
fwrite($fp, $image); fclose($fp);
}
請注意,以上的解決方案不僅能用於Web App拍照上傳,並且你可以實現把Canvas的輸出轉換為圖片上傳的功能。這樣你可以使用Canvas為使用者提供圖片編輯,例如裁剪、上色、塗鴉的畫板功能,然後把使用者編輯完的圖片儲存到伺服器上。
html5調用手機網路攝影機,實現拍照上傳功能