vue如何调用本地摄像头出错

发布于 2022-09-06 05:32:26 字数 4677 浏览 26 评论 0

代码:
页面布局:

 <div id='takePhoto' >
                <div id='support'></div>
                <div id='contentHolder'>
                    <video id='video' width='352' height='496' style='border:1px solid gray;float: left;' autoplay></video>
                    <div id='imageBox' class='imageBox1'>
                        <canvas id='canvas'></canvas>
                        <div class='thumbBox1'></div>
                    </div>
                    <div style="clear: both;width: 352px;text-align: center">
                        <el-button id='snap' class= 'my-button' @click="takePhoto">拍照</el-button>
                        <el-button id='snap2' style='display: none;' class='my-button' @click="retakePhoto">重新拍照</el-button>
                    </div>
                    <div id='cropped1' class='cropped1' style='display: none;'>

                    </div>
                </div>
            </div>

js代码:

 created() {
            this.getVideo();
        },
            methods: {
               
                getVideo() {
                    var video = $('#video');
                    var videoObj = { 'video': true };
                    var errBack = function(error) {
                        console.log('Video capture error: ' + error.message, error.code);
                    };
                    var stre;
                    var mediaStream;
                    //  支持浏览器  谷歌,火狐,360,欧朋
                    // navigator.getUserMedia这个写法在Opera中好像是navigator.getUserMedianow
                    if (navigator.getUserMedia) {
                        navigator.getUserMedia(videoObj, function(stream) {
                            video.src = stream;
                            stre = stream;
                            video.trigger('play');
                        }, errBack);
                    } else if (navigator.webkitGetUserMedia) {
                        navigator.webkitGetUserMedia(videoObj, function(stream) {
                            video.src = window.URL.createObjectURL(stream);
                            mediaStream = stream;
                            stre = stream;
                            video.trigger('play');
                        }, errBack);
                    } else if (navigator.mozGetUserMedia) {
                        navigator.mozGetUserMedia(videoObj, function(stream) {
                            video.src = window.URL.createObjectURL(stream);
                            mediaStream = stream;
                            stre = stream;
                            video.trigger('play');
                        }, errBack);
                    }
                },
                // 点击拍照
                takePhoto() {
                    var img_src;
                    $('#video').hide();
                    $('#snap').hide();
                    $('#snap2').show();
                    $('#imageBox').show();
                    $('#action').show();
                    $('#cropped1').show();
                    var canvans = $('#canvas');
                    var video = $('#video');
                    var context = canvans.get(0).getContext('2d');

                    canvans.width(219);
                    canvans.height(413);
                    context.drawImage(video, 0, 0);

                    // 获取浏览器页面的画布对象
                    // 以下开始编 数据
                    var imgData = document.getElementsByTagName('canvas')[0].toDataURL('image/jpg');
                    // 将图像转换为base64数据
                    var base64Data = imgData.split(',')[1];
                    $('#canvas').hide();
                    var options1 = {
                        thumbBox: '.thumbBox1',
                        spinner: '.spinner',
                        imgSrc: imgData
                    }
                },
                // 点击重新拍照
                retakePhoto() {
                    this.getVideo();
                    $('#video').show();
                    $('#snap').show();
                    $('#snap2').hide();
                    $('#imageBox').hide();
                    $('#action').hide();
                    $('#cropped1').hide();
                }
            }

第一次报错:
图片描述
加了[0]
修改后:
图片描述

问题:看不到摄像头获取的图像。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

剩余の解释 2022-09-13 05:32:26

和框架无关,属于浏览器的工作。MDN

落在眉间の轻吻 2022-09-13 05:32:26

麻烦帮我看看我的报错什么问题 谢谢

迟月 2022-09-13 05:32:26

你试下这个例子:
html:

<div>
    <video ref="video" width="320" height="320" autoplay></video>
    <input type="button" style="width:100px;height:35px;" value="拍 照" @click="takePhoto"/>
</di>
    <canvas style="" ref="canvas" width="320" height="320"></canvas>
</div>

主要的js:

getVideo(){
   this.$nextTick(() => {           
                    
        var video = this.$refs.video;  //这个对应的是ref属性
        var videoObj = { "video": true };

        navigator.mediaDevices.getUserMedia(videoObj)
        .then(function(mediaStream) { 
            video.srcObject = mediaStream;
            video.play();
            })
        .catch(function(error) {
            console.log(error);
        })

   })
},
takePhoto(){
    this.$nextTick(() => { 
        this.context = this.$refs.canvas.getContext("2d")
        this.context.drawImage(this.$refs.video, 0, 0, 330, 250);
    })
}

如果需要click事件还是用@click形式吧。。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文