H5 在瀏覽器中打開攝像頭,拍照片,轉 Base64,再關閉攝像頭:
直接上代碼:
<!doctype html>
<html lang="en">
<head>
<title>GET VIDEO</title>
<meta charset="utf-8">
</head>
<body>
<input type="button" title="開啓攝像頭" value="開啓攝像頭" οnclick="getMedia()" />
<input type="button" title="開啓攝像頭" value="關閉攝像頭" οnclick="closeMedia()" />
<button id="snap" οnclick="takePhoto()">拍照</button>
<button id="snap" οnclick="toBase64()">上傳</button>
<video id="video" width="500px" height="500px" autoplay="autoplay">您的瀏覽器不支持 video 標籤</video>
<canvas id="canvas" width="500px" height="500px"></canvas>
<script>
let _this=this;
//獲得video攝像頭區域
let video = document.getElementById("video");
function getMedia() {
let constraints = {
video: {width: 500, height: 500},
audio: false
};
/*
這裏介紹新的方法:H5新媒體接口 navigator.mediaDevices.getUserMedia()
這個方法會提示用戶是否允許媒體輸入,(媒體輸入主要包括相機,視頻採集設備,屏幕共享服務,麥克風,A/D轉換器等)
返回的是一個Promise對象。
如果用戶同意使用權限,則會將 MediaStream 對象作爲resolve()的參數傳給then()
如果用戶拒絕使用權限,或者請求的媒體資源不可用,則會將 PermissionDeniedError 作爲 reject()的參數傳給catch()
*/
let promise = navigator.mediaDevices.getUserMedia(constraints);
promise.then(function (MediaStream) {
_this.MediaStreamTrack = typeof MediaStream.stop === 'function'?MediaStream:MediaStream.getTracks()[0];
video.srcObject = MediaStream;
video.play();
}).catch(function (PermissionDeniedError) {
console.log(PermissionDeniedError);
})
}
function takePhoto() {
//獲得Canvas對象
let canvas = document.getElementById("canvas");
let ctx = canvas.getContext('2d');
ctx.drawImage(video, 0, 0, 500, 500);
}
function closeMedia() {
this.MediaStreamTrack && this.MediaStreamTrack.stop();
}
function toBase64() {
//獲得Canvas對象
let canvas = document.getElementById("canvas");
//從畫布上獲取照片數據
var imgData = canvas.toDataURL();
//將圖片轉換爲Base64
var base64Data = imgData.substr(22);
console.log("base64Data:"+base64Data);
}
</script>
</body>
</html>