当前位置: 首页 > news >正文

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;// 绘制当前帧到canvasctx.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>

 


http://www.gsyq.cn/news/18707.html

相关文章:

  • 2025不锈钢管件厂家推荐榜:技术实力与诚信口碑双重保障
  • 【Qt开发】输入类控件(二)-> QTextEdit - 详解
  • 基于MATLAB的禁忌搜索算法解决物流网络枢纽选址问题
  • 详细揭秘:详细揭秘:集合划分容斥的容斥系数
  • 学好微积分特别是偏微分方程的数值求解对于学习CFD的好处?
  • 基于Logistic映射与Chen超混沌系统结合DNA分块编解码的图像加密技术
  • Web前端入门第 88 问:引入 JavaScript 的 script 标签究竟有多少用法?
  • 我如何控制新增的节点是 leader 还是follower呢?
  • 2025 年全屋定制 / 高端 / 装修收纳设计 / 不锈钢橱柜 / 别墅 / 大平层装修公司推荐:苏州伍德家居与百能家居的优质定制解决方案解析
  • SAS重要证明结论
  • 2025 年蒸汽发生器厂家最新推荐排行榜:含 800KG 燃气 / 超低氮冷凝 / 400KG 燃气等多类型设备企业优选指南
  • 全网首发/Qt结合ffmpeg实现rist推拉流/可信赖的互联网流媒体协议/跨平台支持各个系统
  • 2025 年灌装机厂家最新推荐权威榜单:聚焦全自动液体定量灌装设备,精选饮用水 / 纯净水 / 矿泉水灌装领域优质企业
  • 2025 年灌装生产线厂家最新推荐排行榜:覆盖饮料 / 矿泉水 / 纯净水 / 桶装水 / 全自动生产线,助力企业精准选购优质设备权威榜单
  • Vue 创建项目的几种方式
  • C# 使用WebView2加载本地资源
  • 从零开始部署Android环境的Jenkins CI/CD流水线(docker环境,Win强大的系统)
  • 集群、分布式、微服务
  • 改了 Nacos 一行配置,搞崩线上支付系统!
  • Gitee Insight领跑DevSecOps赛道:2025研发效能工具全景评测
  • Vue3 集成 VueRouter
  • 2025 最新球墨铸铁管件厂商推荐排行榜权威发布,市政 / 给排水 / 消防用管件优选品牌深度解析
  • CH585在MACOS系统中协商BLE连接间隔至7.5ms
  • FastCopy复制软件绿色版下载!一款快速复制软件!方便实用
  • CopyOnWriteArrayList 的故事--一起看看java原生的读写分离
  • 详细介绍:深入解析 List 容器组件:构建高效、可交互的列表解决方案
  • 2025年开发者必看:本土化代码管理平台Gitee如何助力中国开发者高效协作
  • C. awoos Favorite Problem
  • 2025 年过滤机厂家最新推荐排行榜:胶带式 / 盘式真空 / 脱水 / 带式真空 / 水平带式过滤机企业权威选购指南
  • 2025 年最新推荐灭火器维修公司榜单:覆盖干粉 / 水基 / 二氧化碳 / 七氟丙烷 / 锂电池灭火器维修,帮您选到专业可靠服务单位