1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133
| <script> import jsQR from "jsqr"; import Quagga from "quagga"; export default { name: '', data() { return { cameraWidth: 0, cameraHeight: 0 } }, methods: { initVideo(constrains){ let _this = this; if(navigator.mediaDevices.getUserMedia){ navigator.mediaDevices.getUserMedia(constrains).then(_this.videoSuccess).catch(_this.videoError); } else if (navigator.webkitGetUserMedia){ navigator.webkitGetUserMedia(constrains).then(_this.videoSuccess).catch(_this.videoError); } else if (navigator.mozGetUserMedia){ navagator.mozGetUserMedia(constrains).then(_this.videoSuccess).catch(_this.videoError); } else if (navigator.getUserMedia){ navigator.getUserMedia(constrains).then(_this.videoSuccess).catch(_this.videoError); } }, videoSuccess(stream){ let video = this.$refs.video, _this = this; video.srcObject = stream; video.play();
video.oncanplay = function () { console.log('摄像头分辨率'); console.log(video.videoWidth,video.videoHeight); _this.cameraWidth = video.videoWidth; _this.cameraHeight = video.videoHeight; _this.readImg(); }; }, videoError(error){ console.log("访问用户媒体设备失败:",error.name,error.message); }, readImg(){ let video = this.$refs.video, canvas = this.$refs.canvas, context = canvas.getContext("2d"), _this = this; let timer = setInterval(function () { context.drawImage(video,0,0,_this.cameraWidth,_this.cameraHeight,0,0,478,850); let imgUri = canvas.toDataURL(); _this.readBarcode(imgUri,timer);
let imageData = context.getImageData(0, 0, 478, 850); _this.readQrcode(imageData.data,timer); },1000) }, readBarcode(imgBase64,timer){ let _this = this; Quagga.decodeSingle({ inputStream: { size: 1920 }, locator: { patchSize: "medium", halfSample: false }, decoder: { readers: [{ format: "code_128_reader", config: {} }] }, locate: true, src: imgBase64 }, function(result){ if (result){ if(result.codeResult) { console.log(result.codeResult); clearInterval(timer); _this.$emit('ondata',result.codeResult.code);
} else { console.log("正在扫条形码...not detected"); } }else { console.log("正在扫条形码...not detected"); }
}); }, readQrcode(data,timer){ let _this = this; let code = jsQR(data, 478, 850, { inversionAttempts: "dontInvert", });
if (code){ clearInterval(timer); _this.$emit('ondata',code.data);
}else { console.log('正在扫二维码...'); } } }, mounted(){ if (navigator.mediaDevices.getUserMedia || navigator.getUserMedia || navigator.webkitGetUserMedia || navigator.mozGetUserMedia){ this.initVideo({ video:{ height: 800, facingMode: { exact: "environment" } } }); } else { alert("你的浏览器不支持访问用户媒体设备"); } } } </script>
|