vue3实现抓拍并上传

<template>
  <video ref="videoRef" autoplay playsinline></video>
  <canvas ref="canvasRef" class="hidden"></canvas>
  <button @click="capture">抓拍</button>
</template>
 
<style>
.hidden { display: none; }
</style>
<script setup>
import { ref, onMounted, onBeforeUnmount } from 'vue';
 
const videoRef = ref(null);
const canvasRef = ref(null);
let stream = null;
 
// 初始化摄像头
const initCamera = async () => {
  try {
    stream = await navigator.mediaDevices.getUserMedia({ video: true });
    videoRef.value.srcObject = stream;
  } catch (error) {
    console.error('摄像头访问失败:', error);
  }
};
 
// 抓拍并存储
const capture = () => {
  const video = videoRef.value;
  const canvas = canvasRef.value;
  const ctx = canvas.getContext('2d');
  
  // 设置canvas尺寸与视频一致
  canvas.width = video.videoWidth;
  canvas.height = video.videoHeight;
  
  // 绘制当前帧到canvas
  ctx.drawImage(video, 0, 0, canvas.width, canvas.height);
  
  // 转为base64并存储
  const base64 = canvas.toDataURL('image/png');
  localStorage.setItem('userImg', base64);
};
 
// 清理资源
const cleanup = () => {
  if (stream) {
    stream.getTracks().forEach(track => track.stop());
    stream = null;
  }
};

//图片上传函数
function uploadimg() {
  // 提取base64数据部分
  const base64Data = localStorage.userImg.split(',')[1];

  // 创建FormData对象
  // const formData = new FormData();
  // formData.append('base64Image', base64Data);

  // 也可以直接发送base64字符串
  const data = { base64Image: base64Data };

  // 发送到服务器
  fetch(`http://192.168.2.44:18758/imageUpload/zhuapai`, {
    method: 'POST',
    // body: formData,
    // 如果使用JSON方式
    headers: {
      'Content-Type': 'application/json',
    },
    body: JSON.stringify(data)
  })
    .then(response => response.json())
    .then(data => {
      console.log('上传成功:', data);
      img_url = data.data.fullUrl

      let img0 = document.getElementById("j_img");
      img0.src = "";
    })
    .catch(error => {
      console.error('上传失败:', error);
    });

}

 
onMounted(initCamera);
onBeforeUnmount(cleanup);
</script>

 


posted @ 2025-10-11 11:47  冥·紫月  阅读(2)  评论(0)    收藏  举报