【Vue3】 typescript 实现开启摄像头并拍照,拍照图片回显,获取图片的 Base64 字符串并上传

效果图:
在这里插入图片描述
html


 <div style="width: 600px;height: 400px;position: relative;">
 	<!--摄像头画面-->
    <video ref="video" width="600" height="400" autoplay ></video>
    <!--拍摄图片-->
     <canvas ref="canvas" width="540" height="400" ></canvas>
 </div>
 <el-button type="primary" class="m-l-3" size="default" @click="takePhoto">
      拍摄图片
 </el-button>
 <el-button :loading="tongueLoading" type="primary" size="default" @click="uploadPhoto('handle')">
      上传图片
  </el-button>

javascript

    
    const video = ref(null);
    const canvas = ref(null);
    const photoData = ref(null);
    const uploadRef = ref();
    
    startCamera();
    //初始化视频
   function startCamera(){
        // 检测浏览器是否支持mediaDevices
        if (navigator.mediaDevices) {
            navigator.mediaDevices
            // 开启视频
            .getUserMedia({audio: false, video: true})
            .then((stream) => {
                // 将视频流传入viedo控件
                if (video.value) {
                    video.value.srcObject = stream;
                }
            })
            .catch((err) => {
                console.log(err);
            });
        } else {
            ElMessage.warning("该浏览器不支持开启摄像头,请更换最新版浏览器");
        }
    };
    //拍照
    const takePhoto = async () => {
        const stream = video.value.srcObject;
        const ctx = canvas.value.getContext('2d');
        ctx.drawImage(video.value, 0, 0, canvas.value.width, canvas.value.height);
        photoData.value = canvas.value.toDataURL('image/png');
    };

   // 发送上传
    const uploadPhoto = async (type:string) => {
        let imageStr = photoData.value.split('base64,')[1];//获取图片的 Base64 字符串
   
        const formData = new FormData();
        const data = {
            image: imageStr
        };
        tongueLoading.value = true;
        hasResult.value = false;
        fetch('接口', {
        method: 'POST',
        headers: {
            'Content-Type': 'application/json',
            'Access-Control-Allow-Origin':'*'
        },
        body: JSON.stringify(data)
        })
        .then(response => response.json())
        .then(data => {
            console.log('返回结果',data)
        })
        .catch(error => {
			console.error('报错',data)
        });
    };

photoData.value值示例

data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAhwAAAGQCAYAAADlZLlCAAAAAXNSR0IArs4c6QAAIABJREFUeF5kvVmzpdeRHZbfGe+9VYUZhXki2ZMjJPWL9WaH/eAXP1iypRbNtsMPbjJIgv33rOg/YEmMkELqVhMogOAI1ICap3vvmY9jTXt/BaObQbDq3nO+b+/cmStXrsw9/PDnnx6nw7GqjrWvoTbHYw2ToWaToaoOtd8PNUxndTwealZV82PVZNjX8bCv7e5Qta/aX17W5eq81rtN7Y67qqHqcNjXcNjxdybHoY7HoQ6TSe0PQ9UwLXzlcDzUfFE1qWNNj5M67IbaHYbaz6sOk33NJocaJlW7w7H2h1lNa17zAX+JXz7UMBzqiA+azflH+JxheqxD4dEXNalpDXiOmX522A/8s+Ok8OV8z/0w1AHveJhWTfG9O34nH/CIdalazGY1PehnDodZHYZj7Sf7OkwPdZwca3I81uSwx6/XdDKryWRah+OE782Pwe9NhlpP9vy7ZU3wh3UcsDaTOuKzJ0MdZlXbyZ7fOa2Bn6d10s/N8Kp14F5grw7DUMdhUpNhWtzBYcJnOw744HkNh0MtJofCC+2PQ+2OR/7ufFo1Gw414bPheRf

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值