html 通過input video canvas 打開攝像頭 定制相機


在機緣巧合之下,了解到用HTML5和javascript調用攝像頭來實現拍照功能,今天就把大致原理寫下來。頁面布局很簡單,就是一個input標簽,兩個HTML5元素video、canvas和一個button按鈕。video元素帶有開啟視頻功能的函數,canvas元素帶有捕捉圖像功能的函數。

源代碼如下:

<!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>
 

介紹一下代碼中涉及到的兩個函數:

getMedia()函數:

constraints 參數是一個包含了video和audio兩個成員的MediaStreamConstraints對象,用於說明請求的媒體類型。必須至少一個類型或者兩個同時可以被指定。如果瀏覽器無法找到指定的媒體類型或者無法滿足相對應的參數要求,那么返回的Promise對象就會處於rejected[失敗]狀態,NotFoundError作為rejected[失敗]回調的參數。

有關於constraints對象的具體細節請點擊下方鏈接:

有關於constraints對象的具體細節介紹

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()方法
---------------------
作者:lishundi
來源:CSDN
原文:https://blog.csdn.net/lishundi/article/details/80604747
版權聲明:本文為博主原創文章,轉載請附上博文鏈接!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM