You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
8 lines
41 KiB
JavaScript
8 lines
41 KiB
JavaScript
![]()
7 years ago
|
/*!
|
||
|
* qrcode-decode v0.0.1
|
||
|
* (c) 2018-present cnwhy <w.why@163.com>
|
||
|
* Released under the ISC License.
|
||
|
*/
|
||
|
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t(e.qrcodeDecode={})}(this,function(e){"use strict";function t(e,t,n){this.x=e,this.y=t,this.count=1,this.estimatedModuleSize=n,this.__defineGetter__("EstimatedModuleSize",function(){return this.estimatedModuleSize}),this.__defineGetter__("Count",function(){return this.count}),this.__defineGetter__("X",function(){return Math.floor(this.x)}),this.__defineGetter__("Y",function(){return Math.floor(this.y)}),this.incrementCount=function(){this.count++},this.aboutEquals=function(e,t,n){if(Math.abs(t-this.y)<=e&&Math.abs(n-this.x)<=e){var i=Math.abs(e-this.estimatedModuleSize);return i<=1||i/this.estimatedModuleSize<=1}return!1}}var n=function(e,n,i,r,s,o,a,h){this.image=e,this.possibleCenters=new Array,this.startX=i,this.startY=r,this.width=s,this.height=o,this.moduleSize=a,this.crossCheckStateCount=new Array(0,0,0),this.resultPointCallback=h,this.centerFromEnd=function(e,t){return t-e[2]-e[1]/2},this.foundPatternCross=function(e){for(var t=this.moduleSize,n=t/2,i=0;i<3;i++)if(Math.abs(t-e[i])>=n)return!1;return!0},this.crossCheckVertical=function(e,t,i,r){var s=this.image,o=n.height,a=this.crossCheckStateCount;a[0]=0,a[1]=0,a[2]=0;for(var h=e;h>=0&&s[t+h*n.width]&&a[1]<=i;)a[1]++,h--;if(h<0||a[1]>i)return NaN;for(;h>=0&&!s[t+h*n.width]&&a[0]<=i;)a[0]++,h--;if(a[0]>i)return NaN;for(h=e+1;h<o&&s[t+h*n.width]&&a[1]<=i;)a[1]++,h++;if(h==o||a[1]>i)return NaN;for(;h<o&&!s[t+h*n.width]&&a[2]<=i;)a[2]++,h++;if(a[2]>i)return NaN;var w=a[0]+a[1]+a[2];return 5*Math.abs(w-r)>=2*r?NaN:this.foundPatternCross(a)?this.centerFromEnd(a,h):NaN},this.handlePossibleCenter=function(e,n,i){var r=e[0]+e[1]+e[2],s=this.centerFromEnd(e,i),o=this.crossCheckVertical(n,Math.floor(s),2*e[1],r);if(!isNaN(o)){for(var a=(e[0]+e[1]+e[2])/3,h=this.possibleCenters.length,w=0;w<h;w++)if(this.possibleCenters[w].aboutEquals(a,o,s))return new t(s,o,a);var f=new t(s,o,a);this.possibleCenters.push(f),null!=this.resultPointCallback&&this.resultPointCallback.foundPossibleResultPoint(f)}return null},this.find=function(){for(var t=this.startX,i=this.height,o=t+s,a=r+(i>>1),h=new Array(0,0,0),w=0;w<i;w++){var f=a+(0==(1&w)?w+1>>1:-(w+1>>1));h[0]=0,h[1]=0,h[2]=0;for(var u=t;u<o&&!e[u+n.width*f];)u++;for(var l=0;u<o;){if(e[u+f*n.width])if(1==l)h[l]++;else if(2==l){var d;if(this.foundPatternCross(h)&&null!=(d=this.handlePossibleCenter(h,f,u)))return d;h[0]=h[2],h[1]=1,h[2]=0,l=1}else h[++l]++;else 1==l&&l++,h[l]++;u++}if(this.foundPatternCross(h)&&null!=(d=this.handlePossibleCenter(h,f,o)))return d}if(0!=this.possibleCenters.length)return this.possibleCenters[0];throw"Couldn't find enough alignment patterns"}},i=3,r=57,s=8,o=2,a=function(e){function t(e,t){var n=e.X-t.X,i=e.Y-t.Y;return Math.sqrt(n*n+i*i)}var n,i,r,s=t(e[0],e[1]),o=t(e[1],e[2]),a=t(e[0],e[2]);if(o>=s&&o>=a?(i=e[0],n=e[1],r=e[2]):a>=o&&a>=s?(i=e[1],n=e[0],r=e[2]):(i=e[2],n=e[0],r=e[1]),function(e,t,n){var i=t.x,r=t.y;return(n.x-i)*(e.y-r)-(n.y-r)*(e.x-i)}(n,i,r)<0){var h=n;n=r,r=h}e[0]=n,e[1]=i,e[2]=r};var h=function(e){this.image=null,this.possibleCenters=[],this.hasSkipped=!1,this.crossCheckStateCount=new Array(0,0,0,0,0),this.resultPointCallback=null,this.__defineGetter__("CrossCheckStateCount",function(){return this.crossCheckStateCount[0]=0,this.crossCheckStateCount[1]=0,this.crossCheckStateCount[2]=0,this.crossCheckStateCount[3]=0,this.crossCheckStateCount[4]=0,this.crossCheckStateCount}),this.foundPatternCross=function(e){for(var t=0,n=0;n<5;n++){var i=e[n];if(0==i)return!1;t+=i}if(t<7)return!1;var r=Math.floor((t<<s)/7),o=Math.floor(r/2);return Math.abs(r-(e[0]<<s))<o&&Math.abs(r-(e[1]<<s))<o&&Math.abs(3*r-(e[2]<<s))<3*o&&Math.abs(r-(e[3]<<s))<o&&Math.abs(r-(e[4]<<s))<o},this.centerFromEnd=function(e,t){return t-e[4]-e[3]-e[2]/2},this.crossCheckVertical=function(t,n,i,r){for(var s=this.image,o=e.height,a=this.CrossCheckStateCount,h=t;h>=0&&s[n+h*e.width];)a[2]++,h--;if(h<0)return NaN;for(;h>=0&&!s[n+h*e.width]&&a[1]<=i;)a[1]++,h--;if(h<0||a[1]>i)return NaN;for(;h
|
||
|
//# sourceMappingURL=qrcode-decode.min.js.map
|