国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

PC端調(diào)用攝像頭拍照(vue)以及解決getUserMedia is not implemented in this browser

這篇具有很好參考價(jià)值的文章主要介紹了PC端調(diào)用攝像頭拍照(vue)以及解決getUserMedia is not implemented in this browser。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

下面這段代碼是在html文件中執(zhí)行調(diào)用攝像頭,然后進(jìn)行拍照的功能,一切都是按照里面的步驟去走的,功能也確實(shí)可以實(shí)現(xiàn),后面的代碼就是 vue 實(shí)現(xiàn)這個(gè)功能的邏輯代碼(如果你還直接使用,你就會(huì)發(fā)現(xiàn)一個(gè)坑爹的問(wèn)題,請(qǐng)繼續(xù)看下去)

html文件內(nèi)容

<!doctype html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <title>拍照2</title>
</head>

<body>
<button id="button_take">拍照</button><br />
<div style="float: left;width:50%"><video id="v"></video></div>
<canvas id="canvas" style="display:none;"></canvas><br />
<img src="http://placehold.it/640&text=Your%20image%20here%20..." id="photo" alt="photo" style="float: left;">
</body>

<script>
    !(function () {
        // 老的瀏覽器可能根本沒(méi)有實(shí)現(xiàn) mediaDevices,所以我們可以先設(shè)置一個(gè)空的對(duì)象
        if (navigator.mediaDevices === undefined) {
            navigator.mediaDevices = {};
        }
        if (navigator.mediaDevices.getUserMedia === undefined) {
            navigator.mediaDevices.getUserMedia = function (constraints) {
                // 首先,如果有g(shù)etUserMedia的話,就獲得它
                var getUserMedia = navigator.webkitGetUserMedia || navigator.mozGetUserMedia || navigator.msGetUserMedia;

                // 一些瀏覽器根本沒(méi)實(shí)現(xiàn)它 - 那么就返回一個(gè)error到promise的reject來(lái)保持一個(gè)統(tǒng)一的接口
                if (!getUserMedia) {
                    return Promise.reject(new Error('getUserMedia is not implemented in this browser'));
                }

                // 否則,為老的navigator.getUserMedia方法包裹一個(gè)Promise
                return new Promise(function (resolve, reject) {
                    getUserMedia.call(navigator, constraints, resolve, reject);
                });
            }
        }
        const constraints = {
            video: true,
            audio: false
        };
        let videoPlaying = false;
        let v = document.getElementById('v');
        let promise = navigator.mediaDevices.getUserMedia(constraints);
        promise.then(stream => {
            // 舊的瀏覽器可能沒(méi)有srcObject
            if ("srcObject" in v) {
                v.srcObject = stream;
            } else {
                // 防止再新的瀏覽器里使用它,應(yīng)為它已經(jīng)不再支持了
                v.src = window.URL.createObjectURL(stream);
            }
            v.onloadedmetadata = function (e) {
                v.play();
                videoPlaying = true;
            };
        }).catch(err => {
            console.error(err.name + ": " + err.message);
        });
        document.getElementById('button_take').addEventListener('click', function () {
            if (videoPlaying) {
                let canvas = document.getElementById('canvas');
                canvas.width = v.videoWidth;
                canvas.height = v.videoHeight;
                canvas.getContext('2d').drawImage(v, 0, 0);
                let data = canvas.toDataURL('image/webp');
                document.getElementById('photo').setAttribute('src', data);
                //   canvas.getContext("2d").drawImage(Img,0,0,width,height); //將圖片繪制到canvas中
            }
        }, false);
    })();
</script>
</html>

vue項(xiàng)目中使用(組件),你會(huì)發(fā)現(xiàn)無(wú)法調(diào)起攝像頭,提示getUserMedia is not implemented in this browser,那是谷歌的安全策略,下面附帶解決辦法

<template>
    <div class="flc">
        <div class="video-Box">
            <div>
                <video id="videoCamera" width="250" height="250" autoplay style="border-radius:180px;box-shadow: darkgrey 0 0  30px 5px ;"></video>
            </div>
            <canvas style="display:none; " id="canvasCamera" width="250" height="250"></canvas>
        </div>
        <div class="img_bg_camera" v-if="imgSrc">
            <p style="color: #000000;">圖片顯示</p>
            <img :src="imgSrc" alt="" class="tx_img" style="border-radius:360px;box-shadow: darkgrey 0 0  30px 5px ;" v-if="imgif">
        </div>
        <div class="bommen" style="margin-top: 50px;">
           <el-button type="success" @click="getCompetence()">打開(kāi)攝像頭</el-button>
           <el-button type="success" @click="closeCarama()">關(guān)閉攝像頭</el-button>
            <el-button type="success" @click="setImage()">拍照</el-button>
           <el-button type="primary" @click="uploadImage()">提交</el-button>
            <el-button type="primary" @click="save">保存</el-button>
        </div>
    </div>
</template>

<script>
import { Message  } from 'element-ui'
export default {
    data() {
        return {
            imgif: false,
            videoWidth: 250,
            videoHeight: 250,
            imgSrc: '', //圖片src
            canvasCamera: null,
            contextCamera: null,
            videoCamera: null,
        }
    },
    mounted() {
    },
    methods: {
        // 打開(kāi)攝像頭
        getCompetence() {
            this.canvasCamera = document.getElementById('canvasCamera')
            this.contextCamera = this.canvasCamera.getContext('2d')
            this.videoCamera = document.getElementById('videoCamera')
            var _this = this
            // 舊版本瀏覽器可能根本不支持mediaDevices,我們首先設(shè)置一個(gè)空對(duì)象
            if (navigator.mediaDevices === undefined) {
                navigator.mediaDevices = {}
            }
            // 一些瀏覽器實(shí)現(xiàn)了部分mediaDevices,我們不能只分配一個(gè)對(duì)象
            // 使用getUserMedia,因?yàn)樗鼤?huì)覆蓋現(xiàn)有的屬性。
            // 這里,如果缺少getUserMedia屬性,就添加它。
            if (navigator.mediaDevices.getUserMedia === undefined) {
                navigator.mediaDevices.getUserMedia = function (constraints) {
                    // 首先獲取現(xiàn)存的getUserMedia(如果存在)
                    var getUserMedia = navigator.webkitGetUserMedia || navigator.mozGetUserMedia || navigator.getUserMedia
                    // 有些瀏覽器不支持,會(huì)返回錯(cuò)誤信息
                    // 保持接口一致
                    if (!getUserMedia) {
                        return Promise.reject(new Error('getUserMedia is not implemented in this browser'))
                    }
                    // 否則,使用Promise將調(diào)用包裝到舊的navigator.getUserMedia
                    return new Promise(function (resolve, reject) {
                        getUserMedia.call(navigator, constraints, resolve, reject)
                    })
                }
            }
            var constraints = {
                audio: false,
                video: {
                    width: this.videoWidth,
                    height: this.videoHeight,
                    transform: 'scaleX(-1)'
                }
            }
            navigator.mediaDevices.getUserMedia(constraints).then(function (stream) {
                // 新的瀏覽器使用srcObject。舊的瀏覽器可能沒(méi)有srcObject
                if ('srcObject' in _this.videoCamera) {
                    _this.videoCamera.srcObject = stream
                } else {
                    // 避免在新的瀏覽器中使用它,因?yàn)樗诒粭売谩?                    _this.videoCamera.src = window.URL.createObjectURL(stream)
                }
                _this.videoCamera.onloadedmetadata = function (e) {
                    _this.videoCamera.play()
                }
            }).catch(err => {
                console.log(err)
                Message({ message: '沒(méi)有開(kāi)啟攝像頭權(quán)限或?yàn)g覽器版本不兼容', type: 'warning' })
            })
        },
        closeCarama() {
            this.videoCamera.srcObject.getTracks()[0].stop()
        },
        //  繪制圖片(拍照功能)
        setImage() {
            this.imgif = true
            // 點(diǎn)擊,canvas畫(huà)圖
            this.contextCamera.drawImage(this.videoCamera, 0, 0, 250, 250)
            // 獲取圖片base64鏈接
            var image = this.canvasCamera.toDataURL('image/png')
            this.imgSrc = image
            console.log(this.imgSrc);
        },
        save () {
            if (this.imgSrc) return this.$emit('creamOver',this.imgSrc)
            Message({ message: '還未進(jìn)行拍攝', type: 'error' })
        },
        //上傳數(shù)據(jù)
        uploadImage() {
            var file = this.imgSrc
            console.log(file);
            //base64數(shù)據(jù)放formData里面
            var formData = new FormData(); //*
            formData.append("multipartFile", file); //*
            formData.append("password", this.ruleForm.password); //*
            formData.append("username", this.ruleForm.name); //*
            //自己配置axios。上傳
            
        },

    }
}
</script>

<style scoped lang="scss">
.flc {
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
}

.face {
  width: 400px;
  height: 450px;
  position: relative;
}

.face .face-img {
  width: 400px;
  height: 450px;
  position: absolute;
  left: 0px;
  top: 0px;
}

.face .face-content {
  width: 310px;
  height: 322px;
  position: absolute;
  top: 64px;
  left: 45px;
}

.face .face-content #video {
  object-fit: fill;
}

.step {
  text-align: center;
  margin-top: 30px;
}

.step .step-ul .step-li .step-title {
  font-size: 16px;
  color: #65dffe;
  padding-bottom: 10px;
}

.step .step-ul .step-li .step-title .step-titleimg {
  height: 26px;
  width: 26px;
  margin-left: 20px;
  cursor: pointer;
}

.step .step-ul .step-li .step-img {
  height: 150px;
  width: 150px;
  border: 3px solid #eecfa1;
  border-radius: 50%;
}

.step .step-ul .step-li .step-img img {
  height: 100%;
  width: auto;
}
</style>

getUserMedia is not implemented in this browser解決辦法

  1. 使用 https 協(xié)議
  2. 客戶端瀏覽器手動(dòng)指定域名安全

在谷歌輸入網(wǎng)址的地方輸入

chrome://flags/#unsafely-treat-insecure-origin-as-secure

在里面配置指定域名,然后選擇 select 為 enabled 然后重啟,就解決問(wèn)題啦文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-544680.html

到了這里,關(guān)于PC端調(diào)用攝像頭拍照(vue)以及解決getUserMedia is not implemented in this browser的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • Unity | 如何調(diào)用攝像頭拍照

    Unity | 如何調(diào)用攝像頭拍照

    我只用了PC端,其他平臺(tái)我沒(méi)試過(guò)哈~ 1.常見(jiàn)的輸入內(nèi)容 常見(jiàn)的輸入內(nèi)容:聲音、圖片 (影像就是一連串圖片不停的放,所以攝像頭發(fā)給電腦的實(shí)際上是很多很多圖片) 常見(jiàn)的輸入設(shè)備:輸入聲音對(duì)應(yīng)的設(shè)備一般是麥克風(fēng),圖片對(duì)應(yīng)的設(shè)備一般設(shè)攝像頭。 2.unity獲取設(shè)備訪問(wèn)

    2023年04月09日
    瀏覽(29)
  • python調(diào)用攝像頭實(shí)現(xiàn)拍照功能

    python調(diào)用攝像頭實(shí)現(xiàn)拍照功能

    目錄 1.介紹 2.系統(tǒng)依賴 (1)OpenCV-Python庫(kù) (2)Tkinter庫(kù) (3)Pillow庫(kù) (4)Time庫(kù) 3.系統(tǒng)代碼 4.效果展示 5.注意事項(xiàng) ? ? ? ? 這是一個(gè)有趣的項(xiàng)目,通過(guò)Python程序調(diào)用系統(tǒng)的攝像頭,實(shí)現(xiàn)了拍照的功能. ????????我的主頁(yè)還有一些文章介紹了其他有趣的項(xiàng)目,可以動(dòng)手嘗試一下: 代碼寫(xiě)不完了

    2024年02月04日
    瀏覽(22)
  • 【QT】QT調(diào)用電腦攝像頭并拍照

    【QT】QT調(diào)用電腦攝像頭并拍照

    建議搭配視頻食用: 【【QT】QT調(diào)用電腦攝像頭并拍照】 https://www.bilibili.com/video/BV1pc411G7qy/?share_source=copy_webvd_source=c0d9dd4e64b88e4dbf93ac009c2010dc 一、在pro文件中添加‘multimedia multimediawidgets’ 二、在ui界面創(chuàng)建一個(gè)widget并改名為camera用于展示攝像頭內(nèi)容和pushbutton 用于拍照,并右鍵

    2024年02月12日
    瀏覽(23)
  • Python進(jìn)階,使用 opencv 調(diào)用攝像頭進(jìn)行拍照

    ? ? ? ? ?opencv 支持 Python 版本的模塊叫作 opencv-p hon ,可直接使用 pip install opencv-python 令進(jìn)行安裝,但常常會(huì)因?yàn)榫W(wǎng)絡(luò)等問(wèn)題導(dǎo)致失敗。推薦使用離線模式來(lái)安裝 opencv 模塊。 下載完安裝包后,使用如下命令進(jìn)行安裝: D: pip install opencv

    2024年02月11日
    瀏覽(27)
  • Unity3D:調(diào)用安卓攝像頭拍照

    操作步驟:創(chuàng)建腳步并掛載到Main Camera上 仍未解決的問(wèn)題:導(dǎo)入到安卓平臺(tái)測(cè)試時(shí),拍照按鈕不能隨著屏幕旋轉(zhuǎn)而變換位置; 拍照時(shí)會(huì)把拍照按鈕也截進(jìn)去。

    2024年02月06日
    瀏覽(20)
  • opencv在linux上調(diào)用usb攝像頭進(jìn)行拍照

    opencv在linux上調(diào)用usb攝像頭進(jìn)行拍照

    一般video1就是usb攝像頭

    2024年02月06日
    瀏覽(20)
  • uniapp開(kāi)發(fā)h5或小程序調(diào)用攝像頭拍照,錄屏

    uniapp開(kāi)發(fā)h5或小程序調(diào)用攝像頭拍照,錄屏

    uniapp開(kāi)發(fā)h5或小程序調(diào)用攝像頭拍照,錄屏 如圖 注意,小程序上線使用需要配置upload域名。

    2024年02月12日
    瀏覽(61)
  • H5 頁(yè)面通過(guò)navigator.mediaDevices.getUserMedia調(diào)用手機(jī)攝像頭拍照上傳

    H5 頁(yè)面通過(guò)navigator.mediaDevices.getUserMedia調(diào)用手機(jī)攝像頭拍照上傳

    需求: 某知名化妝品牌,要做個(gè)在線問(wèn)卷調(diào)查。需要試用著自拍上傳 注:使用navigator.mediaDevices.getUserMedia 需要使用https請(qǐng)求協(xié)議否者視為不安全,無(wú)法訪問(wèn),開(kāi)發(fā)階段需要將啟動(dòng)改為https 在package.json中 前端開(kāi)發(fā)環(huán)境啟動(dòng)項(xiàng)目將http協(xié)議改為https協(xié)議 ? ?授權(quán),默認(rèn)前置,切換

    2024年02月11日
    瀏覽(35)
  • 移動(dòng)端利用 input 標(biāo)簽調(diào)用手機(jī)攝像頭拍照,實(shí)現(xiàn)人臉驗(yàn)證的功能

    近期在做項(xiàng)目時(shí),有一個(gè)需求需要實(shí)現(xiàn)人臉識(shí)別功能,該功能的底層原理就是利用手機(jī)的拍照功能,獲取用戶的人臉圖片,然后調(diào)用公安部的圖像庫(kù)進(jìn)行逐一比對(duì)。實(shí)現(xiàn)這個(gè)功能只需要兩步,第一步就是獲取用戶人臉圖片;第二步就是將圖片傳給后端進(jìn)行人臉比對(duì)。由于現(xiàn)在

    2024年02月16日
    瀏覽(28)
  • JS PC端調(diào)用攝像頭錄視頻截圖上傳文件

    創(chuàng)建 Catcher 類 直接在HTML文件中調(diào)用

    2024年02月10日
    瀏覽(27)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包