要调用前置摄像头并拍照,可以使用navigator.mediaDevices.getUserMedia方法获取视频流,然后将视频流显示到<video>元素中,并使用<canvas>元素进行拍照:

<template>
  <div>
    <video ref="video" autoplay></video>
    <button @click="takePhoto">拍照</button>
    <canvas ref="canvas" style="display:none;"></canvas>
  </div>
</template>

<script>
export default {
  mounted() {
    this.startCamera();
  },
  methods: {
    async startCamera() {
      try {
        const video = this.$refs.video;
        const stream = await navigator.mediaDevices.getUserMedia({ video: { facingMode: 'user' } });
        video.srcObject = stream;
      } catch (error) {
        console.error('无法获取摄像头:', error);
      }
    },
    takePhoto() {
      const video = this.$refs.video;
      const canvas = this.$refs.canvas;
      const context = canvas.getContext('2d');
      
      // 设置canvas的宽高与video一致
      canvas.width = video.videoWidth;
      canvas.height = video.videoHeight;
      
      // 将video当前帧绘制到canvas
      context.drawImage(video, 0, 0, canvas.width, canvas.height);
      
      // 将canvas转为Base64格式的图像数据
      const photo = canvas.toDataURL('image/png');
      
      // 可以将photo传给后端保存或其他操作
      console.log(photo);
    }
  }
};
</script>

在上述代码中,navigator.mediaDevices.getUserMedia方法用于获取视频流,通过{ video: { facingMode: 'user' } }参数可以指定使用前置摄像头。获取到视频流后,将其赋值给<video>元素的srcObject属性,即可在页面上显示摄像头的实时画面。

点击拍照按钮时,调用takePhoto方法,该方法将视频当前帧绘制到<canvas>元素中,并使用toDataURL方法将<canvas>转为Base64格式的图像数据。你可以将该数据传给后端保存或进行其他操作。


原文地址: https://www.cveoy.top/t/topic/pIAp 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录