fix:摄像头测试

This commit is contained in:
shijing 2025-03-20 16:12:06 +08:00
parent 3602844e45
commit fde88e8af9
1 changed files with 89 additions and 0 deletions

View File

@ -0,0 +1,89 @@
<template>
<div style="position: relative">
<h1>扫描二维码</h1>
<video ref="videoElement" width="500" autoplay></video>
<canvas ref="canvasElement" style="display:none;position: absolute;left: 510px;"></canvas>
<div class="result">
<el-button @click="scanQRCode">识别二维码</el-button>
<h3>扫描结果</h3>
<p>{{ scannedResult }}</p>
</div>
</div>
</template>
<script>
import jsQR from 'jsqr';
export default {
data() {
return {
scannedResult: null, //
videoStream: null, //
};
},
mounted() {
this.startScanning();
},
methods: {
//
async startScanning() {
try {
alert("启动摄像头");
//
const stream = await navigator.mediaDevices.getUserMedia({
video: { facingMode: 'environment' }, // 使
});
this.videoStream = stream;
this.$refs.videoElement.srcObject = stream;
alert("准备就绪");
setTimeout(() => {
this.scanQRCode();
},1000)
} catch (error) {
console.error('无法访问摄像头:', error);
}
},
//
scanQRCode() {
alert("解析二维码");
let videoElement = this.$refs.videoElement;
let canvas = this.$refs.canvasElement;
let context = canvas.getContext('2d');
let widths = videoElement.videoWidth;
let heights = videoElement.videoHeight;
canvas.width = videoElement.videoWidth;
canvas.height = videoElement.videoHeight;
context.drawImage(videoElement, 0, 0, widths, heights);
//
let imageData = context.getImageData(0, 0, widths,heights);
// 使 jsQR
console.log("imageData", imageData);
let qrCode = jsQR(imageData.data, widths,heights);
console.log("qrCode", qrCode);
if (qrCode) {
this.scannedResult = qrCode.data; //
} else {
this.scannedResult = null; //
}
},
},
beforeUnmount() {
//
if (this.videoStream) {
const tracks = this.videoStream.getTracks();
tracks.forEach(track => track.stop());
}
},
};
</script>
<style scoped>
.result {
margin-top: 10px;
font-size: 16px;
color: green;
}
</style>