视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
通过HTML5的getUserMedia实现拍照功能示例
2020-11-27 15:10:06 责编:小采
文档


1. 通过getUserMedia调用设备的摄像头(电脑、手机都可以,取决于浏览器对这个API的支持情况),并将资源放入video标签。
2. 将video内的视频资源通过canvas的drawImage API放入canvas里,这个canvas是不显示的。
3. 将canvas的内容转换成base编码的webp格式的图像(如果浏览器不支持这个格式,会fallback到png格式)放入img里,于是你就能看到你拍的照片了。

不废话了,上代码:

HTML

<!doctype html>
<html>
<head>
 <title>html5 capture test</title>
 <link rel="stylesheet" href="style.css">
</head>
<body>
 <video autoplay></video>
 <img src="">
 <canvas style="display: none;"></canvas>
 <button id="capture">snapshot</button>


 <script src="index.js"></script>
</body>
</html>

JS

var video = document.querySelector('video');
var canvas = document.querySelector('canvas');
var ctx = canvas.getContext('2d');
var localMediaStream = null;

var snapshot = function () {
 if (localMediaStream) {
 ctx.drawImage(video, 0, 0);
 document.querySelector('img').src = canvas.toDataURL('image/webp');
 }
};

var sizeCanvas = function () {
 setTimeout(function () {
 canvas.width = video.videoWidth;
 canvas.height = video.videoHeight;
 img.width = video.videoWidth;
 img.height = video.videoHeight;
 }, 100);
};

var btnCapture = document.getElementById('capture');
btnCapture.addEventListener('click', snapshot, false);

navigator.webkitGetUserMedia(
 {video: true},
 function (stream) {
 video.src = window.URL.createObjectURL(stream);
 localMediaStream = stream;
 sizeCanvas();
 },
 function () {
 alert('your browser does not support getUserMedia');
 }
);

几个注意事项:

不同浏览器对getUserMedia的支持情况不同,需要加上前缀,比如webkitGetUserMedia、mozGetUserMedia、msGetUserMedia,如果你想屏蔽这一问题的话,可以这样做:

// cross platforms
var myGetUserMedia = navigator.getUserMedia || 
 navigator.webkitGetUserMedia ||
 navigator.mozGetUserMedia || 
 navigator.msGetUserMedia;

Chrome对file:///做了很多的,跨域就不说了,geolocation也不能在本地下使用,这个getUserMedia也是。

这个sizeCanvas函数做的事情就是保证你拍到的照片的大小和摄像头拍到的大小是一样的,否则会出现拍到的照片只有摄像头录到的一部分画面的情况。

下载本文
显示全文
专题