vue项目调用摄像头实现拍照功能

vue使用navigator.mediaDevices.getUserMedia调用相机功能 本文将介绍Vue中如何使用navigator.mediaDevices.getUserMedia调用相机功能,实现拍照使用实例,需要的朋友可以参考一下。注意:Vue 调用本地摄像头实现拍照功能,由于调用摄像头有使用权限,只能在本地运行,线上需用 https 域名才可以使用。 阅读详情
AI摘要

本文介绍了如何在Vue中集成小程序,利用MediaDevices.getUserMediaAPI调用手机摄像头进行拍照打卡的功能,并详细展示了代码实现过程,以及遇到的问题和解决策略,包括浏览器安全设置和兼容性问题的处理。,

目录

1.功能需求
2.API
3.完整代码
4.效果
5.遇到问题

1.功能需求

需求:下面需求图
本来应该使用小程序做,但是为了以后复用考虑,决定使用vue嵌入小程序中。
所以需求就是 调用手机摄像头 实现拍照打卡功能(电脑通用)
在这里插入图片描述

2.API

MediaDevices.getUserMedia()
该 API 会提示用户给予使用媒体输入的许可,媒体输入会产生一个MediaStream,里面包含了请求的媒体类型的轨道。此流可以包含一个视频轨道(来自硬件或者虚拟视频源,比如相机、视频采集设备和屏幕共享服务等等)、一个音频轨道(同样来自硬件或虚拟音频源,比如麦克风、A/D转换器等等),也可能是其它轨道类型。

它返回一个 Promise 对象,成功后会 resolve 回调一个 MediaStream 对象。若用户拒绝了使用权限,或者需要的媒体源不可用,Promise 会 reject 回调一个 PermissionDeniedError 或者 NotFoundError。

浏览器会弹出弹窗,询问是否允许使用摄像头

navigator.mediaDevices.getUserMedia(constraints)
.then(function(stream) {
  /* 用户允许使用摄像头 */
  /* 使用这个stream stream */
})
.catch(function(err) {
  /* 不允许使用摄像头 */
  /* 处理error */
});

constraints 参数介绍:
参数包含了 video 和 audio 两个成员的 MediaStreamConstraints 对象,用于说明请求的媒体类型。必须至少一个类型或者两个同时可以被指定。

具体使用参考文档:MediaDevices.getUserMedia()

3.完整代码

完整代码:

<template>
  <div class="publish">
    <video ref="video"></video>
    <canvas style="display: none" id="canvasCamera" ref="canvas"></canvas>
    <div v-if="imgSrc" class="img_bg_camera">
      <img :src="imgSrc" class="tx_img" />
    </div>
    <button @click="OpenCamera">打开摄像头</button>
    <button @click="CloseCamera">关闭摄像头</button>
    <button @click="setImage">拍照</button>
  </div>
</template>

<script>
export default {
  data() {
    return {
      mediaStreamTrack: {},
      video_stream: '', // 视频stream
      imgSrc: '', // 拍照图片
      canvas: null,
      context: null,
    };
  },
  mounted() {
    // 进入页面 自动调用摄像头
    this.getCamera();
  },
  methods: {
    // 调用打开摄像头功能
    getCamera() {
      // 获取 canvas 画布
      this.canvas = document.getElementById('canvasCamera');
      this.context = this.canvas.getContext('2d');
      // 旧版本浏览器可能根本不支持mediaDevices,我们首先设置一个空对象
      if (navigator.mediaDevices === undefined) {
        navigator.mediaDevices = {};
      }

      // 正常支持版本
      navigator.mediaDevices
           .getUserMedia({
           video: true,//默认前置
          //video: { facingMode: { exact: "environment" } },//后置
        })
          .then((stream) => {
          // 摄像头开启成功
          this.mediaStreamTrack = typeof stream.stop === 'function' ? stream : stream.getTracks()[0];
          this.video_stream = stream;
          this.$refs.video.srcObject = stream;
          this.$refs.video.play();
        })
        .catch(err => {
          console.log(err);
        });
    },
    // 拍照 绘制图片
    setImage() {
      console.log('拍照');
      // 点击canvas画图
      this.context.drawImage(
        this.$refs.video,
        0,
        0,
        200,
        100,
      );
      // 获取图片base64链接
      const image = this.canvas.toDataURL('image/png');
      this.imgSrc = image;
      this.$emit('refreshDataList', this.imgSrc);
    },
    // 打开摄像头
    OpenCamera() {
      console.log('打开摄像头');
      this.getCamera();
    },
    // 关闭摄像头
    CloseCamera() {
      console.log('关闭摄像头');
      this.$refs.video.srcObject.getTracks()[0].stop();
    },
  },
};
</script>

<style lang="scss" scoped>
video {
  width: 100%;
  height: 300px;
}
canvas {
  width: 100%;
  height: 300px;
}
button {
  width: 100px;
  height: 40px;
  position: relative;
  bottom: 0;
  left: 0;
  background-color: rgb(22, 204, 195);
}
.img_bg_camera {
  img {
    width: 300px;
    height: 200px;
  }
}
</style>

4.效果

只写了简单的摄像头功能点页面,方便大家看代码
有需要在这基础上修改样式就好了

5.遇到问题

1.navigator.mediaDevices 为 undefined
原因:navigator.mediaDevices在目前以下三种情况下可以获取到

1.地址为localhost:// 访问时
2.地址为https:// 时
3.为文件访问file:///

解决:因为我这里需要用手机访问,所以只能不能使用localhost,就采取修改chrome浏览器的安全策略
①.在chrome浏览器的地址栏中输入: chrome://flags/#unsafely-treat-insecure-origin-as-secure,将该 Disabled 切换成 enable 状态;
②.在输入框中填写需要开启的域名或地址(带上端口号),如果有多个,则以逗号分隔;
在这里插入图片描述
③.重启浏览器生效

其他解决方式:关于navigator.mediaDevices为undefined,获取不到媒体权限的问题

2.电脑可以启用摄像头,手机不行
1.因为我是使用微信二维码扫码预览,一直无法进入navigator.mediaDevices .getUserMedia()方法,无法打开摄像头,后面采用网址的方式预览,换了其他浏览器才可以

参考:
https://jsrun.net/5j6Kp

vue调取电脑摄像头实现拍照功能 实现效果图: 拍照前&拍照后(我电脑摄像头挡住的,所以图片是灰色) 1.点击拍照上传功能调取电脑摄像头权限 2.选择允许使用摄像头之后,页面摄像头区域开始显示画面 3.点击拍照按钮,右侧显示拍摄的图片。点击保存即可 完整代码: 我这里写的是一个组件,所以触发调取摄像头事件是从父组件传过来的。也可以直接写一个页面上。 <template> <div class="camera-box" style="width: 900px;"> <el-row :g 阅读详情

相关推荐

Vue调用原生相机拍照或手机相册上传图片

利用input标签的type='file'属性实现文件上传功能

YoungMan_09的博客 5003

vue调用本地摄像头

/ 否则,使用Promise将调用包装到旧的navigator.getUserMedia。// 获取媒体属性,旧版本浏览器可能不支持mediaDevices,我们首先设置一个空对象。// 首先获取现存的getUserMedia(如果存在)// 避免在新的浏览器中使用它,因为它正在被弃用。// 使用getUserMedia,因为它会覆盖现有的属性。// 这里,如果缺少getUserMedia属性,就添加它。// 有些浏览器不支持,会返回错误信息。// 获取图片base64链接。// canvas画图。

m0_61195004的博客 2418

Vue 使用 navigator.mediaDevices.getUserMedia 调用本地摄像头实现录像以及拍照功能

目录前言API`MediaDevices.getUserMedia()`拍照功能实例完整代码实现效果录像功能实例完整代码实现效果总结 前言 最近在做开源实例: Vue.js 实战系列之实现视频类WebApp的项目(仿抖音App)【感兴趣的小伙伴可以看一下】,其中就有一个功能是视频的拍摄发布(摄像头调用,视频录制等功能),所以特意整理一个Vue如何使用该API调用本地摄像头实现录像拍照功能。 本文主要包括前端调用本地摄像头实现拍照、录像的使用实例、应用技巧、基本知识点总结和一些需要注意的事项,在项目开发中具有

XH_jing的博客 3万+

vue实现调用手机拍照、录像功能

vue实现调用手机拍照、录像功能

m0_64590669的博客 8902

vue调用本地摄像头实现拍照

前言: vue调用本地摄像头实现拍照功能,由于调用摄像头有使用权限,只能在本地运行,线上需用https域名才可以使用。 实现效果: 1、摄像头效果: 2、拍照效果: 实现代码: <template> <div class="camera_outer"> <video id="videoCamera" :width="videoWidth" :height="videoHeight" autoplay></video> ...

YanAhao的博客 2565

VUE调用pc端摄像头

VUE项目调用pc端摄像头功能 代码如下: <template> <!-- 原生摄像头--> <div> <div class="box"> <video id="videoCamera" class="canvas" :width="videoWidth" :height="videoHeight" autoPlay></video> <canvas id="canvasC

DevelopmentW的博客 4484

vue摄像头调用拍照

//连接摄像头 connectCamera(){ navigator.getMedia = navigator.getUserMedia || navigator.webkitGetUserMedia || navigator.mozGetUserMeddia || navigator.msGetUserMedia; let that=this; if (navigator.medi...

shizhihua11的博客 9989

VUE实现调用摄像头和拍照功能

<template> <div class="camera_outer"> <video id="videoCamera" :width="videoWidth" :height="videoHeight" autoplay ></video> <canvas style="display: none" id="canvasCamera" ...

weixin_51646421的博客 1万+

Vue之调用PC端摄像头实时拍照

Vue之调用PC端摄像头实时拍照 大家好,我是小张,不知不觉我已经入职半个多月了,在这期间我学会了很多东西,也刷新了自己的认知,发现自己以前的知识储备量是如此浅显,入职后师傅给了个Vue项目,起初的我看得十分懵逼,师傅说让我尝试着,实现身份证阅读器读卡和调用摄像头拍照,当时我一听这要怎么实现啊,毫无头绪四处百度,最后东拼西凑也算一一实现了,今天我来分享下Vue调用本地摄像头拍照功能,新手上路望各位大佬多多指教。 由于我使用的是点击按钮打开模态框拍照所以在这里吧按钮和模态框代码都粘贴如下。 <!--

码农也是什农的博客 2637

vue2 pc端调用摄像头

vue2 pc端调用摄像头权限

Fairy4sqy的博客 1162

vue 调用pc端本地摄像头、麦克风实现拍照、录视频、录音 并上传到服务器指定树文件夹

这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入 欢迎使用Markdown编辑器 你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Mar

wwh_1117的博客 4932

Vue调用本地摄像头权限

使用电脑本地摄像头的权限关于如何调用本地摄像头的问题准备工具 (VS Code,Vue脚手架工具,Element UI)vue调用本地摄像头实现拍照功能,由于调用摄像头有使用权限,只能在本地运行,线上需用https域名才可以使用。实现效果1.摄像头效果直接上代码实现原理最后base64转文件,此处没用到没有写css样式,这里偷懒了,大家可以自己操作 关于如何调用本地摄像头的问题 不管是在vue项目里还是在其其它的项目当中,它都是window的对象 准备工具 (VS Code,Vue脚手架工具,Element

yangchao_888的博客 3838

vue3:实现调用本地摄像头实现拍照+保存到本地或上传到服务器,vue3获取浏览器摄像头开启权限,调起摄像头进行拍照并查看预览等功能(支持前置和后置摄像头,兼容全部浏览器网站、解决网站申请权限问题)

vue3调用本地摄像头实现拍照,vue3调取电脑摄像头实现拍照功能,获取网页摄像头权限开启,vue3实现调用手机拍照,vue3项目调用摄像头实现拍照功能并切换前置后置摄像头拍照,Vue3调起摄像头,进行拍照并能保存到本地,vue3打开摄像头保存图片,vue3 开启摄像头,并进行拍照_vue实现浏览器调用摄像头,VUE3调用电脑摄像头进行拍照并上传到服务器保存,前端调用本地摄像头实现拍照,摄像头权限没有提示怎么办,拒绝摄像头权限再也打不开了,拍照画面全黑,vue3调用摄像头预览并拍照功能Demo,在Vue3项

✅ 精选推荐文章 3813

Vue3调用摄像头实时显示

在 Vite + Vue 3 项目中,如果你想要实现调用摄像头实时显示,并添加一个拍照按钮来捕获图片并在实时显示的右边展示,你可以使用原生的 JavaScript API 来访问摄像头,并结合 Vue 3 的setup语法糖来完成这一任务。创建一个 Vue 组件,用于显示摄像头的实时视频流和拍照后的图片。使用方法来请求访问用户的摄像头。将获取到的视频流设置到一个<video>元素的srcObject属性上,以便实时显示视频。在组件中添加一个按钮,用于触发拍照功能。使用<canvas>元素和的。

蜡笔小新星的博客 1598

【从零开始玩量化7】easyTrader: 自动化(程序化)交易利器

前面的文章,我们介绍了数据获取工具AKShare, 量化回测工具backtrader等,这一篇,介绍程序化交易工具easyTrader。作者网名食灯鬼,目前项目在Github上的star数已经有6.7k。这可能是目前,开源能找到的,最好用的程序化交易库了。本文介绍了easyTrader的简单用法,这个包还有很多功能,后续再继续写文章探究。

量化投资助手的博客 1万+

Isaacgym使用操作指南

Isaac Gym 是一个强大的仿真工具,特别适合那些需要进行大规模并行仿真和训练的机器人和强化学习任务。通过 GPU 加速、深度学习集成和丰富的物理仿真能力,Isaac Gym 能够显著提高仿真和训练效率,是机器人学和 AI 研究中的一大利器。

Tony Wey的博客 1万+

vue 实现调用摄像头进行拍照功能以及从图库中选择相片功能以及基于photoswipe的vue图片预览 组件

效果图 图一:       图二:       图三:  图四:  使用组件: 使用vue-photo-preview :https://github.com/826327700/vue-photo-preview .ts import photograph from "@/MobileApp/components/photograph"; @Component({ comp...

勋勋勋勋小勋勋的博客 9597

从零搭建Simulink-Adams联合仿真平台:实现电机转速的精准闭环控制

本文详细介绍了从零搭建Simulink-Adams联合仿真平台的完整流程,旨在实现电机转速的精准闭环控制。通过将Simulink的控制算法与Adams的物理模型相结合,构建了一个包含真实机械效应的数字孪生系统。文章涵盖了Adams物理模型构建、接口定义、Simulink控制闭环搭建、PID参数调试以及常见避坑指南,为机电系统仿真提供了实用的工程实践指导。

weixin_29189373的博客 153

在Vue项目中调用摄像头

的实现,建议使用Vue3组合式API进行模块化封装。:覆盖旧版webkit/moz前缀API。:需处理不同浏览器的MIME类型差异。:主流错误类型分类提示。完整示例代码可参考来源。

ItContentShare 1990

SAP ABAP实战:用GN_DELIVERY_CREATE批量创建内部交货单的完整代码与避坑指南

本文详细介绍了在SAP ABAP开发中使用GN_DELIVERY_CREATE函数批量创建内部交货单的完整实现方案。通过数据结构设计、多源数据整合、批量处理逻辑和错误处理机制等核心环节的深入解析,帮助开发者高效完成物流单据自动化处理,特别针对VL31N/VL32N等常见场景提供避坑指南。

weixin_42116058的博客 343

从零上手SKILL脚本:在Virtuoso中实现版图绘制自动化

本文详细介绍了如何使用SKILL脚本在Virtuoso中实现版图绘制自动化,从基础操作到高级技巧全面覆盖。通过抓取操作日志、转换交互式函数为程序式函数,以及核心函数深度解析,帮助读者快速掌握SKILL脚本编程,大幅提升版图设计效率。文章还提供了实际工程应用案例和调试优化技巧,适合从零开始的初学者。

weixin_28742653的博客 764

vue+cordova 调用摄像头并对vue项目进行打包

参考文章:https://blog.csdn.net/u011042316/article/details/83828371 https://segmentfault.com/a/1190000014101362 建立vue项目和cordova项目步骤略过.... ---------------------以下修改的都是vue项目-----------...

u013164983的博客 1336

LoRa学习:LoRa通信调制解调的实现原理与性能

LoRa学习:LoRa调制解调原理与性能 1、LoRa调制解调器原理 LoRa调制解调器采用专利扩频调制和前向纠错技术。与传统的FSK、OOK调制技术相比,LoRa扩大了无线通讯链路的覆盖范围(实现了远距离无线传输),提高了链路的鲁棒性。。 开发人员可调整扩频因子和纠错率这两个参数,从而平衡通讯时的带宽占用、通信速率、空中包的存活时间、以及抗干扰性等。。 LoRa调制解调器...

HowieXue 薛永浩的博客 3万+

实现移动端调取摄像头拍照并截取图片上传

实现移动端调取摄像头拍照并截取图片上传 使用vant配合vue-cropper 实现调取摄像头拍照上传并截取图片 做项目需求用到H5调用摄像头上传图片并且需要截取图片上传,使用vant 框架的文件上传组件Uploader 配合vue-cropper实现拍照截图上传功能。 npm install vue-cropper 组件内使用 import { VueCropper } from 'vue-cropper' components: { VueCropper, }, main.js里面使用 im

Schrodinge的博客 2395

把 MCP Server 直接装进 SAP ABAP:用 Unlimited Display Tools 打通 Agentic SDK 与 SAP ECC / S/4HANA 的最后一公里

摘要:AI与SAP集成的MCP解决方案 企业在AI集成中面临工具链复杂、数据对接繁琐的挑战。Model Context Protocol (MCP)通过标准化工具与数据暴露方式,将集成复杂度从N×M降至N+M。在SAP生态中,MCP Server for SAP直接部署于ABAP层,利用DDIC/CDS视图对接各类Agent SDK,避免中间件风险。 MCP核心包含三类对象: Tools:带元数据的可执行动作 Resources:结构化上下文数据 Prompts:可参数化提示模板 ABAP层实现MCP Se

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 683

STM32入门教程:图像处理

然后,我们使用 STM32 的 DSP 模块中的 arm_mean_u8 函数计算原始图像的平均值,并将结果存储在 meanValue 变量中。然后,我们需要编写代码配置 STM32 的外部中断输入引脚,并在中断处理函数中读取 OV7670 摄像头模块输出的图像数据。然后,我们需要编写代码配置 STM32 的 USB OTG 接口,并在回调函数中读取 USB 摄像头输出的图像数据。一、图像采集 图像采集是图像处理的第一步,我们需要将外部图像源的数据导入到 STM32 中进行处理。

2401_85625565的博客 1616
上一篇: vue项目 使用手机预览
下一篇: nvm npm i报错
一个打工仔的笔记
博客等级 码龄6年 1904粉丝 154原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值