在機緣巧合之下,瞭解到用HTML5和javascript調用攝像頭來實現拍照功能,今天就把大體原理寫下來。頁面佈局很簡單,就是一個input標籤,兩個HTML5元素video、canvas和一個button按鈕。video元素帶有開啓視頻功能的函數,canvas元素帶有捕捉圖像功能的函數。javascript
源代碼以下:html
<!doctype html>
<html lang="en">
<head>
<title>GET VIDEO</title>
<meta charset="utf-8">
</head>
<body>
<input type="button" title="開啓攝像頭" value="開啓攝像頭" onclick="getMedia()" />
<video id="video" width="500px" height="500px" autoplay="autoplay"></video>
<canvas id="canvas" width="500px" height="500px"></canvas>
<button id="snap" onclick="takePhoto()">拍照</button>
<script>
function getMedia() {
let constraints = {
video: {width: 500, height: 500},
audio: true
};
//得到video攝像頭區域
let video = document.getElementById("video");
//這裏介紹新的方法,返回一個 Promise對象
// 這個Promise對象返回成功後的回調函數帶一個 MediaStream 對象做爲其參數
// then()是Promise對象裏的方法
// then()方法是異步執行,當then()前的方法執行完後再執行then()內部的程序
// 避免數據沒有獲取到
let promise = navigator.mediaDevices.getUserMedia(constraints);
promise.then(function (MediaStream) {
video.srcObject = MediaStream;
video.play();
});
}
function takePhoto() {
//得到Canvas對象
let video = document.getElementById("video");
let canvas = document.getElementById("canvas");
let ctx = canvas.getContext('2d');
ctx.drawImage(video, 0, 0, 500, 500);
}
</script>
</body>
</html>
java
介紹一下代碼中涉及到的兩個函數:canvas
getMedia()函數:promise
constraints 參數是一個包含了video和audio兩個成員的MediaStreamConstraints對象,用於說明請求的媒體類型。必須至少一個類型或者兩個同時能夠被指定。若是瀏覽器沒法找到指定的媒體類型或者沒法知足相對應的參數要求,那麼返回的Promise對象就會處於rejected[失敗]狀態,NotFoundError做爲rejected[失敗]回調的參數。瀏覽器
有關於constraints對象的具體細節請點擊下方連接:異步
有關於constraints對象的具體細節介紹ide
getMedia()函數中的其餘代碼解釋都在源代碼中,再也不贅述。函數
takePhoto()函數:佈局
let video =document.getElementById("video");
let canvas =document.getElementById("canvas");
解釋:Javascript使用id來獲取video和canvas元素。
let ctx =ty.getContext('2d');
解釋:建立context對象,getContext("2d") 對象是內建的 HTML5 對象,擁有多種繪製路徑、矩形、圓形、
字符以及添加圖像的方法。
下面對HTML5中的canvas drawImage()方法作一介紹:
context.drawImage(img,x,y,width,height);
img:規定要使用的圖像、畫布或視頻。
x: 在畫布上放置圖像的 x 座標位置。
y: 在畫布上放置圖像的 y 座標位置。
width: 要使用的圖像的寬度。
height: 要使用的圖像的高度。
以上就是基本的drawImage()方法的介紹,要想了解更多,請點擊下方連接。
更多內容介紹drawImage()方法--------------------- 原文連接:https://blog.csdn.net/lishundi/article/details/80604747