扫码

<body>
<video id="video" style="width: 400px"></video>
<canvas id="canvas" style="width: 400px"></canvas>
<br />
<button type="button" onclick="takePicture()">Take Picture</button>
<!-- https://cdn.jsdelivr.net/npm/jsqr@1.4.0/dist/jsQR.min.js -->
<script src="jsqr.js"></script>
<script>
function takePicture() {
navigator.mediaDevices.getUserMedia({ video: { facingMode: 'environment' } }).then(
(stream) => {
/** @type {HTMLVideoElement} */
const video = document.getElementById('video');
/** @type {HTMLCanvasElement} */
const canvas = document.getElementById('canvas');
const ctx = canvas.getContext('2d');
video.muted = true;
video.setAttribute('playsinline', true);
video.onloadedmetadata = () => {
canvas.width = video.videoWidth;
canvas.height = video.videoHeight;
draw();
};
video.srcObject = stream;
video.play();
const draw = () => {
ctx.drawImage(video, 0, 0, canvas.width, canvas.height);
const { data } = ctx.getImageData(0, 0, canvas.width, canvas.height);
const code = jsQR(data, canvas.width, canvas.height);
video.requestVideoFrameCallback(() => {
console.log(code);
if (code) {
// 扫到二维码,停止视频流
video.pause();
video.srcObject.getTracks()[0].stop();
return;
}
draw();
});
};
},
(error) => {
console.error(error);
}
);
}
</script>
</body>
posted @   _clai  阅读(18)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
点击右上角即可分享
微信分享提示