H5 在瀏覽器中打開攝像頭,拍照片,轉 Base64,再關閉攝像頭

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>

 

發佈了18 篇原創文章 · 獲贊 18 · 訪問量 11萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章