VUE调用摄像头PC

2023-05-16

页面效果

实现代码

<template>
  <div id="app">

    <router-view />
    <!--开启摄像头-->
    <Button type="primary" @click="callCamera" style="margin-right: 10px;">开启摄像头</Button>
    <!--关闭摄像头-->
    <Button type="primary" @click="closeCamera">关闭摄像头</Button>
    <!--canvas截取流-->
    <canvas ref="canvas" width="640" height="480"></canvas>
    <!--图片展示-->
    <video ref="video" width="640" height="480" autoplay></video>
    <!--确认-->
    <Button type="primary" @click="photograph">拍照</Button>

  </div>
</template>
<script>
export default {
  data() {
    return {

    }
  },
  methods: {
    // 调用摄像头
    callCamera() {
      // H5调用电脑摄像头API
      navigator.mediaDevices.getUserMedia({
        video: true
      }).then(success => {
        // 摄像头开启成功
        this.$refs['video'].srcObject = success
        // 实时拍照效果
        this.$refs['video'].play()
      }).catch(error => {
        console.error('摄像头开启失败,请检查摄像头是否可用!')
      })
    },
    // 拍照
    photograph() {
      let ctx = this.$refs['canvas'].getContext('2d')
      // 把当前视频帧内容渲染到canvas上
      ctx.drawImage(this.$refs['video'], 0, 0, 640, 480)
      // 转base64格式、图片格式转换、图片质量压缩---支持两种格式image/jpeg+image/png
      let imgBase64 = this.$refs['canvas'].toDataURL('image/jpeg', 0.7)

      /**------------到这里为止,就拿到了base64位置的地址,后面是下载功能----------*/

      // 由字节转换为KB 判断大小
      let str = imgBase64.replace('data:image/jpeg;base64,', '')
      let strLength = str.length
      let fileLength = parseInt(strLength - (strLength / 8) * 2)    // 图片尺寸  用于判断
      let size = (fileLength / 1024).toFixed(2)
      console.log(size)     // 上传拍照信息  调用接口上传图片 .........

      // 保存到本地
      let ADOM = document.createElement('a')
      ADOM.href = this.headImgSrc
      ADOM.download = new Date().getTime() + '.jpeg'
      ADOM.click()
    },
    // 关闭摄像头
    closeCamera() {
      if (!this.$refs['video'].srcObject) return
      let stream = this.$refs['video'].srcObject
      let tracks = stream.getTracks()
      tracks.forEach(track => {
        track.stop()
      })
      this.$refs['video'].srcObject = null
    },
  }
}
</script>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

VUE调用摄像头PC 的相关文章

  • Vue生命周期

    私人博客 许小墨 Blog 菜鸡博客直通车 系列文章完整版 xff0c 配图更多 xff0c CSDN博文图片需要手动上传 xff0c 因此文章配图较少 xff0c 看不懂的可以去菜鸡博客参考一下配图 xff01 系列文章目录 前端系列文章

随机推荐

  • 为什么需要串级PID控制(结合智能小车,四轴飞行器来解释)

    先说四轴飞行器 四轴飞行器中串级PID控制是由角度环与角速度环一起控制的 可以这么简单的理解 xff1a 角度环可以可以保证飞机按期望的角度飞行 xff0c 单环控制时 xff0c 具有很好的自稳性 但是打舵的时候跟随性就不够完美 可能会出
  • 搭建简单的gazebo仿真环境

    1 下载模型库 可以去网址 xff1a https github com osrf gazebo models下载一些通用的模型库 2 复制模型库 将下载好的模型复制放在gazebo默认文件夹下 xff0c 这个默认位置一般在gazebo的
  • 已有项目如何添加到gitee仓库

    一 在gitee上创建仓库 二 初始化本地git文件 输入git init 输入 git remote add origin XXX 输入命令 xff1a git pull origin master 命令 xff1a git add xf
  • Windows安装使用Docker,方便你的开发和部署(DockerDesktop篇)

    前言 首先声明 xff0c 此篇不是完全的Docker技术文章 xff0c 而是单纯的教你使用Docker xff0c 不包含Docker的一些命令 如何打包Docker镜像等等 为什么要用Docker xff1f 大家好 xff0c 我是
  • ROS多机器人-gazebo仿真-问题总结及解决方法

    近期进行多机器人编队控制仿真 xff08 gps camera laser xff09 xff0c 遇到些许问题 xff0c 总结如下 基于一个机器人URDF如何在gazebo中仿真显示多机器人 launch文件中使用group标签 lt
  • git使用命令行拉取代码更新到站点

    1 把服务器端的公钥添加到gitee或者阿里云效 xff1b 2 创建一个全新干净的站点目录 xff1b 3 进入后这个目录 xff0c 执行 git clone lt repository gt 在这里 xff0c 点 表示当前目录 4
  • 单片机寄存器的理解

    学习目标 xff1a 对寄存器的理解 学习内容 xff1a 本来在学DMA xff0c 突然看到江科大的b站视频 xff0c 在他的DMA视频中对寄存器进行了理解 xff0c 我觉得十分巧妙 xff0c 这是当时截的图 xff0c 中间竖着
  • python 类变量详解

    强烈建议先看我之前的面向对象基本了解 python中 xff0c 类变量又叫做类属性 然而类属性有分为3个不同的类型 类属性 xff0c 实例属性 xff0c 局部变量 class a 类属性 hobby 61 39 play sport
  • Python运行环境Ngrok内网穿透

    这次就教大家怎么在手机或机顶盒上运行Ngrok内网穿透 首先下载安卓上的Python运行环QPython apk 官网 http www qpython com 下载完后开始安装 xff0c 怎么安装安卓软件不用我怎么教了吧 复制pytho
  • 记一次PWN机(Vmware和Docker+VNC)的搭建

    基于Vmware搭建虚拟机 学长已经提供了镜像 xff0c 在Vmware界面打开那个镜像 xff0c 开机即可 Vmware和镜像下载地址 xff1a 链接 xff1a https pan quark cn s 057a23e631f5
  • vue.runtime.esm.js?2b0e:619 [Vue warn]: Invalid prop: type check failed for prop “index“. Expected S

    vue runtime esm js 2b0e 619 Vue warn Invalid prop type check failed for prop 34 index 34 Expected String with value 34 1
  • 解决vscode上边菜单栏不显示的问题

    由于我们不小心点击了哪个键 xff0c 导致上边的菜单栏不显示 两种解决方案 方法一 xff1a 点击下面的这个按钮 xff0c 会弹出一个弹框 点击一下菜单栏的可见性 xff0c 即可出来 方式二 xff1a 使用快捷键Ctrl 43 S
  • node+vue搜索和分页功能实现

    前端代码 lt template gt lt div class 61 34 main box 34 gt lt 卡片区 gt lt el card gt lt 搜索 gt lt el input placeholder 61 34 请输入
  • React面试题最全

    1 什么是虚拟DOM xff1f 虚拟DOM是真实DOM在内存中的表示 xff0c ul的表示形式保存在内存中 xff0c 并且与实际的DOM同步 xff0c 这是一个发生在渲染函数被调用和元素在屏幕上显示的步骤 xff0c 整个过程被称为
  • vue项目页面空白但不报错产生的原因分析

    vue项目中我们请求一个路由 xff0c 打开页面发现页面是空白的 xff0c 产生的主要原因有四种 xff1a 1 路由重复 如果配置了两个路由是重复的 xff0c 比如配置了两个 path xff0c 那么访问就会看到空白页面 xff0
  • react--电商商品列表使用

    目录 整体页面效果 项目技术点 拦截器的配置 主页面 添加商品 分页 xff0c 搜索 修改商品 删除商品 完整代码 整体页面效果 项目技术点 antd组件库 xff0c 64 ant design icons antd的图标库axios
  • 服务器端升级或者切换node版本

    1 查看版本 nvm list 2 选择你需要的版本 nvm use v18 15 0
  • lodash防抖节流

    应用场景 xff1a 当用户高频率的触发事件 xff0c 事件较短 xff0c 内部出现卡顿现象 解决方法 xff1a 防抖节流 防抖节流功作用 xff1a 主要目的是为了降低高频事件触发 xff0c 减少dom操作或请求次数 xff0c
  • 使用webpack(4版本)搭建vue2项目

    在学习webpack之前 xff0c 也从网上搜过一些用webpack搭建vue项目的博客 xff0c 但是在自己使用的时候会报各种的问题 xff0c 报错的根本原因其实就是版本的问题 xff0c 以下代码是经过解决了许多报错问题研究出来最
  • VUE调用摄像头PC

    页面效果 实现代码 lt template gt lt div id 61 34 app 34 gt lt router view gt lt 开启摄像头 gt lt Button type 61 34 primary 34 64 clic