调用电脑摄像头拍照及下载

代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>将canvas获取的图片下载到本地</title>
</head>
<body>
<style>
    video, canvas {
        outline: 1px solid red;
    }
</style>
<p>这里通过拍照来获取你的图像,然后将其下载到本地。如果开启摄像头时有提示,请点击允许</p>
<button οnclick="startVideo()">点击启用摄像头</button>
<button οnclick="Shoot()">点击拍照</button>
<button οnclick="download()">点击下载</button>
<br>
<p>左侧是摄像头当前拍摄中区域,右侧图片是已拍摄的图像,下载的内容是右边已拍摄的图像</p>
<video width="640" height="480" autoplay></video>
<canvas width="640" height="480"></canvas>

<script>
    var video = document.querySelector('video');
    var canvas = document.querySelector('canvas');

    //启用摄像头,开始拍摄
    function startVideo() {
        // video捕获摄像头画面
        navigator.mediaDevices.getUserMedia({
            video: true,
        }).then(success).catch(error)

        function success(stream) {
            video.src = window.webkitURL.createObjectURL(stream);
            video.play();
        }

        function error(err) {
            alert('video error: ' + err)
        }
    }


    function Shoot() {
        var context = canvas.getContext('2d');
        //把当前视频帧内容渲染到画布上
        context.drawImage(self.video, 0, 0, 640, 480);
    }

    //将图片下载到本地
    function download() {
        var dom = document.createElement("a");
        dom.href = this.canvas.toDataURL("image/png");
        dom.download = new Date().getTime() + ".png";
        dom.click();
    }
</script>

</body>
</html>

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
以下是一个使用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`方法的现代浏览器上运行。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值