vue pc端调用摄像头进行拍照并实现裁剪上传

参考文档:MediaDevices.getUserMedia() - Web API 接口参考 | MDN

vue实现PC端调用摄像头拍照人脸录入、移动端调用手机前置摄像头人脸录入、及图片旋转矫正、压缩上传base64格式/文件格式 - 会写代码的赖先生 - 博客园

 使用vue-cropper裁剪图片

参考文档:Vue使用vue-cropper裁剪图片_hql1024的博客-CSDN博客

史上最全基于vue的图片裁剪vue-cropper使用_DT辰白-CSDN博客_vue-cropper

<template>
  <div>
    <!--开启摄像头-->
    <img @click="callCamera" :src="headImgSrc" alt="摄像头" />
    <!--canvas截取流-->
    <canvas ref="canvas" width="640" height="480"></canvas>
    <!--图片展示-->
    <video ref="video" width="640" height="480" autoplay></video>
    <!--确认-->
    <el-button size="mini" type="primary" @click="photograph"></el-button>
  </div>
</template>   
<script>
export default {
  data() {
    return {
      headImgSrc: require("@/assets/image/photograph.png"),
    };
  },
  methods: {
    // 调用摄像头
    callCamera() {
      // H5调用电脑摄像头API
      //navigator.mediaDevices.getUserMedia 调用后 会提示用户给予使用媒体输入的许可.返回一个 Promise 对象,
      //成功后会resolve回调一个 MediaStream 对象。
      //在移动设备上面调用摄像头也可以通过此种方式,如下的例子表示优先使用前置摄像头
      //{ audio: true, video: { facingMode: "user" } }前摄像头
      //{ audio: true, video: { facingMode: { exact: "environment" } } }强制使用后置摄像头
      //设置获取接近 1280x720 的相机分辨率
      //{ audio: true, video: { width: 1280, height: 720 } };
      navigator.mediaDevices
        .getUserMedia({
          audio: true,//调用音频
          video: true, //说明请求的媒体类型。调用视频
        })
        .then((success) => {
          // 摄像头开启成功
          this.$refs["video"].srcObject = success; //src 是播多媒体文件的;srcobj 是实时流
          // 实时拍照效果
          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);
      //canvas图片 转base64格式、图片格式转换、图片质量压缩
      //语法 canvas.toDataURL(type, encoderOptions); 设置转换的图片格式、图片质量压缩
      let imgBase64 = this.$refs["canvas"].toDataURL("image/jpeg", 0.7); 
      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);// 由字节转换为KB 判断大小 
      console.log(size); //图片大小
    },
    // 关闭摄像头
    closeCamera() {
      if (!this.$refs["video"].srcObject) {
        return;
      }
      //MediaStream 接口的getTracks() 方法会返回一个包含媒体流中所有媒体对象
      let stream = this.$refs["video"].srcObject;
      let tracks = stream.getTracks();
      tracks.forEach((track) => {
        track.stop();
      });
      this.$refs["video"].srcObject = null;
    },
  },
};
</script>

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
抱歉,我是一个语言模型AI,我没有能力调用摄像头录制视频。不过,您可以尝试使用WebRTC技术来实现在浏览器端调用摄像头录制视频。在Vue中,可以使用vue-webrtc库来实现。这个库提供了一些Vue组件,可以方便地实现WebRTC功能。以下是实现WebRTC录制视频的基本步骤: 1. 安装vue-webrtc库 运行以下命令: ``` npm install vue-webrtc --save ``` 2. 在Vue组件中导入vue-webrtc 在组件中引入vue-webrtc: ```javascript import { Webrtc } from 'vue-webrtc' ``` 3. 在组件中使用Webrtc元素 在组件的template中添加Webrtc元素,用于显示摄像头捕获的视频: ```html <template> <div> <webrtc :autoPlay="true"></webrtc> </div> </template> ``` 4. 实现录制视频功能 使用MediaRecorder API来录制视频: ```javascript let mediaRecorder = null let chunks = [] function startRecording() { const stream = this.$refs.webrtc.getStream() mediaRecorder = new MediaRecorder(stream) mediaRecorder.ondataavailable = function(e) { chunks.push(e.data) } mediaRecorder.onstop = function() { const blob = new Blob(chunks, { type: 'video/mp4' }) const url = URL.createObjectURL(blob) const a = document.createElement('a') a.href = url a.download = 'recording.mp4' a.click() chunks = [] } mediaRecorder.start() } function stopRecording() { mediaRecorder.stop() } ``` 这个例子中,我们使用MediaRecorder API来捕获摄像头视频,并将录制的数据保存到Blob对象中。最后,我们将Blob对象转换为URL,并创建一个链接,使用户可以下载录制的视频。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值