html5拍照上传 java_如何使用HTML5实现拍照上传应用
在HTML5規(guī)范的支持下,WebApp在手機(jī)上拍照已經(jīng)成為可能。在下面,我將講解Web App如何用手機(jī)進(jìn)行拍照,顯示在頁面上并上傳到服務(wù)器。
1、? 視頻流
HTML5 The Media Capture API提供了對(duì)攝像頭的可編程訪問,用戶可以直接用getUserMedia獲得攝像頭提供的視頻流。我們需要做的是添加一個(gè)HTML5的Video標(biāo)簽,并將從攝像頭獲得視頻作為這個(gè)標(biāo)簽的輸入來源(請(qǐng)注意目前僅Chrome和Opera支持getUserMedia。補(bǔ)充:請(qǐng)使用Opera支持HTML5的新版本,如果是Chrome,版本需為Chrome 18.0.1008+,并使用about:flags來開啟WebRTC,請(qǐng)看下圖)。
var video_element = document.getElementById('video');
if (navigator.getUserMedia) { // opera should use opera.getUserMedia now, chrome use webkitGetUserMedia
navigator.getUserMedia('video',success, error);
}
function success(stream) {
video_element.src =stream;
}
視頻流2、? 拍照
拍照功能,我們采用HTML5的Canvas實(shí)時(shí)捕獲Video標(biāo)簽的內(nèi)容,Video元素能作為Canvas圖像的輸入,這一點(diǎn)很棒。主要代碼如下:
var canvas =document.createElement('canvas');
var ctx = canvas.getContext('2d');
var cw = vw;
var ch = vh;
ctx.fillStyle = "#ffffff";
ctx.fillRect(0, 0, cw, ch);
ctx.drawImage(video_element, 0, 0, vvw,vvh, 0,0, vw,vh);
document.body.append(canvas);
3、? 圖片獲取
下面我們要從Canvas獲取圖片數(shù)據(jù),其核心思路是用canvas的toDataURL將Canvas的數(shù)據(jù)轉(zhuǎn)換為base64位編碼的PNG圖像,類似于“data:image/png;base64,xxxxx”的格式。
var imgData =canvas.toDataURL("image/png");
因?yàn)檎嬲龍D像數(shù)據(jù)是base64編碼逗號(hào)之后的部分,所以我們實(shí)際服務(wù)器處理的圖像數(shù)據(jù)應(yīng)該是這部分,我們可以用兩種辦法來獲取。
第一種:是在前端截取22位以后的字符串作為圖像數(shù)據(jù),例如:
var data = imgData.substr(22);
如果要在上傳前獲取圖片的大小,可以使用:
var length = atob(data).length;// atob decodes a string of data which has been encoded using base-64 encoding
第二種:是在后端獲取傳輸?shù)臄?shù)據(jù)后用后臺(tái)語言截取22位以后的字符串。例如PHP里:
$image = base64_decode( str_replace('data:image/jpeg;base64,', '',$data);
4、? 圖片上傳
在前端可以使用Ajax將上面獲得的圖片數(shù)據(jù)上傳到后臺(tái)腳本。例如使用jQuery時(shí):
$.post('upload.php',{ 'data' : data } );
在后臺(tái)我們用PHP腳本接收數(shù)據(jù)并存儲(chǔ)為圖片。
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ù)器上。
Canvas涂鴉功能
在HTML5的驅(qū)動(dòng)下,Web App與Native App之間是否還有不可逾越的鴻溝?我將會(huì)在3月23日百度開發(fā)者大會(huì)上現(xiàn)場(chǎng)來解答這個(gè)問題,敬請(qǐng)期待。
相關(guān)規(guī)范:
相關(guān)The Media Capture示例:
原創(chuàng)文章,轉(zhuǎn)載請(qǐng)標(biāo)明出處:蔣宇捷的專欄
總結(jié)
以上是生活随笔為你收集整理的html5拍照上传 java_如何使用HTML5实现拍照上传应用的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java jpopupmenu 无法显示
- 下一篇: java调用百度搜索_Java爬虫怎么调