最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 科技 - 知识百科 - 正文

通过HTML5的getUserMedia实现拍照功能示例

来源:动视网 责编:小采 时间:2020-11-27 15:10:06
文档

通过HTML5的getUserMedia实现拍照功能示例

通过HTML5的getUserMedia实现拍照功能示例:1. 通过getUserMedia调用设备的摄像头(电脑、手机都可以,取决于浏览器对这个API的支持情况),并将资源放入video标签。2. 将video内的视频资源通过canvas的drawImage API放入canvas里,这个canvas是不显示的。3. 将canvas的内容转换成base
推荐度:
导读通过HTML5的getUserMedia实现拍照功能示例:1. 通过getUserMedia调用设备的摄像头(电脑、手机都可以,取决于浏览器对这个API的支持情况),并将资源放入video标签。2. 将video内的视频资源通过canvas的drawImage API放入canvas里,这个canvas是不显示的。3. 将canvas的内容转换成base


1. 通过getUserMedia调用设备的摄像头(电脑、手机都可以,取决于浏览器对这个API的支持情况),并将资源放入video标签。
2. 将video内的视频资源通过canvas的drawImage API放入canvas里,这个canvas是不显示的。
3. 将canvas的内容转换成base64编码的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函数做的事情就是保证你拍到的照片的大小和摄像头拍到的大小是一样的,否则会出现拍到的照片只有摄像头录到的一部分画面的情况。

文档

通过HTML5的getUserMedia实现拍照功能示例

通过HTML5的getUserMedia实现拍照功能示例:1. 通过getUserMedia调用设备的摄像头(电脑、手机都可以,取决于浏览器对这个API的支持情况),并将资源放入video标签。2. 将video内的视频资源通过canvas的drawImage API放入canvas里,这个canvas是不显示的。3. 将canvas的内容转换成base
推荐度:
标签: 拍照 实现 例子
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top