【js调用摄像头拍照】navigator.mediaDevices.getUserMedia、canvas

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        .box {
   
            width: 400px;
            background: #ccc;
            border: 10px solid #ddd;
            margin: 0 auto;
        }
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
首先,在Vue组件中,需要引入`navigator`和`window.URL.createObjectURL`: ```javascript mounted() { navigator.getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia || navigator.mozGetUserMedia || navigator.msGetUserMedia; }, methods: { takePhoto() { let video = this.$refs.video; let canvas = this.$refs.canvas; let context = canvas.getContext('2d'); let width = video.videoWidth; let height = video.videoHeight; canvas.width = width; canvas.height = height; context.drawImage(video, 0, 0, width, height); let imgData = canvas.toDataURL('image/png'); this.imageData = imgData; this.showPreview = true; video.pause(); } } ``` 在组件的`mounted`生命周期中,我们先判断当前浏览器是否支持`getUserMedia`,然后在`takePhoto`方法中,先获取`<video>`元素和`<canvas>`元素,设置`canvas`的宽高为`video`的宽高,然后将`video`中的内容绘制到`canvas`上。最后将`canvas`中的内容转为Base64格式的图片,保存到`imageData`中,显示预览图,并暂停`video`的播放。 在模板中,我们需要声明`<video>`和`<canvas>`元素,并为`<video>`元素绑定`getUserMedia`: ```html <template> <div> <video ref="video" autoplay></video> <canvas ref="canvas"></canvas> <button @click="takePhoto">Take photo</button> <div v-if="showPreview"> <img :src="imageData" alt="preview"> </div> </div> </template> ``` 这里我们在`<video>`元素中添加了`autoplay`属性,以便在页面加载时自动播放视频。如果要支持移动端,还需要添加`playsinline`和`muted`属性。 最后,在组件的`created`生命周期中,我们调用`navigator.getUserMedia`: ```javascript created() { navigator.getUserMedia({video: true}, stream => { let video = this.$refs.video; video.srcObject = stream; video.play(); }, error => { console.log('getUserMedia error:', error); }); } ``` 这里我们调用`navigator.getUserMedia`获取摄像头的视频流,将其赋值给`<video>`元素的`srcObject`属性,然后播放视频。如果获取失败,我们就在控制台输出错误信息。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值