html5調用手機網路攝影機,實現拍照上傳功能

來源:互聯網
上載者:User

標籤: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="&#x1F4F7;" 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調用手機網路攝影機,實現拍照上傳功能

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.