js实现浏览器调用电脑的摄像头拍照

 1 <!DOCTYPE html>
 2 <html lang="en">
 3 
 4 <head>
 5   <style>
 6     * {
 7       margin: 0;
 8       padding: 0;
 9     }
10   </style>
11   <meta charset="UTF-8">
12   <meta name="viewport" content="width=device-width, initial-scale=1.0">
13   <meta http-equiv="X-UA-Compatible" content="ie=edge">
14   <title>摄像头拍照</title>
15 </head>
16 
17 <body>  
18   <video id="video" width="480" height="320" controls>
19   </video>
20   <div>
21     <button id="capture">拍照</button>
22   </div>
23   <canvas id="canvas" width="480" height="320"></canvas>
24   <script>
25     //访问用户媒体设备的兼容方法
26     function getUserMedia(constraints, success, error) {
27       if (navigator.mediaDevices.getUserMedia) {
28         //最新的标准API
29         navigator.mediaDevices.getUserMedia(constraints).then(success).catch(error);
30       } else if (navigator.webkitGetUserMedia) {
31         //webkit核心浏览器
32         navigator.webkitGetUserMedia(constraints, success, error)
33       } else if (navigator.mozGetUserMedia) {
34         //firfox浏览器
35         navigator.mozGetUserMedia(constraints, success, error);
36       } else if (navigator.getUserMedia) {
37         //旧版API
38         navigator.getUserMedia(constraints, success, error);
39       }
40     }
41 
42     let video = document.getElementById('video');
43     let canvas = document.getElementById('canvas');
44     let context = canvas.getContext('2d');
45 
46     function success(stream) {
47       //兼容webkit核心浏览器
48       let CompatibleURL = window.URL || window.webkitURL;
49       //将视频流设置为video元素的源
50       console.log(stream);
51 
52       //video.src = CompatibleURL.createObjectURL(stream);
53       video.srcObject = stream;
54       video.play();
55     }
56 
57     function error(error) {
58       console.log(`访问用户媒体设备失败${error.name}, ${error.message}`);
59     }
60 
61     if (navigator.mediaDevices.getUserMedia || navigator.getUserMedia || navigator.webkitGetUserMedia || navigator.mozGetUserMedia) {
62       //调用用户媒体设备, 访问摄像头
63       getUserMedia({
64         video: {
65           width: 480,
66           height: 320
67         }
68       }, success, error);
69     } else {
70       alert('不支持访问用户媒体');
71     }
72 
73     document.getElementById('capture').addEventListener('click', function () {
74       context.drawImage(video, 0, 0, 480, 320);
75     })
76   </script>
77 </body>
78 
79 </html>

打开浏览器,点击允许就可以使用摄像头啦!!

-----觉得有用来个关注呗  比心心♥♥♥♥♥♥♥♥♥♥♥♥-----

转载于:https://www.cnblogs.com/zk12138/p/10608666.html

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个使用Ext JS 6调用电脑摄像头拍照和保存录像的示例。 首先,需要使用HTML5中的`getUserMedia()`方法来访问摄像头并捕获视频流。然后,我们可以使用`canvas`元素来对捕获的视频流进行截图和保存。 以下是代码示例: ```javascript Ext.application({ name: 'MyApp', launch: function() { var videoEl; // Create video element to capture camera stream videoEl = document.createElement('video'); videoEl.setAttribute('autoplay', ''); videoEl.setAttribute('muted', ''); videoEl.setAttribute('playsinline', ''); // Get access to camera stream navigator.mediaDevices.getUserMedia({video: true}).then(function(stream) { // Attach camera stream to video element videoEl.srcObject = stream; }).catch(function(err) { alert('Error accessing camera stream: ' + err); }); Ext.create('Ext.window.Window', { title: 'Camera', width: 400, height: 400, layout: 'fit', items: [{ xtype: 'panel', id: 'cameraPanel', html: '<canvas id="cameraCanvas"></canvas>', listeners: { afterrender: function() { // Create canvas element to capture video frames var canvasEl = document.getElementById('cameraCanvas'); var ctx = canvasEl.getContext('2d'); // Capture video frames at specified interval var intervalId = setInterval(function() { ctx.drawImage(videoEl, 0, 0, canvasEl.width, canvasEl.height); }, 100); // Add toolbar with camera controls Ext.getCmp('cameraPanel').addDocked({ xtype: 'toolbar', dock: 'bottom', items: [{ text: 'Take Picture', handler: function() { // Take snapshot of current video frame var dataUrl = canvasEl.toDataURL('image/png'); window.open(dataUrl); } },{ text: 'Record Video', handler: function() { // Start recording video var chunks = []; var mediaRecorder = new MediaRecorder(stream, {mimeType: 'video/webm'}); mediaRecorder.ondataavailable = function(e) { if ( e.data.size > 0 ) { chunks.push(e.data); } }; mediaRecorder.onstop = function() { // Merge captured video chunks into a single Blob var videoBlob = new Blob(chunks, { type: 'video/webm' }); var videoUrl = URL.createObjectURL(videoBlob); window.open(videoUrl); }; mediaRecorder.start(); setTimeout(function() { // Stop recording video after specified duration mediaRecorder.stop(); }, 5000); // 5 seconds } }] }); } } }] }).show(); } }); ``` 这段代码中,我们创建了一个`canvas`元素来捕获视频流。然后,我们向该`canvas`上绘制摄像头捕获的视频帧。我们还添加了一个工具栏,其中包括“拍照”和“录像”按钮来保存捕获的内容。 拍照按钮将当前视频帧保存为PNG图像,并在新的窗口中打开该图像。录像按钮将在5秒钟的时间内记录捕获的视频流,并在停止录制后将录制的视频合并为单个WebM文件。然后,我们将该文件的URL传递给新窗口以播放录制的视频。 请注意,该示例仅在支持`getUserMedia`方法的现代浏览器上运行。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值