| 12
 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>
 
 |