javascript-barcode-reader
Version:
A Barcode scanner in javascript
1 lines • 16.2 kB
Source Map (JSON)
{"version":3,"sources":["code-93\\index.js","code-39\\index.js","ean-13\\index.js","index.js"],"names":["BAR_SET","GROUP_SET","CHAR_SET","decode","lines","push","code","i","segment","slice","barThreshold","Math","round","reduce","pre","item","length","noob","map","barSeg","filter","index","join","whiteSeg","parseInt","substring","module","exports","UPC_SET","bar","group","digits","reverse","indexOf","DecoderCode93","require","DecoderCode39","DecoderEAN13","BARCODE_DECODERS","barcodeDecoder","imgOrId","options","doc","document","img","getElementById","width","naturalWidth","height","naturalHeight","canvas","createElement","ctx","getContext","spoints","numLines","slineStep","drawImage","pxLine","getImageData","data","sum","min","max","row","col","g","s","undefined","pivot","bmp","matches","curr","count","barcode","root"],"mappings":"ACAA,IAAMA,UAAU;AACd,ADDF,IAAMA,OCCK,GADK,ADAA;ACEd,ADDA,WCCS,ADDA,GCDK,ADAA;ACGd,ADDA,AEFF,IAAM4B,ODGK,ADDA,GCFK,ADAA,AEAA;ADId,ADDA,AEFA,UAAQ,CDGC,ADDA,EEHK,CDAA,ADAA;ACKd,ADDA,AEFA,UAAQ,CDGC,ADDA,EEJK,CDAA,ADAA;ACMd,ADDA,AEFA,UAAQ,CDGC,ADDA,EELK,CDAA,ADAA;ACOd,ADDA,AEFA,ACJF,IAAMM,MDII,CDGC,ADDA,EENK,CDAA,ADAA,MGAMC,QAAQ,WAAR,CAAtB;AFQE,ADDA,AEFA,ACJF,IAAMC,MDII,CDGC,ADDA,EEPK,CDAA,ADAA,MGCMD,QAAQ,WAAR,CAAtB;AFQE,ADDA,AEFA,ACJF,IAAME,MDII,CDGC,ADDA,EERK,CDAA,ADAA,KGEKF,QAAQ,UAAR,CAArB;AFQE,ADDA,AEFA,UAAQ,CDGC,ADDA,EETK,CFAA;ACAA,ADUd,AEFA,ACJF,CFJA,GEIMG,MDII,CFEC,EEVK,UCIS;AHJT,AESd,ACJA,CHLF,SESU,GATM,ACKHJ,aADY;AFSzB,ACHE,ACJA,IFOIjC,MCHI,GCJGmC,GFOK,UETO;AFUvB,ADDF,AEbgB,ACOd,CDPF,GFaMnC,OCCK,CEPCoC,EFMM,EDAA;ACEhB,ADDA,AGVuB,CAAzB,UFWW,ADDA,GADO,CCAA;AAGhB,ADDA,AEFF,IAAMlC,ODGK,ADDA,EEFI,EDAG,ADAA,OEAZA,MAAS,QAAS;ADItB,ADDA,AEFA,ACJF,IAAMoC,EDIAjC,KDGK,ADDA,EEFE,EFDK,AEChB,MCJqB,SAAjBiC,cAAiB,CAACC,OAAD,EAAUC,OAAV,EAAsB;AFG3B,ADIhB,AEFA,ACJA,CFEF,KEFQC,KHMG,CGNGC,QAAZ;AHEgB,AEGhB,ACJA,CHCF,KEGQd,ACJAe,MDIM,ACHV,CDGW,EAAE,CAACxC,ICHPoC,EDGa,CAAN,IAAWpC,ACHzB,MDG+B,CAAN,CAAX,GAAsBA,MAAM,CAAN,CAAvB,IAAmC,CAArC,CAAb,CAHsB,CAG+B,cCH5CoC,OAAP,OAAmB,QAAnB,GAA8BA,OAA9B,GAAwCE,IAAIG,cAAJ,CAAmBL,OAAnB,CAD1C;AFQF,AENE,IFMItC,EENE4C,QAAQF,CFMC,CACf,EEPkBG,CFMH,EAEf,GAFe,EAGf,GAHe,CENf,CFUA,GAJe,EAKf,GALe,EAMf,GANe,EAOf,GAPe,EAQf,GARe,EASf,GATe,EAUf,GAVe,EAWf,GAXe,EAYf,GAZe,EAaf,GAbe,EAcf,GAde,EAef,GAfe,EAgBf,GAhBe,EAiBf,GAjBe,EAkBf,GAlBe,EAmBf,GAnBe,EAoBf,GApBe,EAqBf,GArBe,EAsBf,GAtBe,EAuBf,GAvBe,EAwBf,GAxBe,EAyBf,GAzBe,EA0Bf,GA1Be,EA2Bf,GA3Be,EA4Bf,GA5Be,EA6Bf,GA7Be,EA8Bf,GA9Be,EA+Bf,GA/Be,EAgCf,GAhCe,EAiCf,GAjCe,EAkCf,GAlCe,EAmCf,GAnCe,EAoCf,GApCe,EAqCf,GArCe,EAsCf,GAtCe,EAuCf,GAvCe,EAwCf,GAxCe,CAAjB;ADAA,AEFE,ACHA,IHKI7C,EGLE8C,CDGD,IAAIzC,IFEM,AEFF,ACHEqC,CHMf,AEHA,EAAgBrC,CFED,AGLI0C,EHOnB,CEJoB7C,EFEL,EAGf,EEL0BY,CFEX,EAIf,CGTA,EHKe,AEFf,EFOA,AEPkCT,GFEnB,EAMf,AERuC,CAAvC,EFEe,AEF2B,EFS1C,GAPe,EAQf,GARe,EASf,GATe,EAUf,GAVe,EAWf,GAXe,EAYf,GAZe,EAaf,GAbe,EAcf,GAde,EAef,GAfe,EAgBf,GAhBe,EAiBf,GAjBe,EAkBf,GAlBe,EAmBf,GAnBe,EAoBf,GApBe,EAqBf,GArBe,EAsBf,GAtBe,EAuBf,GAvBe,EAwBf,GAxBe,EAyBf,GAzBe,EA0Bf,GA1Be,EA2Bf,GA3Be,EA4Bf,GA5Be,EA6Bf,GA7Be,EA8Bf,GA9Be,EA+Bf,GA/Be,EAgCf,GAhCe,EAiCf,GAjCe,EAkCf,GAlCe,EAmCf,GAnCe,EAoCf,GApCe,EAqCf,GArCe,EAsCf,GAtCe,EAuCf,GAvCe,EAwCf,GAxCe,CAAjB;AC2CA,AC5CI,ID4CEJ,IC5CE2B,KD4CO,SAAT3B,AC5CF,MD4CW,QAAS;AACtB,ADDF,AG9CE,IH8CIA,EG9CE+C,OH8CO,EG9CER,IAAIS,GH8CfhD,MAAS,IG9CE,CAAkB,GH8CX,KG9CP,CAAf;AFgDAC,ADDA,AE3CE,ACHF8C,QF+CM7C,AC5CAC,CCHCwC,GF+CP,CAAW,AC5CA9B,CD4CX,AE/CA,GAAe8B,EDGT,GAAc,ACHpB,CDGE,EAAqB;AD6CvB,ADDA1C,AE3CI0B,ACHJoB,MF+CI5C,EDDED,CG9CC2C,GH8CP,CCCW,ADDA,CAAX,AE3CY5C,CD4CZ,AE/CA,GAAgB4C,EDGEvC,ICHlB,CDGY,CAAYF,IAAI,CAAhB,EAAmBA,IAAI,CAAJ,GAAQ,CAA3B,CAAR;AF4CJ,AE3CG,ACHH,KDCE,CF6CED,AG9CE8C,KDGG,CCHGF,CH8CD,EAAX,IG9CmBG,UAAP,CAAkB,IAAlB,CAAZ;AF2CsB,ACvClBvB,cAAQ1B,MAAMK,KAAN,CAAYF,GD4CfA,CALa,ACvCM,CAAJ,GAAQ,CAApB,EAAuBA,IAAI,CAAJ,GAAQ,CAA/B,CAAR;AD6CF,ADNoB,AEtCnB,ACHH,QF+CQC,UAAUJ,MAAMK,KAAN,ADDTF,CCCqBA,ADNR,CCMJ,EAAeA,IAAI,EAAnB,CAAhB;ADAA,AG9CF,MAAM+C,EH8CE9C,QG9CQ,CAAC,CH8CCJ,AG9CF,EAAI,CAAJ,EAAO,CH8CCK,AG9CR,EAAU,CAAV,EH8CE,AG9CW,CH8CCF,AG9Cd,CH8CE,CG9Cc,CH8CCA,AG9CjB,EAAmB,CAAnB,CH8CqB,CG9CC,CH8CpB,AG9CF,CH8Cd,CG9CuC,CAAzB,CAAhB;AFgDE,AC5CA,ACHF,MAAIgD,EF+CI7C,AC5CAqB,SAAS,ACHFuB,CDIX3C,KD2CmBA,AC3CdC,ECJcI,GF+CKJ,AC3CxB,CAAWkB,ECJf,EF+CuB,CACnBtB,CC5CiB,CAAN,IAAWqB,ED4CdhB,CC5CR,CADa,EAEbF,ED2CA,CAAe,EC3CVC,KAAL,CAAWkB,ED2CKhB,GAAD,CC3CE,CD2CIC,AC3CV,ID2CI,AC3COc,GAAtB,CAFa,EAGblB,KAAKC,KAAL,CAAWkB,MAAM,CAAN,IAAWD,GAAtB,CAHa,EAIblB,KAAKC,KAAL,CAAWkB,MAAM,CAAN,IAAWD,GAAtB,CAJa,CAAf;AD6CiB,ADDjB,AG9CF,MAAM2B,EH8CE9C,KCC0BI,KE/ChBkC,CF+CsBjC,IAArB,ADDIJ,KAAKC,AG9CA2C,KH8CL,CACnB/C,KG/CmC,CAArB,CAAlB,CH+CYK,MAAR,CAAe,UAACC,GAAD,EAAMC,IAAN;ACAA,ADAA,AEtCjBT,KDsCE,EAA0C,CAA1C,IAA+CE,ACrC/CoB,CFqC8Bd,MAAMC,CCAmBC,ACrC/Ce,GFqCO,GCDI,CAArB,ACpCiBT,IAAP,CAAY,EAAZ,CAAR,KAA4BM,QAAQG,OAAOC,OAAP,GAAiBV,IAAjB,CAAsB,EAAtB,CAAR,CAA5B,IAAkE,GADpE;AFsCiB,AG7CnB8B,KH6CI,CG7CAK,CH6C0C,CAA1C,IAA+CjD,GG7CnD,CAAcoC,GAAd,CH6C2D5B,CG7CxC,CAAnB,EAAsB,CAAtB,CH4CuB,CAArB;ACIA,ACtCA,QDsCMC,ACtCFX,KAAKU,EDsCIR,ICtCT,IDsCiBU,CCtCD,EDsCP,ACtCb,CDsCyB,CCtCD;ADsCC,ADAzB,AErCE,ACTJ,QH8CQD,KCA4BF,ACrCzBT,EFqCIE,EErCX,GDqCuCE,GDApBQ,GAAR,CAAY,KCAS,GAAsB,CAAtB,GAA0B,CAAnC;AAAA,ADAA,AEpCvB,ACTJ,KF6Ce,CAAb,GE7CMqC,IH6C4BxC,OAAOL,CG7CvB,CAApB,EAAwB,QH6CY,GAAsB,CAAtB,GAA0B,CAAnC;ACCzB,ADDyB,AEnCvB,ACTF,KH4Ca,CAAb,ECCMS,SAASF,KAAKG,MAAL,CAAY,UAACL,IAAD,EAAOM,KAAP;AAAA,ADA3B,AEnCC,ACTD,QH4CMF,AG5CAuC,KF4CsCrC,IDA7BJ,AG5CAmC,IF4CqC,AE5CjCO,CF4CyB,ADAxBvC,KCAsC,CAA/B,ADAZ,CAAY,IG5CZ,CAAiB,CAAjB,EAAoBoC,EH4CPzC,IAAD,EAAOM,IG5CaiC,CH4CpB,OG5C4BC,QAAR,CAAhC,EAAmDT,KAAnD,EAA0D,CAA1D,EACZc,IADH;AF4C2B,ADAA,AElC5B,ACRC,KF0Ce,EAA8CtC,CE1CvDuC,GF0CS,CAAmD,CDAtBxC,CCA7B,AE1CH,CF0CZ,CE1CA,KH0CoD,CAAR,KAAc,CAA/B;ACC3B,ADD2B,AEjC7B,ACRE,KHyCe,CEjCbf,CFiC2DgB,CCCvDC,AE1CFuC,GHyCW,AEjCR7B,CFiC2D,EAAnD,AGzCL,CHyCV,AGzCA,GDQE,CDkCehB,AClCF,GAAb,EDkCoBG,IClCE,CAAC,CDkCR,AClCnB,CDkC+B,CClCD,SDkCEL,IAAD,EAAOM,KAAP;AAAA,ADA7B,AEjCA,ACRA,QHyCME,AGzCFwC,GDQGzD,EDiCuCe,CEzCpC,CAAV,IHyCiBJ,AEjCF,EDiCuC,CAAR,EDAxBG,AEjCtB,GDiC4D,CAA/B,EDAZ,CAAY,UAACL,IAAD,EAAOM,KAAP;ACAA,ADAA,AEhC9B,KDgCkB,EAA8CC,IAA9C,CAAmD,CDAtBD,CCA7B,CAAjB,MDAsD,CAAR,KAAc,CAA/B;AAAA,AGvC7B,KHuCiB,EAA8CC,IAA9C,CAAmD,EAAnD,CAAjB;ACEAhB,AChCF,ACRE,SDQK,ACRA,GFyCHJ,CEzCO8D,CDQX,KCRiB,CAAf,CF0CIxC,CE1CcwC,MAAM,CAAxB,CF0CahE,CE1CcgE,OF0CN7C,AE1Ca,CAAlC,EAAqC,GF0CxB,CAAT,EAA0B,EAA1B,IAAgC,CAAhC,GAAoCK,SAASvB,UAAUsB,QAAV,CAAT,EAA8B,EAA9B,CADtC,CADF;AAhBoB,ADgBpBjB,AE/BH,ACRK,CD3BN,UC2BW,CHwCLJ,GGxCS+D,MHyCPzC,AGzCa,CAAf,EAAkByC,MHyCPjE,AGzCa8C,KAAxB,EAA+BmB,CHyCZ9C,MAAR,AGzC2B,CHyCpC,AGzCF,EHyC4B,AGzCa,EHyCvC,IAAgC,CAAhC,GAAoCK,SAASvB,UAAUsB,QAAV,CAAT,EAA8B,EAA9B,CADtC,CADF;AAhBoB,AGtBhB,YAAMhB,IAAI,CAACyD,MAAMlB,KAAN,GAAcmB,GAAf,IAAsB,CAAhC;AF2BN,AClBFvC,ACRQ,OF0BD,AClBAC,IDkBIpB,CE1BG2D,EDQd,CDkBe,CAAb,AE1BgB,CDQD,ACRER,CF0BDnD,IAAIH,EE1BIG,CAAP,GF0BSS,CE1BG,CAAZ,GAAgB0C,CF0BjC,EAAkCnD,IE1BMA,CF0BD,EAAvC,CE1B4C,CF0BD,AE1BV,IAAgB,CAAhC,GAAoCmD,OAAOnD,IAAI,CAAX,IAAgB,CAArD,IAA0D,CAApE;AF0BqC,ADA3C,AEjBAJ,ACRM,OHyBD,GCAII,CAAkC,ADAlCA,CGzBG4D,GHyBC,CAAb,AGzBgBN,EHyBAtD,EGzBI0D,EHyBA7D,CGzBJ,CAAV,IHyBoBY,MAA1B,EAAkCT,KAAK,EAAvC,EAA2C;ACe1C,ADf0C,AElB5B,CAAjB,SFkBWA,CAAkC;AAe1C,AGtCKmD,eAAOnD,CAAP,IAAY2D,CAAZ;AFwCN,AEvCMR,SFuCCpD,KAAKmB,CEvCClB,IAAI,CAAX,GFuCC,CAAe,AEvCA2D,CFuCf,AEvCD,EFuCmB5D,KAAKU,MAAL,GAAc,CAAhC,CAAP;AACD,ADDC,AGtCM0C,CFgBR,QDsBSpD,KAAKmB,CGtCClB,IAAI,CAAX,GHsCC,CAAe,AGtCA2D,CHsCf,AGtCD,EHsCmB5D,KAAKU,MAAL,GAAc,CAAhC,CAAP;AACD,CAvBD;ACyBAU,AEvCQmC,OFuCDlC,KEvCKsC,EFuCZ,CEvCQ,EFuCS,EEvCEC,KAAKC,MAAMC,SAAN,GAAkB,CAAlB,GAAsBD,CAA3B,CAAX;AFwCNhE,ADDFuB,AGtCO,OHsCAC,OAAP,GAAiB;ACAA,ADCfxB,AGtCG,CFqCL;ADAiB,CAAjB;AGnCI,SAAK,IAAII,KAAI,CAAb,EAAgBA,KAAIuC,KAApB,EAA2BvC,MAAK,CAAhC,EAAmC;AACjCsD,UAAItD,EAAJ,KAAU,CAAV;AACA,UAAM4D,KAAIN,IAAItD,EAAJ,CAAV;;AAEA,UAAI4D,KAAIL,GAAR,EAAa;AACXA,cAAMK,EAAN;AACD;AACD,UAAIA,KAAIJ,GAAR,EAAa;AACXA,cAAMI,EAAN;AACD;AACF;;AAED;AACA,QAAME,QAAQP,MAAM,CAACC,MAAMD,GAAP,IAAc,CAAlC;AACA,QAAMQ,MAAM,EAAZ;;AAEA,SAAK,IAAIL,OAAM,CAAf,EAAkBA,OAAMnB,KAAxB,EAA+BmB,QAAO,CAAtC,EAAyC;AACvC,UAAIM,UAAU,CAAd;AACA,WAAK,IAAIP,OAAM,CAAf,EAAkBA,OAAM,CAAxB,EAA2BA,QAAO,CAAlC,EAAqC;AACnC,YAAIN,OAAO,CAACM,OAAMlB,KAAN,GAAcmB,IAAf,IAAsB,CAA7B,IAAkCI,KAAtC,EAA6C;AAC3CE,qBAAW,CAAX;AACD;AACF;AACDD,UAAIjE,IAAJ,CAASkE,UAAU,CAAnB;AACD;;AAED;AACA,QAAIC,OAAOF,IAAI,CAAJ,CAAX;AACA,QAAIG,QAAQ,CAAZ;AACA,QAAMrE,QAAQ,EAAd;;AAEA,SAAK,IAAI6D,QAAM,CAAf,EAAkBA,QAAMnB,KAAxB,EAA+BmB,SAAO,CAAtC,EAAyC;AACvC,UAAIK,IAAIL,KAAJ,MAAaO,IAAjB,EAAuB;AACrBC,iBAAS,CAAT;AACD,OAFD,MAEO;AACLrE,cAAMC,IAAN,CAAWoE,KAAX;AACAA,gBAAQ,CAAR;AACAD,eAAOF,IAAIL,KAAJ,CAAP;AACD;AACF;;AAED;;AAEA;AACA,WAAO3B,iBAAiBG,QAAQiC,OAAzB,EAAkCvE,MAAlC,CAAyCC,KAAzC,CAAP;AACD;AACD,SAAO,KAAP;AACD,CA1FD;;AA4FA,IAAI,OAAOuB,OAAP,KAAmB,WAAvB,EAAoC;AAClC,MAAI,OAAOD,MAAP,KAAkB,WAAlB,IAAiCA,OAAOC,OAA5C,EAAqD;AACnDA,cAAUY,cAAV;AACAb,WAAOC,OAAP,GAAiBY,cAAjB;AACD;AACDZ,UAAQY,cAAR,GAAyBA,cAAzB;AACD,CAND,MAMO;AACLoC,OAAKpC,cAAL,GAAsBA,cAAtB;AACD","file":"javascript-barcode-reader.map","sourceRoot":"..\\src","sourcesContent":["const BAR_SET = {\r\n '10001': '1',\r\n '01001': '2',\r\n '11000': '3',\r\n '00101': '4',\r\n '10100': '5',\r\n '01100': '6',\r\n '00011': '7',\r\n '10010': '8',\r\n '01010': '9',\r\n '00110': '10',\r\n}\r\n\r\nconst GROUP_SET = {\r\n '01000': '0',\r\n '00100': '10',\r\n '00010': '20',\r\n '10000': '30',\r\n}\r\n\r\nconst CHAR_SET = [\r\n '1',\r\n '2',\r\n '3',\r\n '4',\r\n '5',\r\n '6',\r\n '7',\r\n '8',\r\n '9',\r\n '0',\r\n 'A',\r\n 'B',\r\n 'C',\r\n 'D',\r\n 'E',\r\n 'F',\r\n 'G',\r\n 'H',\r\n 'I',\r\n 'J',\r\n 'K',\r\n 'L',\r\n 'M',\r\n 'N',\r\n 'O',\r\n 'P',\r\n 'Q',\r\n 'R',\r\n 'S',\r\n 'T',\r\n 'U',\r\n 'V',\r\n 'W',\r\n 'X',\r\n 'Y',\r\n 'Z',\r\n '-',\r\n '.',\r\n '␣',\r\n '*',\r\n]\r\n\r\nconst decode = lines => {\r\n // manualy push last white space\r\n lines.push(3)\r\n let code = ''\r\n\r\n for (let i = 1; i < lines.length; i += 10) {\r\n const segment = lines.slice(i, i + 10)\r\n\r\n const barThreshold = Math.round(\r\n segment.reduce((pre, item) => pre + item, 0) / segment.length\r\n )\r\n\r\n const noob = segment.map(item => (item > barThreshold ? 1 : 0))\r\n const barSeg = noob.filter((item, index) => index % 2 === 0).join('')\r\n const whiteSeg = noob.filter((item, index) => index % 2 !== 0).join('')\r\n\r\n code +=\r\n CHAR_SET[\r\n parseInt(BAR_SET[barSeg], 10) - 1 + parseInt(GROUP_SET[whiteSeg], 10)\r\n ]\r\n }\r\n\r\n return code.substring(1, code.length - 1)\r\n}\r\n\r\nmodule.exports = {\r\n decode,\r\n}\r\n","const BAR_SET = {\r\n '10001': '1',\r\n '01001': '2',\r\n '11000': '3',\r\n '00101': '4',\r\n '10100': '5',\r\n '01100': '6',\r\n '00011': '7',\r\n '10010': '8',\r\n '01010': '9',\r\n '00110': '10',\r\n}\r\n\r\nconst GROUP_SET = {\r\n '01000': '0',\r\n '00100': '10',\r\n '00010': '20',\r\n '10000': '30',\r\n}\r\n\r\nconst CHAR_SET = [\r\n '1',\r\n '2',\r\n '3',\r\n '4',\r\n '5',\r\n '6',\r\n '7',\r\n '8',\r\n '9',\r\n '0',\r\n 'A',\r\n 'B',\r\n 'C',\r\n 'D',\r\n 'E',\r\n 'F',\r\n 'G',\r\n 'H',\r\n 'I',\r\n 'J',\r\n 'K',\r\n 'L',\r\n 'M',\r\n 'N',\r\n 'O',\r\n 'P',\r\n 'Q',\r\n 'R',\r\n 'S',\r\n 'T',\r\n 'U',\r\n 'V',\r\n 'W',\r\n 'X',\r\n 'Y',\r\n 'Z',\r\n '-',\r\n '.',\r\n '␣',\r\n '*',\r\n]\r\n\r\nconst decode = lines => {\r\n // manualy push last white space\r\n lines.push(3)\r\n let code = ''\r\n\r\n for (let i = 1; i < lines.length; i += 10) {\r\n const segment = lines.slice(i, i + 10)\r\n\r\n const barThreshold = Math.round(\r\n segment.reduce((pre, item) => pre + item, 0) / segment.length\r\n )\r\n\r\n const noob = segment.map(item => (item > barThreshold ? 1 : 0))\r\n const barSeg = noob.filter((item, index) => index % 2 === 0).join('')\r\n const whiteSeg = noob.filter((item, index) => index % 2 !== 0).join('')\r\n\r\n code +=\r\n CHAR_SET[\r\n parseInt(BAR_SET[barSeg], 10) - 1 + parseInt(GROUP_SET[whiteSeg], 10)\r\n ]\r\n }\r\n\r\n return code.substring(1, code.length - 1)\r\n}\r\n\r\nmodule.exports = {\r\n decode,\r\n}\r\n","const UPC_SET = {\r\n '3211': '0',\r\n '2221': '1',\r\n '2122': '2',\r\n '1411': '3',\r\n '1132': '4',\r\n '1231': '5',\r\n '1114': '6',\r\n '1312': '7',\r\n '1213': '8',\r\n '3112': '9',\r\n}\r\n\r\nconst decode = lines => {\r\n let code = ''\r\n // start indicator/reference lines\r\n const bar = ~~((lines[1] + lines[2] + lines[3]) / 3) //eslint-disable-line\r\n\r\n for (let i = 1; i < lines.length; i += 1) {\r\n let group\r\n\r\n if (code.length < 6) {\r\n group = lines.slice(i * 4, i * 4 + 4)\r\n } else {\r\n group = lines.slice(i * 4 + 5, i * 4 + 9)\r\n }\r\n\r\n const digits = [\r\n Math.round(group[0] / bar),\r\n Math.round(group[1] / bar),\r\n Math.round(group[2] / bar),\r\n Math.round(group[3] / bar),\r\n ]\r\n\r\n code +=\r\n UPC_SET[digits.join('')] || UPC_SET[digits.reverse().join('')] || 'X'\r\n\r\n if (code.length === 12) {\r\n return code\r\n // eslint-disable-next-line\r\n break\r\n }\r\n }\r\n if (code.indexOf('X') === -1) {\r\n return code || false\r\n }\r\n\r\n return false\r\n}\r\n\r\nmodule.exports = {\r\n decode,\r\n}\r\n","const DecoderCode93 = require('./code-93')\r\nconst DecoderCode39 = require('./code-39')\r\nconst DecoderEAN13 = require('./ean-13')\r\n\r\nconst BARCODE_DECODERS = {\r\n 'code-93': DecoderCode93,\r\n 'code-39': DecoderCode39,\r\n 'ean-13': DecoderEAN13,\r\n}\r\n\r\nconst barcodeDecoder = (imgOrId, options) => {\r\n const doc = document\r\n const img =\r\n typeof imgOrId === 'object' ? imgOrId : doc.getElementById(imgOrId)\r\n const width = img.naturalWidth\r\n const height = img.naturalHeight\r\n\r\n const canvas = doc.createElement('canvas')\r\n canvas.width = width\r\n canvas.height = height\r\n const ctx = canvas.getContext('2d')\r\n\r\n // check points for barcode location\r\n const spoints = [1, 9, 2, 8, 3, 7, 4, 6, 5]\r\n let numLines = spoints.length\r\n const slineStep = height / (numLines + 1)\r\n\r\n ctx.drawImage(img, 0, 0)\r\n\r\n // eslint-disable-next-line\r\n while ((numLines -= 1)) {\r\n // create section of height 2\r\n const pxLine = ctx.getImageData(0, slineStep * spoints[numLines], width, 2)\r\n .data\r\n const sum = []\r\n let min = 0\r\n let max = 0\r\n\r\n // grey scale section and sum of columns pixels in section\r\n for (let row = 0; row < 2; row += 1) {\r\n for (let col = 0; col < width; col += 1) {\r\n const i = (row * width + col) * 4\r\n const g = (pxLine[i] * 3 + pxLine[i + 1] * 4 + pxLine[i + 2] * 2) / 9\r\n const s = sum[col]\r\n\r\n pxLine[i] = g\r\n pxLine[i + 1] = g\r\n pxLine[i + 2] = g\r\n\r\n sum[col] = g + (s === undefined ? 0 : s)\r\n }\r\n }\r\n\r\n for (let i = 0; i < width; i += 1) {\r\n sum[i] /= 2\r\n const s = sum[i]\r\n\r\n if (s < min) {\r\n min = s\r\n }\r\n if (s > max) {\r\n max = s\r\n }\r\n }\r\n\r\n // matches columns in two rows\r\n const pivot = min + (max - min) / 2\r\n const bmp = []\r\n\r\n for (let col = 0; col < width; col += 1) {\r\n let matches = 0\r\n for (let row = 0; row < 2; row += 1) {\r\n if (pxLine[(row * width + col) * 4] > pivot) {\r\n matches += 1\r\n }\r\n }\r\n bmp.push(matches > 1)\r\n }\r\n\r\n // matches width of barcode lines\r\n let curr = bmp[0]\r\n let count = 1\r\n const lines = []\r\n\r\n for (let col = 0; col < width; col += 1) {\r\n if (bmp[col] === curr) {\r\n count += 1\r\n } else {\r\n lines.push(count)\r\n count = 1\r\n curr = bmp[col]\r\n }\r\n }\r\n\r\n // TODO: If not found in first step, continue searching until while loop\r\n\r\n // Run the decoder\r\n return BARCODE_DECODERS[options.barcode].decode(lines)\r\n }\r\n return false\r\n}\r\n\r\nif (typeof exports !== 'undefined') {\r\n if (typeof module !== 'undefined' && module.exports) {\r\n exports = barcodeDecoder\r\n module.exports = barcodeDecoder\r\n }\r\n exports.barcodeDecoder = barcodeDecoder\r\n} else {\r\n root.barcodeDecoder = barcodeDecoder\r\n}\r\n"]}