狠狠色丁香婷婷综合尤物/久久精品综合一区二区三区/中国有色金属学报/国产日韩欧美在线观看 - 国产一区二区三区四区五区tv

LOGO OA教程 ERP教程 模切知識(shí)交流 PMS教程 CRM教程 開發(fā)文檔 其他文檔  
 
網(wǎng)站管理員

html5調(diào)用手機(jī)攝像頭,實(shí)現(xiàn)拍照上傳功能

admin
2014年11月24日 22:46 本文熱度 6275

今天做手機(jī)網(wǎng)站,想實(shí)現(xiàn)手機(jī)掃描二維碼功能。首先實(shí)現(xiàn)在瀏覽器中調(diào)用手機(jī)攝像頭,實(shí)現(xiàn)拍照功能并且把拍下的照片顯示在頁(yè)面并上傳到服務(wù)器上,然后再在服務(wù)器端進(jìn)行分析。


首先實(shí)現(xiàn)在瀏覽器中調(diào)用攝像頭,當(dāng)然用現(xiàn)在火的不行的html5,html5中的<video>標(biāo)簽,并將從攝像頭獲得視頻作為這個(gè)標(biāo)簽的輸入來(lái)源。實(shí)現(xiàn)拍照功能的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>

經(jīng)本人測(cè)試在android手機(jī)的opera瀏覽器瀏覽器下可以正常實(shí)現(xiàn)手機(jī)拍照功能。android手機(jī)下的google chrome瀏覽器還不行,自帶的瀏覽器也測(cè)試沒(méi)有通過(guò)。iphone手機(jī)的safari瀏覽器也是不支持的。


想了解更多關(guān)于html5調(diào)用手機(jī)攝像頭的內(nèi)容可以點(diǎn)擊http://dev.w3.org/2011/webrtc/editor/getusermedia.html。


圖片的獲取


下面我們要從Canvas獲取圖片數(shù)據(jù),其核心思路是用canvas的toDataURL將Canvas的數(shù)據(jù)轉(zhuǎn)換為base64位編碼的PNG圖像,類似于“data:image/png;base64,xxxxx”的格式。
Html代碼


var imgData =canvas.toDataURL("image/png");


因?yàn)檎嬲龍D像數(shù)據(jù)是base64編碼逗號(hào)之后的部分,所以我們實(shí)際服務(wù)器處理的圖像數(shù)據(jù)應(yīng)該是這部分,我們可以用兩種辦法來(lái)獲取。


第一種:是在前端截取22位以后的字符串作為圖像數(shù)據(jù),例如:
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


第二種:是在后端獲取傳輸?shù)臄?shù)據(jù)后用后臺(tái)語(yǔ)言截取22位以后的字符串。例如PHP里
php代碼:


$image = base64_decode( str_replace('data:image/jpeg;base64,', '',$data);


圖片上傳:


在前端可以使用Ajax將上面獲得的圖片數(shù)據(jù)上傳到后臺(tái)腳本。例如使用jQuery時(shí):
js代碼


$.post('upload.php',{ 'data' : data } );


在后臺(tái)我們用PHP腳本接收數(shù)據(jù)并存儲(chǔ)為圖片。
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);


}


請(qǐng)注意,以上的解決方案不僅能用于Web App拍照上傳,并且你可以實(shí)現(xiàn)把Canvas的輸出轉(zhuǎn)換為圖片上傳的功能。這樣你可以使用Canvas為用戶提供圖片編輯,例如裁剪、上色、涂鴉的畫板功能,然后把用戶編輯完的圖片保存到服務(wù)器上。


該文章在 2014/11/24 22:46:00 編輯過(guò)
關(guān)鍵字查詢
相關(guān)文章
正在查詢...
點(diǎn)晴ERP是一款針對(duì)中小制造業(yè)的專業(yè)生產(chǎn)管理軟件系統(tǒng),系統(tǒng)成熟度和易用性得到了國(guó)內(nèi)大量中小企業(yè)的青睞。
點(diǎn)晴PMS碼頭管理系統(tǒng)主要針對(duì)港口碼頭集裝箱與散貨日常運(yùn)作、調(diào)度、堆場(chǎng)、車隊(duì)、財(cái)務(wù)費(fèi)用、相關(guān)報(bào)表等業(yè)務(wù)管理,結(jié)合碼頭的業(yè)務(wù)特點(diǎn),圍繞調(diào)度、堆場(chǎng)作業(yè)而開發(fā)的。集技術(shù)的先進(jìn)性、管理的有效性于一體,是物流碼頭及其他港口類企業(yè)的高效ERP管理信息系統(tǒng)。
點(diǎn)晴WMS倉(cāng)儲(chǔ)管理系統(tǒng)提供了貨物產(chǎn)品管理,銷售管理,采購(gòu)管理,倉(cāng)儲(chǔ)管理,倉(cāng)庫(kù)管理,保質(zhì)期管理,貨位管理,庫(kù)位管理,生產(chǎn)管理,WMS管理系統(tǒng),標(biāo)簽打印,條形碼,二維碼管理,批號(hào)管理軟件。
點(diǎn)晴免費(fèi)OA是一款軟件和通用服務(wù)都免費(fèi),不限功能、不限時(shí)間、不限用戶的免費(fèi)OA協(xié)同辦公管理系統(tǒng)。
Copyright 2010-2025 ClickSun All Rights Reserved