易语言实地培训长期招生 QQ1615457736

乐易论坛

 找回密码
 立即注册

微信登录

微信扫码,快速开始

QQ登录

用QQ账号登陆

导航
导航
培训
培训
产品
产品
易歪歪客服聊天助手——永久免费程序员熬夜必备神器阿里云服务器最高¥1888云产品通用代金券我要租广告
易歪歪客服聊天助手——永久免费全新E3,E5机器远程出租阿里云服务器低至10元/月我要租广告
易歪歪客服聊天助手——永久免费阿里云虚拟机主机 低至350元/1年 最高2000云产品通用代金券我要租广告
TQApiEc---专为PCQQ/TIM 开发的API接口模块,让你直接调用内部功能TQApiEc---专为PCQQ/TIM 开发的API接口模块,让你直接调用内部功能TQApiEc---专为PCQQ/TIM 开发的API接口模块,让你直接调用内部功能TQApiEc---专为PCQQ/TIM 开发的API接口模块,让你直接调用内部功能
WxApiEc-专为PCWx开发的API接口模块,让你快速调用内部功能WxApiEc-专为PCWx开发的API接口模块,让你快速调用内部功能WxApiEc-专为PCWx开发的API接口模块,让你快速调用内部功能WxApiEc-专为PCWx开发的API接口模块,让你快速调用内部功能
查看: 20339|回复: 29
收起左侧

[Js分享] 分享一个生成二维码的Js

[复制链接]
  • TA的每日心情
    难过
    昨天 00:02
  • 签到天数: 871 天

    [LV.10]以坛为家III

    发表于 2017-9-1 21:30:32 | 显示全部楼层 |阅读模式

    乐易编程网免费注册!抓住机会哦!

    您需要 登录 才可以下载或查看,没有帐号?立即注册

    x
    效果图( H( k' M9 M$ F9 Z8 U: K
    * s, j& \/ K" i" {; i
    QQ截图20170901212930.jpg 4 m" Y' Y6 s: ~' d4 D0 y& {8 C

    1. 6 v  Y1 {% C+ k3 ~9 r. Z
    2. var qrcode = function() {/ m6 z* G7 X. f4 G% g2 m
    3.     var qrcode = function(typeNumber, errorCorrectLevel) {/ e3 N% [8 U8 H! U6 Z  i# a2 v
    4.         var PAD0 = 0xEC;
      ) m, Q" i/ D+ Z# C1 H
    5.         var PAD1 = 0x11;
      - X$ g9 E1 X7 O4 S. X: V. j* R$ `
    6.         var _typeNumber = typeNumber;
      % j& {& x+ u7 Z$ b$ k
    7.         var _errorCorrectLevel = QRErrorCorrectLevel[errorCorrectLevel];, G, w- z# _# p3 ~; c& N
    8.         var _modules = null ;; ~, t  n1 Z' X; o( z5 N
    9.         var _moduleCount = 0;
      4 X. R- b1 z/ w2 |' k
    10.         var _dataCache = null ;9 s1 U3 h' \6 [' u% C* `
    11.         var _dataList = new Array();& m( V! Y0 o3 w
    12.         var _this = {};  S/ }6 \) X0 M+ n2 m3 J8 |
    13.         var makeImpl = function(test, maskPattern) {
      0 a% @3 U3 k! y1 [0 C4 Y
    14.             _moduleCount = _typeNumber * 4 + 17;* @' Z& I) ?* B9 m6 o' X
    15.             _modules = function(moduleCount) {
      & z1 M9 s5 z/ r/ y
    16.                 var modules = new Array(moduleCount);$ Q2 K; M9 U  B# P# ?
    17.                 for (var row = 0; row < moduleCount; row += 1) {
      3 ?5 W# Q3 L- ^
    18.                     modules[row] = new Array(moduleCount);! H, }; k) ~* v7 n0 s) {0 o
    19.                     for (var col = 0; col < moduleCount; col += 1) {
      & S) R* w2 Y  k  b4 j' ]& p% H+ C
    20.                         modules[row][col] = null ;/ n# J, d5 g+ c
    21.                     }
      3 s; u* ?/ L. r; d  x
    22.                 }: T- \" d# s) q* g: i! d3 M1 @$ `
    23.                 return modules;6 e5 N/ \; }1 g: u( E- M" f
    24.             }(_moduleCount);
      * t( m3 S2 F5 D& A9 L
    25.             setupPositionProbePattern(0, 0);
      ' w$ x# x* o+ u/ E; |, l
    26.             setupPositionProbePattern(_moduleCount - 7, 0);
      ; {1 ], ?4 B- g( v. {4 M# ?: J+ P
    27.             setupPositionProbePattern(0, _moduleCount - 7);; A2 z: P$ D& \" @" K
    28.             setupPositionAdjustPattern();3 l. m3 a6 w" F, v! y
    29.             setupTimingPattern();3 O( p2 Z: F9 I5 |: I% O
    30.             setupTypeInfo(test, maskPattern);, x  W. p+ t  G8 a
    31.             if (_typeNumber >= 7) {5 H( r& A) [5 y8 z, O: E. Y
    32.                 setupTypeNumber(test);
      & B4 j2 m3 r. U- c
    33.             }. l5 u2 x8 a% c1 B  z' A: d" Z3 C
    34.             if (_dataCache == null ) {* A8 O" L. [: L! i5 W
    35.                 _dataCache = createData(_typeNumber, _errorCorrectLevel, _dataList);" D3 z+ O" q" ]5 k) j6 ^
    36.             }
      * u; a" q2 _* I6 B& Z! m7 @
    37.             mapData(_dataCache, maskPattern);
      * D, m% {0 z5 J  F
    38.         }. v. Y# g  d  S/ K
    39.         ;
      9 w* b7 X! R+ |* Y, A
    40.         var setupPositionProbePattern = function(row, col) {. n& M  S7 b: Q, e; u  t3 x4 ]' X# \1 C
    41.             for (var r = -1; r <= 7; r += 1) {& n8 G5 n8 o5 _2 {6 [# Y- C; `
    42.                 if (row + r <= -1 || _moduleCount <= row + r)& j( I- R  I  s' k4 f; x
    43.                     continue;for (var c = -1; c <= 7; c += 1) {! U" i! {1 i: q$ y! t8 d! {) V
    44.                     if (col + c <= -1 || _moduleCount <= col + c)
        l7 J6 R) |/ z0 k2 I) Y: Y
    45.                         continue;if ((0 <= r && r <= 6 && (c == 0 || c == 6)) || (0 <= c && c <= 6 && (r == 0 || r == 6)) || (2 <= r && r <= 4 && 2 <= c && c <= 4)) {; U* ?& r/ \6 I/ [+ V! w% r7 n# B
    46.                         _modules[row + r][col + c] = true;
      $ P1 L- {  b! s0 p
    47.                     } else {
      ! s: I$ N* o7 ]
    48.                         _modules[row + r][col + c] = false;- }+ S9 {1 }3 U. n$ y; ]6 @# J
    49.                     }7 H; Z) X8 v: ^
    50.                 }
        s+ A3 k1 h8 T4 ~1 y6 ]
    51.             }5 ?+ y* w! z. A6 i! N% e
    52.         }
      8 \% P& h6 P) V* A1 m
    53.         ;- V% t: U1 i( _) x+ S  r4 p
    54.         var getBestMaskPattern = function() {
      6 j+ I9 T# e; g9 p" e
    55.             var minLostPoint = 0;
      + u( Y# \0 j; J' L4 r$ l7 s
    56.             var pattern = 0;
      , U: `" o7 I  c7 B4 F3 C& A/ [
    57.             for (var i = 0; i < 8; i += 1) {3 G! g- y& m$ w% c$ y
    58.                 makeImpl(true, i);
      # T# ?* Z6 {% H/ s1 g7 t- s
    59.                 var lostPoint = QRUtil.getLostPoint(_this);
      ) w5 F9 V, {; }2 o5 n
    60.                 if (i == 0 || minLostPoint > lostPoint) {5 w$ a& [8 L; y8 f; a8 K( H
    61.                     minLostPoint = lostPoint;- }; e! X- _$ e+ e
    62.                     pattern = i;
        y) O) W  t# d9 H' t; W/ g! I
    63.                 }( ?! P- n* C' i1 g
    64.             }
      5 i! c  p8 L( x% `- w
    65.             return pattern;' y* G" Z5 I3 l2 D* Y0 z
    66.         }
        ?. B1 d. Q0 U  h. k
    67.         ;) i. Z9 |* e% I# {& v& T
    68.         var setupTimingPattern = function() {7 N. I$ ?0 R2 @. d
    69.             for (var r = 8; r < _moduleCount - 8; r += 1) {/ j' ?8 h7 n% S, x% D% Y- P3 W
    70.                 if (_modules[r][6] != null ) {: _, Q7 Y/ q# i4 t3 a2 N5 x
    71.                     continue;
      3 D' ]1 G! }5 x7 q- ~" K
    72.                 }0 e# y# J4 Z' _$ {  E
    73.                 _modules[r][6] = (r % 2 == 0);
      6 q7 X2 ^4 ]; ?4 t
    74.             }
      0 M$ s% T& ^" F* m0 ]2 c0 S
    75.             for (var c = 8; c < _moduleCount - 8; c += 1) {
      * O( s- Y: K, H- H# ]9 @  ]. R
    76.                 if (_modules[6][c] != null ) {+ ~3 `$ \2 W( F: _- S. n- p. b
    77.                     continue;( Y5 w: q4 n; b
    78.                 }
      . f; f, O( P1 h9 z9 Z5 v* r
    79.                 _modules[6][c] = (c % 2 == 0);) S: z6 S( x2 Q) l2 R- b
    80.             }3 Z3 O; Z$ G: B% B
    81.         }
      / m/ T! A+ ~3 I5 D0 q  a
    82.         ;! _3 s$ X$ h! b3 O2 a  _# d
    83.         var setupPositionAdjustPattern = function() {! h* f/ H) G' ~6 A- ]. P
    84.             var pos = QRUtil.getPatternPosition(_typeNumber);
      1 i% _7 X( \3 Z7 B* L+ N
    85.             for (var i = 0; i < pos.length; i += 1) {( A1 v% J/ Q$ @3 x2 r
    86.                 for (var j = 0; j < pos.length; j += 1) {
      , e- O% V8 s+ I7 |* Z3 Z6 _; ]: {
    87.                     var row = pos[i];& P( H' Q$ s9 i0 }& C5 K
    88.                     var col = pos[j];% y( t+ i% y2 y5 k$ x9 n- }
    89.                     if (_modules[row][col] != null ) {! e+ w" h0 n- _6 f
    90.                         continue;
      - E$ t# S* C: m8 V9 Z5 h) u, M
    91.                     }* v1 ^; m% _8 }; h) |( _
    92.                     for (var r = -2; r <= 2; r += 1) {
      ( Q4 w: f' x- N2 ]6 z6 c  r' i
    93.                         for (var c = -2; c <= 2; c += 1) {
      # ?+ `; k. V! c4 E! R
    94.                             if (r == -2 || r == 2 || c == -2 || c == 2 || (r == 0 && c == 0)) {# n9 x3 N9 T+ m, v
    95.                                 _modules[row + r][col + c] = true;% `8 j$ U7 K( p: R! \
    96.                             } else {  m' [! Z% `1 l# ?0 U% v
    97.                                 _modules[row + r][col + c] = false;
      & @7 h) Y3 t1 O" M% U% L" u) F$ E
    98.                             }
      : _# H& L. e8 M- H
    99.                         }6 W! t* Y- P& T  _5 R, Z. Y
    100.                     }
        l, y" |' Y$ ^$ g
    101.                 }
      2 G4 L( I; }$ F! I3 Y
    102.             }# L( x5 q0 V' ]5 {
    103.         }
      7 E* H/ f/ E0 }( |% q# {
    104.         ;
      9 [) p4 E& w; `5 b5 W
    105.         var setupTypeNumber = function(test) {$ `3 r( r0 D0 ^% H
    106.             var bits = QRUtil.getBCHTypeNumber(_typeNumber);
      3 y8 ^9 B( ]4 M  a. N5 [# y
    107.             for (var i = 0; i < 18; i += 1) {
      4 X  Q3 P8 g" f- J" {* B" J) ]
    108.                 var mod = (!test && ((bits >> i) & 1) == 1);; O4 I0 g4 B) m
    109.                 _modules[Math.floor(i / 3)][i % 3 + _moduleCount - 8 - 3] = mod;5 e) B" p5 c. g8 i, D
    110.             }6 w) P2 Z0 S! H9 u$ Q( `* W$ s
    111.             for (var i = 0; i < 18; i += 1) {
      . z- G4 E9 I( }4 F% v! K
    112.                 var mod = (!test && ((bits >> i) & 1) == 1);
      " p/ I# T, ~- C+ b$ e
    113.                 _modules[i % 3 + _moduleCount - 8 - 3][Math.floor(i / 3)] = mod;
      - i) a, B5 |0 w- U, E* D% W; w
    114.             }
      & V6 O8 ]8 U; z; Y
    115.         }5 U4 F, e. V( `1 T) ~5 `
    116.         ;2 c1 f/ N; A4 ?. j) n
    117.         var setupTypeInfo = function(test, maskPattern) {
      - ]& y- _+ [6 C5 X0 ]
    118.             var data = (_errorCorrectLevel << 3) | maskPattern;
      ' _/ F. v# X7 ^# d
    119.             var bits = QRUtil.getBCHTypeInfo(data);
      3 m$ Q' S0 i2 o4 s$ U
    120.             for (var i = 0; i < 15; i += 1) {
        g5 H6 T7 n2 \9 `
    121.                 var mod = (!test && ((bits >> i) & 1) == 1);2 Y4 w/ e( U( T5 j! Q
    122.                 if (i < 6) {
      ! X( p8 w) ]& L- y2 `! g
    123.                     _modules[i][8] = mod;
      1 e4 A7 R4 i, S. }
    124.                 } else if (i < 8) {
      7 O$ ~4 N) F4 y0 h/ G6 m/ h, R
    125.                     _modules[i + 1][8] = mod;
      3 P" C; Z+ ~2 t0 C7 J" k
    126.                 } else {
      5 b1 V+ S5 g- }7 j2 M
    127.                     _modules[_moduleCount - 15 + i][8] = mod;4 J3 x6 ^# @1 Y1 i
    128.                 }
      ! n5 {7 l4 F$ c, [8 ~
    129.             }
      $ \$ S4 @1 `7 A$ ^8 r7 z6 u8 I
    130.             for (var i = 0; i < 15; i += 1) {7 S7 w. r0 m* I+ K/ }) R
    131.                 var mod = (!test && ((bits >> i) & 1) == 1);5 f0 K3 \$ [% ?, i$ a# z
    132.                 if (i < 8) {9 H6 R6 i0 G0 J; V6 g
    133.                     _modules[8][_moduleCount - i - 1] = mod;
      2 e: U% n2 P2 V* w
    134.                 } else if (i < 9) {
        a! k! p& [+ Y" }* F* ?
    135.                     _modules[8][15 - i - 1 + 1] = mod;. i. I. A( c) R8 E" H, E
    136.                 } else {
      8 V( I$ @' A& Y1 \9 Q
    137.                     _modules[8][15 - i - 1] = mod;: N0 e- b: _3 e9 [- b
    138.                 }
      , C, }- P: Q1 D6 a
    139.             }
      " d1 H8 H# b, ?& ^( ~
    140.             _modules[_moduleCount - 8][8] = (!test);
      2 J* X; \7 ^. d: L/ Y* L
    141.         }# _# R2 i8 k: M% H+ o/ ^. K+ n8 e
    142.         ;& Z0 j) y7 t* O' ]4 Y
    143.         var mapData = function(data, maskPattern) {
      4 u: q% c+ p# {1 n' H  T  ]- ~
    144.             var inc = -1;$ Q; U9 n& F$ D# h. l' Y7 v
    145.             var row = _moduleCount - 1;
      7 `, e* s* p" ~1 a7 j
    146.             var bitIndex = 7;+ W" [) [! K& X+ q
    147.             var byteIndex = 0;0 [5 S# ~0 v' D. R2 Z
    148.             var maskFunc = QRUtil.getMaskFunction(maskPattern);' E0 k1 P5 j; W  _' }
    149.             for (var col = _moduleCount - 1; col > 0; col -= 2) {0 Q" H  |5 F& f$ ]- h1 \
    150.                 if (col == 6); J1 D( _% @8 x
    151.                     col -= 1;
      7 j' E5 I3 j- r9 A( D6 P
    152.                 while (true) {! P' X  p9 ?% g) W( S. y  _
    153.                     for (var c = 0; c < 2; c += 1) {/ `/ r% L, `) o6 h! Z. x* |1 `
    154.                         if (_modules[row][col - c] == null ) {8 E* N( G; j2 c; L
    155.                             var dark = false;
      # Y& ~0 ~; `) X; ~1 p: {/ C
    156.                             if (byteIndex < data.length) {
      - ~1 V* N5 l2 ^
    157.                                 dark = (((data[byteIndex] >>> bitIndex) & 1) == 1);3 ]# ~. r( q* G" |
    158.                             }0 D. j0 {! |7 O
    159.                             var mask = maskFunc(row, col - c);
      ; w; O: ~- n) L' X' \
    160.                             if (mask) {
      3 k3 y' n3 g! Q0 u( U3 I3 A
    161.                                 dark = !dark;  F  @+ {; H: [1 C7 ?) v, G
    162.                             }
      & l1 ]; I6 A7 W% c* g
    163.                             _modules[row][col - c] = dark;
      7 }: C) x* V2 w0 t% x
    164.                             bitIndex -= 1;
      : U" S, ~; E5 A8 j
    165.                             if (bitIndex == -1) {) `9 v$ x: Y0 G$ @% h' u
    166.                                 byteIndex += 1;/ P: M$ y8 z: C+ J. n) X! U
    167.                                 bitIndex = 7;
      & E( f. T, m) x* @8 f
    168.                             }& r, t+ V+ n# w6 X
    169.                         }6 N1 x  U8 `! \1 w
    170.                     }& D) F8 i2 C( i! c3 V8 o% r8 G
    171.                     row += inc;
      4 u- x1 A) g. _- q+ x
    172.                     if (row < 0 || _moduleCount <= row) {2 E9 X# w  Y$ l; o7 z4 C8 L  h# f
    173.                         row -= inc;3 b. h2 Z$ M& P; X; X5 @: W- d4 Q# s
    174.                         inc = -inc;$ j; l1 ~; Z" O; _  V/ g
    175.                         break;+ u/ J8 U& `& R. N
    176.                     }
      ' v/ d3 ~6 U/ f! U% K) Q+ O5 c
    177.                 }. p% G& N) R+ {
    178.             }! a; i( ?- z3 K5 g7 T  I7 }5 a
    179.         }
      # |$ `; l1 x: ^! y! g- Q+ Y
    180.         ;
      , r' q+ e; f. @0 U* D
    181.         var createBytes = function(buffer, rsBlocks) {
      ( @5 O2 Z% @" i, F0 S7 @- U
    182.             var offset = 0;
      , }: K9 r; O  i2 A
    183.             var maxDcCount = 0;
      - s+ U4 A+ l) N1 a1 w
    184.             var maxEcCount = 0;
      5 d0 v3 o% a) \- Z0 N4 z; q' f1 \: R' O) g
    185.             var dcdata = new Array(rsBlocks.length);5 I+ d; G. g& q) M& x3 @
    186.             var ecdata = new Array(rsBlocks.length);& D8 R! g) O) c% q! l: v
    187.             for (var r = 0; r < rsBlocks.length; r += 1) {4 ]. f1 J  e# O: U1 h4 I
    188.                 var dcCount = rsBlocks[r].dataCount;2 X, y* ~0 b6 V# m  F- h& X
    189.                 var ecCount = rsBlocks[r].totalCount - dcCount;
      1 p2 ^, d+ |/ a- R! b1 q' X
    190.                 maxDcCount = Math.max(maxDcCount, dcCount);
      7 H* I" b4 c# j6 r+ Q
    191.                 maxEcCount = Math.max(maxEcCount, ecCount);( X' U( I( P5 m. y, o6 P
    192.                 dcdata[r] = new Array(dcCount);2 u" x. d$ j8 o' [0 {2 z+ p
    193.                 for (var i = 0; i < dcdata[r].length; i += 1) {% K; }& E! p" a' N
    194.                     dcdata[r][i] = 0xff & buffer.getBuffer()[i + offset];
      8 {. `6 a8 X: L$ B6 A! u  Z! K
    195.                 }
      & [$ @6 i9 [# x. d# d7 |$ `( L# x! B
    196.                 offset += dcCount;) Z; Y3 G) S6 V3 Z3 a. \8 b6 w% m
    197.                 var rsPoly = QRUtil.getErrorCorrectPolynomial(ecCount);
      7 X, D2 ~& U% C# c
    198.                 var rawPoly = qrPolynomial(dcdata[r], rsPoly.getLength() - 1);
      / O. {: c5 ]/ g( u8 v7 y5 r
    199.                 var modPoly = rawPoly.mod(rsPoly);
      : \0 H3 B& @) `$ e' A5 f. V6 Q% [
    200.                 ecdata[r] = new Array(rsPoly.getLength() - 1);* X4 Z, I1 u4 M  q* `9 C
    201.                 for (var i = 0; i < ecdata[r].length; i += 1) {
      3 e3 t) v  d! h3 H2 H
    202.                     var modIndex = i + modPoly.getLength() - ecdata[r].length;& Z+ _# q* H7 y
    203.                     ecdata[r][i] = (modIndex >= 0) ? modPoly.getAt(modIndex) : 0;
      4 T; s. q5 q( |" r
    204.                 }8 a/ B; J  f1 R: u+ O. X' K( @
    205.             }
      1 F: J+ G* V3 A; `
    206.             var totalCodeCount = 0;' j8 ?( j' U# C; x( D" P
    207.             for (var i = 0; i < rsBlocks.length; i += 1) {$ q9 o: W, z7 S! T, W0 I* R4 }
    208.                 totalCodeCount += rsBlocks[i].totalCount;
      3 s1 l7 K- v3 ?: V" u
    209.             }$ J  G) R2 N* ?( X5 P8 s( ~
    210.             var data = new Array(totalCodeCount);3 {4 {) [3 f8 ?' N
    211.             var index = 0;% F7 b" h5 D3 o$ ?$ F/ W, z5 H
    212.             for (var i = 0; i < maxDcCount; i += 1) {
      : w9 D9 w7 {& _, g2 R1 |0 M
    213.                 for (var r = 0; r < rsBlocks.length; r += 1) {
      + M' G5 l  g, Z7 X4 k
    214.                     if (i < dcdata[r].length) {7 p3 Q) v3 v  O" E2 @
    215.                         data[index] = dcdata[r][i];
      1 J- \7 c8 g; `7 B5 j
    216.                         index += 1;
        Z* s0 b8 T2 s$ o! g
    217.                     }
      $ z! K" M9 c6 [
    218.                 }5 T- e/ _: Q' k8 |
    219.             }
      - W3 X6 r& v0 {0 `0 ], R
    220.             for (var i = 0; i < maxEcCount; i += 1) {/ S$ G6 P) t; U# X+ E0 d! O" v4 l
    221.                 for (var r = 0; r < rsBlocks.length; r += 1) {
        D# |: x3 x. @- Y* T
    222.                     if (i < ecdata[r].length) {
      % z$ o0 v4 }9 F0 l  e
    223.                         data[index] = ecdata[r][i];
      6 @/ e8 F% R) i& z
    224.                         index += 1;( j! Z8 E7 i0 }
    225.                     }( v2 D4 n6 F  S8 o& O# D
    226.                 }
      1 `  H3 t( [( D# j, f- P. f0 l
    227.             }' w5 x: m, C) w- y- q  g8 g
    228.             return data;5 N4 H( I/ z0 K9 ]: D
    229.         }, V/ s# ^. a" \$ Q8 Q+ }
    230.         ;
      ' o% A; T+ J3 e7 ]% u  D( N) q; q
    231.         var createData = function(typeNumber, errorCorrectLevel, dataList) {
      2 C$ i: g' s! J! ]
    232.             var rsBlocks = QRRSBlock.getRSBlocks(typeNumber, errorCorrectLevel);
      , U6 G  S' c8 D2 q  M
    233.             var buffer = qrBitBuffer();
      6 Z  t7 B9 H: e6 e. B0 D
    234.             for (var i = 0; i < dataList.length; i += 1) {# X# k: P1 |9 ^
    235.                 var data = dataList[i];+ g' w6 i1 U$ M7 W  ?) I; _" {
    236.                 buffer.put(data.getMode(), 4);7 o1 l: m2 Q. f6 T% _
    237.                 buffer.put(data.getLength(), QRUtil.getLengthInBits(data.getMode(), typeNumber));6 }3 }8 S7 b+ @1 D; m' b8 B% \
    238.                 data.write(buffer);
      # G$ E, D( r4 V9 b5 D. C
    239.             }) s1 \% a2 {: S  [" A1 ~
    240.             var totalDataCount = 0;) X. S3 {4 L  ~4 k
    241.             for (var i = 0; i < rsBlocks.length; i += 1) {' u3 J' z& I& {9 E
    242.                 totalDataCount += rsBlocks[i].dataCount;. D  A! x, E: T
    243.             }
      , s  m! W0 A# Q( s2 h  t
    244.             if (buffer.getLengthInBits() > totalDataCount * 8) {" b6 P: @3 V# T/ o+ G
    245.                 throw new Error('code length overflow. ('
      * d3 h6 K% z; V' [7 b
    246.                 + buffer.getLengthInBits()
      , y, J, B# }) v' U3 c
    247.                 + '>' 9 s7 ?, J* F0 T1 v. v" {0 |7 P- d
    248.                 + totalDataCount * 8
      5 _0 ^% h: K8 g& X! n7 {3 D
    249.                 + ')');
        A; ?3 y+ ?3 m; i
    250.             }: M" C8 l& }: T) T
    251.             if (buffer.getLengthInBits() + 4 <= totalDataCount * 8) {
      ( Z7 Y& R6 @4 \& ~8 E( }( P4 Q- a
    252.                 buffer.put(0, 4);+ j) W% @, _5 N& b. ?8 s" K
    253.             }
      0 z$ E8 C2 u; b" v8 K) @. ^4 u
    254.             while (buffer.getLengthInBits() % 8 != 0) {: b- e! h: W' g" V$ `
    255.                 buffer.putBit(false);/ \' }, `" K% y/ y. a
    256.             }3 r: E# I5 B% o2 A+ \# l
    257.             while (true) {
      $ {$ e& K& {0 m: g7 X
    258.                 if (buffer.getLengthInBits() >= totalDataCount * 8) {
      4 R# K. ^* s$ p1 A: m; D+ m
    259.                     break;' U. s% Y8 Q  L( V" ^" w
    260.                 }. Z2 ~, ~3 q, F9 |! ?$ r
    261.                 buffer.put(PAD0, 8);
      $ Q# ]) d+ p5 S6 h9 l3 Q
    262.                 if (buffer.getLengthInBits() >= totalDataCount * 8) {" M; i" E& h8 k
    263.                     break;
      ' t& s& |% Z  a
    264.                 }
      2 k4 K1 `. o  h, W. k9 s/ P. G
    265.                 buffer.put(PAD1, 8);: m/ x$ k6 @: }% g2 ^6 B  y
    266.             }
      ' b( F+ h7 ^/ H' Y, o
    267.             return createBytes(buffer, rsBlocks);
      . y" N; V) P/ a. j0 F* ]
    268.         }* h5 P9 }" |+ _
    269.         ;. X  d7 C) ^+ [5 I, S
    270.         _this.addData = function(data) {
      + d  j$ w0 C% Z% c
    271.             var newData = qr8BitByte(data);8 j' T  ]3 B6 q$ c
    272.             _dataList.push(newData);
      ' ]! r- d% c' M- L1 O' w
    273.             _dataCache = null ;
      3 O( d9 W- h3 q1 k
    274.         }6 Q3 P9 o9 F5 k* w$ O: v& e
    275.         ;3 x' I/ y; P9 D$ A
    276.         _this.isDark = function(row, col) {( p) o3 v5 j; r5 G7 E1 l
    277.             if (row < 0 || _moduleCount <= row || col < 0 || _moduleCount <= col) {
      ( S2 G% E' e2 ^, D
    278.                 throw new Error(row + ',' + col);
      / q) y0 G% _4 n  k0 h/ _
    279.             }  s: @, d3 B9 \+ d+ U0 K9 N% ~
    280.             return _modules[row][col];! A" G; M' F  b  i. t; \
    281.         }
      0 b8 P7 T" B4 Z$ J; x
    282.         ;
      4 U9 c/ b5 j1 r6 c! ]# f2 M! Z$ Q
    283.         _this.getModuleCount = function() {  Z6 ~- y/ O1 T0 O4 N* q
    284.             return _moduleCount;
        b) \' n9 J! R/ y& l- Q: j
    285.         }
      . l% Y1 C4 M5 g
    286.         ;
      $ F2 e' k" ]' ~: N" V! C
    287.         _this.make = function() {! {$ K7 R7 H* X
    288.             makeImpl(false, getBestMaskPattern());+ B9 Z3 b4 S, |! b, O
    289.         }7 T( Q; U% L/ i7 E- f
    290.         ;) f8 R) w; u4 B" l1 Q
    291.         _this.createTableTag = function(cellSize, margin) {3 S, z- L3 H5 n8 P
    292.             cellSize = cellSize || 2;0 `! T2 g" {. G; I# P# D
    293.             margin = (typeof margin == 'undefined') ? cellSize * 4 : margin;# @: b5 ^* _: V9 Z
    294.             var qrHtml = '';5 x6 Q; b& T$ u; @8 y9 `
    295.             qrHtml += '<table style="';
      ' O: R; _7 z1 Y5 l" t5 S* }1 w2 c
    296.             qrHtml += ' border-width: 0px; border-style: none;';! E8 O5 I3 H$ S  o$ P/ Z
    297.             qrHtml += ' border-collapse: collapse;';6 R/ E0 T1 B5 H" n* X7 R% {+ C
    298.             qrHtml += ' padding: 0px; margin: ' + margin + 'px;';
      ; L+ f; T$ S! d
    299.             qrHtml += '">';
      0 S/ \+ K, u; c4 h: x" c
    300.             qrHtml += '<tbody>';
      : R2 a6 L% _0 d# |
    301.             for (var r = 0; r < _this.getModuleCount(); r += 1) {
      * k+ F( i0 A! y% @, ~% p
    302.                 qrHtml += '<tr>';
        o* w. r6 \% o
    303.                 for (var c = 0; c < _this.getModuleCount(); c += 1) {
      - Z/ n8 U* O& E9 e* O
    304.                     qrHtml += '<td style="';. r7 n" L. m  ^1 E* H: C. |
    305.                     qrHtml += ' border-width: 0px; border-style: none;';( ^! j7 C; @! x8 y/ x: Q, O
    306.                     qrHtml += ' border-collapse: collapse;';2 m4 m8 s, b( j1 o3 f6 l
    307.                     qrHtml += ' padding: 0px; margin: 0px;';, G$ `& s3 P8 W( U+ E
    308.                     qrHtml += ' width: ' + cellSize + 'px;';* g' y) t4 }/ `& i+ i9 w  D. v5 h3 ~; a
    309.                     qrHtml += ' height: ' + cellSize + 'px;';
      0 D" c3 U, L8 M% [) u8 x
    310.                     qrHtml += ' background-color: ';
      : B  |1 b# J; `$ Y1 Y
    311.                     qrHtml += _this.isDark(r, c) ? '#000000' : '#ffffff';+ ~. ^7 ^2 f$ i  A5 v
    312.                     qrHtml += ';';6 u2 v: T2 j! C8 Z5 H. f* y( z
    313.                     qrHtml += '"/>';; y  Q2 @7 ?0 s$ w( j/ o
    314.                 }
      " N4 B6 d4 u) N
    315.                 qrHtml += '</tr>';3 A& T7 e; g2 h0 `; u
    316.             }
      - L* g4 u+ Q6 I, ?5 m0 v
    317.             qrHtml += '</tbody>';! P# H0 k, Q/ A8 g; K$ ]4 T. u! X
    318.             qrHtml += '</table>';
      # l$ b7 K. [6 U% B6 W; y
    319.             return qrHtml;( X1 ?! }* K- ~# K: O0 N
    320.         }
      2 d; L: x7 v( Q/ k: j  F) p8 Q3 s- n
    321.         ;
      ) j1 c9 E! f" X& K, b
    322.         _this.createImgTag = function(cellSize, margin) {. w! u1 r/ E% \7 ^4 C% ~. ^# y
    323.             cellSize = cellSize || 2;% s; N* A' X5 s& C: ?4 X
    324.             margin = (typeof margin == 'undefined') ? cellSize * 4 : margin;
      0 e; B$ i. Y7 ^3 E; i3 t
    325.             var size = _this.getModuleCount() * cellSize + margin * 2;
      ; a. ?8 V0 L0 b( O- E: ~
    326.             var min = margin;
      0 ~( `. n( W& A7 e
    327.             var max = size - margin;$ O2 ^, v$ p7 B: [( U# Q
    328.             return createImgTag(size, size, function(x, y) {4 m0 i' d6 n8 @& N% I
    329.                 if (min <= x && x < max && min <= y && y < max) {- ~& H$ _6 I/ o4 ^/ M' O6 K0 G
    330.                     var c = Math.floor((x - min) / cellSize);4 i8 A+ S& I7 C2 E6 x/ `
    331.                     var r = Math.floor((y - min) / cellSize);6 b  f& }. F; {
    332.                     return _this.isDark(r, c) ? 0 : 1;
      & F& X* H# G2 h( k9 z
    333.                 } else {9 y9 Y) w% e+ U) B8 k
    334.                     return 1;) y3 _% A, F+ ~& T! l
    335.                 }2 s  q- V: c! ~. m5 C& a
    336.             });* Y( b% h2 c! k- e+ n
    337.         }, w, f9 j6 r5 D4 ]# r  O
    338.         ;0 b( O; ]. @( u  J
    339.         return _this;' c4 t+ \, z3 j  K0 h) _% ]
    340.     }
      . L3 `$ h( m* N& H: P8 U
    341.     ;
      5 K6 k' ?# H& s4 @
    342.     qrcode.stringToBytes = function(s) {
      6 u  u* u( S( q+ x! I  ]. Y
    343.         var bytes = new Array();
      ) U8 J9 O0 t! l
    344.         for (var i = 0; i < s.length; i += 1) {% M; M2 J5 n. t1 Z
    345.             var c = s.charCodeAt(i);; q8 w6 n  v; T. x- @1 G8 }
    346.             bytes.push(c & 0xff);1 W. {8 M+ \0 v$ a6 p- v+ `. L$ z
    347.         }
      - e! e0 V8 _9 Q. _
    348.         return bytes;
      2 P5 P* C& k% a7 c9 D
    349.     }3 j! o7 J/ x" m
    350.     ;  F& ]) Q- }4 j- g  |, c+ V* j9 m
    351.     qrcode.createStringToBytes = function(unicodeData, numChars) {- |' t) B; y1 ?' v7 i0 @; K0 s; H/ |
    352.         var unicodeMap = function() {  r, j# e6 r5 w- A0 V2 z6 x! S; E
    353.             var bin = base64DecodeInputStream(unicodeData);( D. L: q* [( E& z* f8 q4 Q
    354.             var read = function() {, i" g; p8 I% [2 N* U
    355.                 var b = bin.read();  _5 R: F1 a2 j
    356.                 if (b == -1)( _2 p# V% V  T+ o1 }2 V4 f0 f! x
    357.                     throw new Error();
      " U. r8 a5 c' N: C1 f$ i
    358.                 return b;$ `' e9 U) Z) Y2 q
    359.             }
      % {1 U# R; U9 K0 J$ T7 S* j
    360.             ;- @) a  m3 k2 M5 I" t
    361.             var count = 0;
        ]6 V( o, I: \. ]. @' g$ [. B) K
    362.             var unicodeMap = {};  e3 I( h# i1 ~
    363.             while (true) {7 T6 s5 j$ R5 W5 u7 @. A
    364.                 var b0 = bin.read();2 X, B8 w0 C' Q, C9 K/ i4 x
    365.                 if (b0 == -1)9 V/ q) c. U1 j5 W5 y' R
    366.                     break;/ F- N( h' R/ b: R* h8 c
    367.                 var b1 = read();
      " h4 ]0 z* i5 A: b
    368.                 var b2 = read();- t2 O. T, A& e
    369.                 var b3 = read();5 v$ S1 X' r  _7 v
    370.                 var k = String.fromCharCode((b0 << 8) | b1);2 g1 Q3 r* J. n+ T
    371.                 var v = (b2 << 8) | b3;
      . y1 g. |$ W  n! Q$ \
    372.                 unicodeMap[k] = v;
      5 d6 b% E  Y4 q
    373.                 count += 1;
      2 w6 w  x( n5 g. w; E' V
    374.             }
      * t3 L0 w6 H- _1 F
    375.             if (count != numChars) {
      5 l+ J- l7 p$ P3 D4 K
    376.                 throw new Error(count + ' != ' + numChars);5 ^! y+ p% \5 u8 j9 \3 e& ^+ P7 e
    377.             }
      " C; y/ U3 H9 _$ u; T- l% ?* F
    378.             return unicodeMap;( X! Y. N+ {2 E0 O# O
    379.         }();, |8 U- }: ?' o( q" y* c
    380.         var unknownChar = '?'.charCodeAt(0);1 J! ]. L  b6 y) C# u' V
    381.         return function(s) {' R3 T' t* e2 W1 N  A! ]- |
    382.             var bytes = new Array();
      9 B  I, s8 w! ?. |: X( {' |+ p0 v$ W2 H
    383.             for (var i = 0; i < s.length; i += 1) {
      * m" a5 x6 z* q4 w  J9 x
    384.                 var c = s.charCodeAt(i);6 B5 F' S& \& A* u
    385.                 if (c < 128) {
      % V# z+ Q6 p3 }7 t+ ~1 C4 I1 e; }
    386.                     bytes.push(c);- C# m; L0 c. w8 j1 s
    387.                 } else {, x+ W) Z" ]" i
    388.                     var b = unicodeMap[s.charAt(i)];2 y  T- G5 T. A
    389.                     if (typeof b == 'number') {
      0 P2 \- l: ?" T) k  C5 a! [
    390.                         if ((b & 0xff) == b) {
      . P* q9 n) d: Q, w7 b& u5 @" v) a
    391.                             bytes.push(b);
      # x0 p2 F7 g5 S
    392.                         } else {
      3 U* \: A0 D- o7 R( Z
    393.                             bytes.push(b >>> 8);( i0 j; ~7 w, V" h' X9 |/ y
    394.                             bytes.push(b & 0xff);
      1 G( r7 n5 v6 ?- W- A
    395.                         }# V4 S- [5 A- J- `5 T
    396.                     } else {5 \' N2 ?7 c8 t% Q3 y& r
    397.                         bytes.push(unknownChar);% }( F3 [, A: r" {- n
    398.                     }- |6 J4 I) _0 w5 Z0 O
    399.                 }4 h& D5 R/ E4 B; S. v5 x4 Y
    400.             }
      ) `( u2 H4 N/ v# r3 X
    401.             return bytes;
      2 e5 }/ _7 s  b$ D  s4 [
    402.         }
        l# ]: ^( {1 \( R
    403.         ;
      % \: g: P" g8 ^- E! K" F. l
    404.     }; H. r" i3 A/ D4 i* T( Z# s
    405.     ;
      / M( G, u. u8 ^5 q) z0 ~3 u, m
    406.     var QRMode = {
      4 Q8 m5 e( R! ~# b: y9 D5 c; s
    407.         MODE_NUMBER: 1 << 0,
      ) m3 M2 g3 n- J/ l
    408.         MODE_ALPHA_NUM: 1 << 1,
      ; G7 U0 i! y1 m+ l- r* d! j
    409.         MODE_8BIT_BYTE: 1 << 2,
      $ x4 ~3 v% b/ ^, k2 t$ m' }/ D
    410.         MODE_KANJI: 1 << 34 N  z( d+ ~5 T$ [: |/ d$ ]0 f
    411.     };: n. j7 U3 e4 I* z" |  m- ^0 L, e) m% g
    412.     var QRErrorCorrectLevel = {, G) c3 F* Z" @  N" W. A
    413.         L: 1,
      # S( Q# O* Y6 `7 ?
    414.         M: 0,
      % g, J3 H) I( d) @' _
    415.         Q: 3,9 d% e- Y, N6 v) ]5 C) P& o
    416.         H: 2% D) i( f% a% O: L4 b
    417.     };: F9 s6 Y% P9 x
    418.     var QRMaskPattern = {
      8 z0 l" O: Z5 h$ v2 i
    419.         PATTERN000: 0,, @$ q2 z! o/ i# P3 L- e3 `
    420.         PATTERN001: 1,
      & G" J( I! O5 B( z" T0 l
    421.         PATTERN010: 2,0 i4 d* |1 R0 x
    422.         PATTERN011: 3,
      $ J' S4 ^4 P" S* W7 W2 \
    423.         PATTERN100: 4,
      , X* w8 }( Z/ F1 Y' N. p/ e/ h* U
    424.         PATTERN101: 5,8 {/ \% Z6 L: T+ z% t
    425.         PATTERN110: 6,
      : ~$ K: d- m, W1 h/ p1 p
    426.         PATTERN111: 76 |! q8 }0 V, q
    427.     };
      ( q# R# C8 _2 M/ @
    428.     var QRUtil = function() {
      0 z( T; @2 s  X5 T4 I4 L
    429.         var PATTERN_POSITION_TABLE = [[], [6, 18], [6, 22], [6, 26], [6, 30], [6, 34], [6, 22, 38], [6, 24, 42], [6, 26, 46], [6, 28, 50], [6, 30, 54], [6, 32, 58], [6, 34, 62], [6, 26, 46, 66], [6, 26, 48, 70], [6, 26, 50, 74], [6, 30, 54, 78], [6, 30, 56, 82], [6, 30, 58, 86], [6, 34, 62, 90], [6, 28, 50, 72, 94], [6, 26, 50, 74, 98], [6, 30, 54, 78, 102], [6, 28, 54, 80, 106], [6, 32, 58, 84, 110], [6, 30, 58, 86, 114], [6, 34, 62, 90, 118], [6, 26, 50, 74, 98, 122], [6, 30, 54, 78, 102, 126], [6, 26, 52, 78, 104, 130], [6, 30, 56, 82, 108, 134], [6, 34, 60, 86, 112, 138], [6, 30, 58, 86, 114, 142], [6, 34, 62, 90, 118, 146], [6, 30, 54, 78, 102, 126, 150], [6, 24, 50, 76, 102, 128, 154], [6, 28, 54, 80, 106, 132, 158], [6, 32, 58, 84, 110, 136, 162], [6, 26, 54, 82, 110, 138, 166], [6, 30, 58, 86, 114, 142, 170]];% ^& _1 H2 T5 \* i
    430.         var G15 = (1 << 10) | (1 << 8) | (1 << 5) | (1 << 4) | (1 << 2) | (1 << 1) | (1 << 0);
      ) E9 V, x* b" Q0 @$ N
    431.         var G18 = (1 << 12) | (1 << 11) | (1 << 10) | (1 << 9) | (1 << 8) | (1 << 5) | (1 << 2) | (1 << 0);
      3 h1 S4 n/ C( Z, O  l, @
    432.         var G15_MASK = (1 << 14) | (1 << 12) | (1 << 10) | (1 << 4) | (1 << 1);/ r7 }, k( e$ \* |  {  {+ U
    433.         var _this = {};' ?0 D, W0 A; _. s
    434.         var getBCHDigit = function(data) {
      * |$ I& O( G( z% C4 X
    435.             var digit = 0;# h7 y9 |: M" l& C$ D
    436.             while (data != 0) {
      , l7 x) l. @6 i% o
    437.                 digit += 1;' D  M: h! R6 m  }
    438.                 data >>>= 1;
      * D% \; v- V* k  m8 v& U$ G1 H, H" y
    439.             }# H% {3 L& C1 Y+ D! F0 |" [6 K
    440.             return digit;
      5 r. i* G8 t+ V  R2 I0 K
    441.         }
      $ Y& m3 E( I$ h$ [3 H/ w
    442.         ;/ e( e- m8 y" Z' }( y4 Y! B
    443.         _this.getBCHTypeInfo = function(data) {! ?$ t8 T) Q; _0 G; G" i7 {5 ]
    444.             var d = data << 10;
      ! f. e+ x; |7 S# q
    445.             while (getBCHDigit(d) - getBCHDigit(G15) >= 0) {
      / E" G, r& C3 r, Q. f, W* p# a- S" u4 L
    446.                 d ^= (G15 << (getBCHDigit(d) - getBCHDigit(G15)));. r8 ~* q$ [2 o4 D2 }
    447.             }
      4 z% V& m- @" |4 F6 w3 l
    448.             return ((data << 10) | d) ^ G15_MASK;
      9 y% z1 ?0 `0 N  t' _
    449.         }
      ' q# {9 q1 {# s: u) e: D
    450.         ;7 W$ M; z4 B; h1 V" y2 ?  L
    451.         _this.getBCHTypeNumber = function(data) {
      2 U4 _* C2 b* j% u' Z$ k
    452.             var d = data << 12;) R5 Q" E" D, R
    453.             while (getBCHDigit(d) - getBCHDigit(G18) >= 0) {$ n/ X% }3 d  z% _; }( b
    454.                 d ^= (G18 << (getBCHDigit(d) - getBCHDigit(G18)));' n1 @8 v" Y& J, O( U% A# a5 `2 [8 e
    455.             }4 ~2 A( L; y( ?7 q8 |+ Z
    456.             return (data << 12) | d;
      & N9 \; l( h0 [: g( R
    457.         }
      ; t9 F4 g$ e( I: s. E! Z' O) g( r
    458.         ;" x2 S" S2 @2 E4 Q, l9 k
    459.         _this.getPatternPosition = function(typeNumber) {
      1 \* [: [/ f. r8 F0 t* a1 H3 Q
    460.             return PATTERN_POSITION_TABLE[typeNumber - 1];0 D) x% {$ e9 \& X/ {4 k
    461.         }
      ) ^8 q" s) T8 s" G
    462.         ;
      0 j; I/ D6 J$ l+ b. C
    463.         _this.getMaskFunction = function(maskPattern) {
      ; n" `$ W* R' ?* R0 s
    464.             switch (maskPattern) {
      * k% h, w9 S* \& `; w
    465.             case QRMaskPattern.PATTERN000:' E- x* S  _) y
    466.                 return function(i, j) {
      ; ]1 ^* S6 L* W2 K6 z+ ]% J+ K# Q1 G$ m
    467.                     return (i + j) % 2 == 0;
      & M( ^. ?+ c; Z* z3 D
    468.                 }
      . n- n2 s* H1 U( U5 [
    469.                 ;- ]* S" x2 [, E  v
    470.             case QRMaskPattern.PATTERN001:2 I9 k8 L$ @. f/ a1 `( o2 ?
    471.                 return function(i, j) {
      3 L+ F% R& `0 y* y6 n9 O+ ?
    472.                     return i % 2 == 0;
      & D# O$ a! z. l$ H& H$ S
    473.                 }
      6 M- e! }3 n) y
    474.                 ;5 S' D3 t7 W, D0 W3 b0 _
    475.             case QRMaskPattern.PATTERN010:4 q- i/ L5 h4 r5 p
    476.                 return function(i, j) {
      # i$ x4 n. ?/ B' j3 Z' R$ P
    477.                     return j % 3 == 0;' r. Q( Q' G- o7 R) R8 \/ J7 h; k6 E- e
    478.                 }
      : w% c) T* A  }4 ?
    479.                 ;" [0 X5 ?# c. b+ x, I
    480.             case QRMaskPattern.PATTERN011:
      % F' I6 R" x, x
    481.                 return function(i, j) {' w3 X" K, H* h, G. U
    482.                     return (i + j) % 3 == 0;
      7 o$ D1 j6 T$ y6 f: o! {
    483.                 }4 O4 V1 n& n6 X$ r) h; V) W& G, d
    484.                 ;) u% v" O+ J" V2 v5 S
    485.             case QRMaskPattern.PATTERN100:
      9 B0 r! J8 ~- ?& k, S+ p
    486.                 return function(i, j) {
      7 f- a8 Z4 N) r5 ~. h
    487.                     return (Math.floor(i / 2) + Math.floor(j / 3)) % 2 == 0;; j! O% e$ v6 r# b; E
    488.                 }
      9 Y6 b" i3 g) R6 I3 z) ?
    489.                 ;, W9 k/ ^5 ?0 Q4 R1 S
    490.             case QRMaskPattern.PATTERN101:7 Y5 Y  d, o% I6 ~# N; C
    491.                 return function(i, j) {
      5 R4 ?& m6 U7 U( `$ y
    492.                     return (i * j) % 2 + (i * j) % 3 == 0;0 H/ N( H/ u7 ]+ P/ w" I1 h
    493.                 }
      $ v: ^* N7 ?* W5 }1 ^
    494.                 ;. ]4 T: c# U3 \9 J( q
    495.             case QRMaskPattern.PATTERN110:
      0 c1 l9 ~6 ?) t1 h/ D, x3 B" D
    496.                 return function(i, j) {
      7 @5 D. d& w- n4 n2 t- n
    497.                     return ((i * j) % 2 + (i * j) % 3) % 2 == 0;! C2 ^: ~/ V8 l  O% X
    498.                 }
      6 U- X8 L7 K/ L$ N6 L  O  O' w8 P" F9 l
    499.                 ;
      & b+ m% x; W, j( q
    500.             case QRMaskPattern.PATTERN111:
      ' c7 I3 o0 e* x1 u
    501.                 return function(i, j) {
      8 z7 s. W. k% P4 f) z
    502.                     return ((i * j) % 3 + (i + j) % 2) % 2 == 0;- }" d2 g/ R5 T' f8 ]
    503.                 }
        ?+ R; i2 g  E5 m8 ~* P
    504.                 ;
      3 T) N0 L$ N8 v) O1 F
    505.             default:
      - b+ Y) d" V7 a" c
    506.                 throw new Error('bad maskPattern:' + maskPattern);6 p5 Y5 H# L# a5 o& o8 k1 b" P
    507.             }) V/ y+ A7 a7 |  ~
    508.         }2 m, p9 Z+ u/ O2 C- |
    509.         ;5 G8 A& T+ V* n/ c5 U2 {+ n$ }
    510.         _this.getErrorCorrectPolynomial = function(errorCorrectLength) {- t# g. l7 \* j1 D* W
    511.             var a = qrPolynomial([1], 0);+ a, l$ T: }$ `  N0 A
    512.             for (var i = 0; i < errorCorrectLength; i += 1) {
      " x$ R" l- [) X  ]9 ?9 r) _" q
    513.                 a = a.multiply(qrPolynomial([1, QRMath.gexp(i)], 0));
      2 X3 J/ U4 ]2 W* Y! D" X$ B
    514.             }& T# x8 U/ \7 Z4 A7 }6 O0 m" z
    515.             return a;
      1 j! q: q6 ~+ p5 h
    516.         }2 j) L9 ^1 J3 e9 ^1 G; i+ A! |
    517.         ;
      , q2 U+ q6 K1 w9 a- z& S& m6 ~/ ]
    518.         _this.getLengthInBits = function(mode, type) {
      ) y& r8 a* ~4 U* c% q7 i
    519.             if (1 <= type && type < 10) {
      ; `* ?, E) @+ F: a$ w/ ]( a4 Z1 z
    520.                 switch (mode) {
      ) b6 s! }) }6 u& ?. E) A
    521.                 case QRMode.MODE_NUMBER:; R2 Z8 U/ _# w- d
    522.                     return 10;  M0 c5 l: H( x' I
    523.                 case QRMode.MODE_ALPHA_NUM:
      3 T. M8 G# }* d8 V' F
    524.                     return 9;
      " Z" ^% ?5 e3 ]" G
    525.                 case QRMode.MODE_8BIT_BYTE:
      + [# a$ J& _& \- h
    526.                     return 8;
      : V6 v6 q3 V0 ^# ]  c
    527.                 case QRMode.MODE_KANJI:
      ! T$ y* r) O% H# K  i1 y- `
    528.                     return 8;
        H7 L- J# ?  Q4 C
    529.                 default:  l( s5 y: D% B% V2 N5 j5 l8 F
    530.                     throw new Error('mode:' + mode);  u1 [# v7 k) a9 g$ T: Z
    531.                 }* \1 x5 Z) @1 \6 p! F$ Q5 C
    532.             } else if (type < 27) {
      / p9 a" C1 N! _# P' s" q6 a
    533.                 switch (mode) {1 A0 g8 e5 {6 [) m: [
    534.                 case QRMode.MODE_NUMBER:9 O8 n8 A+ K$ ?* h0 l
    535.                     return 12;& C# M! D2 M0 k& d$ t
    536.                 case QRMode.MODE_ALPHA_NUM:
      0 E' Q# }8 a6 v1 ^
    537.                     return 11;# b+ h. T2 i# q" h' v9 b* I
    538.                 case QRMode.MODE_8BIT_BYTE:" V9 A$ L, ?1 ^" y' {% ]
    539.                     return 16;% y  Y: K5 Y$ `6 y9 R. c
    540.                 case QRMode.MODE_KANJI:/ W; k: _& O( w! e: X/ z! Y
    541.                     return 10;
      2 K, W! o2 q- e0 _/ w' E
    542.                 default:  n. |* N# I0 V
    543.                     throw new Error('mode:' + mode);
      . f% v) _' c3 s
    544.                 }/ c# F1 L3 C) V4 W2 v1 ~
    545.             } else if (type < 41) {% j( [( v# M- y* }/ s6 Y2 _" r
    546.                 switch (mode) {
      $ ^8 C+ R4 h( W% F
    547.                 case QRMode.MODE_NUMBER:
      9 O) {! ?& j. S0 ?
    548.                     return 14;
      6 d: X/ b# F% T
    549.                 case QRMode.MODE_ALPHA_NUM:
      " A; r% P7 L- i( _
    550.                     return 13;
        A, ]* p- b6 _/ [5 k8 M( Z( c4 J
    551.                 case QRMode.MODE_8BIT_BYTE:. A- t  F3 E  c: C4 [% m! w7 p
    552.                     return 16;0 S  q  T' U# t6 D; v0 A
    553.                 case QRMode.MODE_KANJI:# I4 K$ J& [& s% U* N, F' v, J, Z6 _2 ?
    554.                     return 12;
      9 g' L1 }6 M" E, x% m) g( s6 L
    555.                 default:
      5 {9 D0 i2 O* a" q
    556.                     throw new Error('mode:' + mode);
      ; ]8 f: h0 F3 Q) z6 W
    557.                 }
      . W: v7 x3 r. v  Q* ~. @
    558.             } else {
      , W9 Z6 i+ U7 _7 c1 f* ?; w, C
    559.                 throw new Error('type:' + type);  N: ~2 f$ c/ m4 D) C
    560.             }: B- \) Q2 q9 g) V: }# m. r
    561.         }* d/ a7 h  A0 O- x4 |# E
    562.         ;
      9 `2 A, l) v3 x" k" N1 P
    563.         _this.getLostPoint = function(qrcode) {
      5 q- v/ |, j: [8 u. H
    564.             var moduleCount = qrcode.getModuleCount();3 _, b/ t% E6 ]+ j( B
    565.             var lostPoint = 0;
      & l& h, o  d- v5 I) l1 n
    566.             for (var row = 0; row < moduleCount; row += 1) {# @: m! `  Q0 V" e
    567.                 for (var col = 0; col < moduleCount; col += 1) {& ^4 g2 ^* t) S
    568.                     var sameCount = 0;
      2 V8 n' s  q/ F# X& B
    569.                     var dark = qrcode.isDark(row, col);2 i! p% C3 Z! m( C
    570.                     for (var r = -1; r <= 1; r += 1) {
      - a2 |' U' v. J) X0 z7 f
    571.                         if (row + r < 0 || moduleCount <= row + r) {
      4 M3 U  ?' I+ E4 j' v8 b9 t! E* v
    572.                             continue;% z1 ]+ X: d8 C6 c6 y/ ~
    573.                         }
      % z" n% c1 d7 U
    574.                         for (var c = -1; c <= 1; c += 1) {4 g8 ?& {. l7 l6 `
    575.                             if (col + c < 0 || moduleCount <= col + c) {
      % J  H  P* i/ f- m
    576.                                 continue;
      # X$ B) g! b& I5 O
    577.                             }! I/ A  s8 X2 H% `$ |+ R' N% G
    578.                             if (r == 0 && c == 0) {  _* v; O- P* e2 x/ h* _
    579.                                 continue;7 s# I% l$ k$ Q- L# v4 d+ Z: |
    580.                             }
      ; t  d; a& n7 \& _" ]1 K
    581.                             if (dark == qrcode.isDark(row + r, col + c)) {$ u0 {, k- e8 I" V5 J
    582.                                 sameCount += 1;% @8 M" q& h' D' }
    583.                             }
      9 a* V4 Q2 H1 j. y
    584.                         }
      0 y( ]9 A& }- Z! Z) d- S6 r
    585.                     }
        ~; M% }+ C! c4 l5 f! k6 V
    586.                     if (sameCount > 5) {
      $ A" `  Y' J) I/ u
    587.                         lostPoint += (3 + sameCount - 5);
      , t  A/ a: @( T4 L
    588.                     }
      ' K+ @! Z) i( q) l- j! g
    589.                 }4 x1 h# u" o5 \/ ~$ J, o
    590.             }
      # i, F& x' s' H: S5 r
    591.             ;for (var row = 0; row < moduleCount - 1; row += 1) {
      / o3 c; k& G5 V/ f. M( M" t1 j
    592.                 for (var col = 0; col < moduleCount - 1; col += 1) {
      & w8 r/ _; H& h  f
    593.                     var count = 0;
      # N4 _9 O! P0 e
    594.                     if (qrcode.isDark(row, col))
      : \6 B6 j3 Y: K. i+ r! V
    595.                         count += 1;
      2 S5 h" G* Y( Y' a) m
    596.                     if (qrcode.isDark(row + 1, col)); f; z% I" Z5 g' Z
    597.                         count += 1;! V4 H2 |1 @( D0 C% O9 p
    598.                     if (qrcode.isDark(row, col + 1))4 X9 j5 W9 u) P) J3 @( Q
    599.                         count += 1;
      ) [  G& a7 K% r/ P( v6 E8 D
    600.                     if (qrcode.isDark(row + 1, col + 1))$ _1 ?1 s3 `2 I9 k
    601.                         count += 1;
      , y1 f) v- `; I1 E
    602.                     if (count == 0 || count == 4) {% U) c/ N: f8 y: i& E' s& G
    603.                         lostPoint += 3;
      - @2 e0 c0 G  K* G# A( ~7 @
    604.                     }
      2 q1 X. C& H7 L- t' l
    605.                 }
      & {5 r" ?2 u0 U" J1 m7 l4 r
    606.             }0 {+ m6 M: Z: T$ a5 J! i% B8 V8 O8 Q
    607.             for (var row = 0; row < moduleCount; row += 1) {
      0 y# \5 j5 w5 a# `7 b
    608.                 for (var col = 0; col < moduleCount - 6; col += 1) {
      2 n2 |( ~# q! ^4 T0 c2 Y
    609.                     if (qrcode.isDark(row, col) && !qrcode.isDark(row, col + 1) && qrcode.isDark(row, col + 2) && qrcode.isDark(row, col + 3) && qrcode.isDark(row, col + 4) && !qrcode.isDark(row, col + 5) && qrcode.isDark(row, col + 6)) {/ Y7 @* ^, Q5 d7 |
    610.                         lostPoint += 40;
      . u" h- L) U' m
    611.                     }
      $ }/ @, b. n- f& E2 v$ y
    612.                 }
      5 a; I2 L; x+ a) [6 Z% }- [
    613.             }: Y8 ~& V- e) [, T6 b2 u% M
    614.             for (var col = 0; col < moduleCount; col += 1) {4 R$ l* c: {  T
    615.                 for (var row = 0; row < moduleCount - 6; row += 1) {
      9 u- c: k8 n! w( I
    616.                     if (qrcode.isDark(row, col) && !qrcode.isDark(row + 1, col) && qrcode.isDark(row + 2, col) && qrcode.isDark(row + 3, col) && qrcode.isDark(row + 4, col) && !qrcode.isDark(row + 5, col) && qrcode.isDark(row + 6, col)) {
      * }3 I% F+ g! m  a2 e4 \2 v  ~
    617.                         lostPoint += 40;
      * z+ }2 a9 z/ I, @
    618.                     }/ \! `; h3 s. `+ `$ o" g
    619.                 }
      & o. \, n7 A- I
    620.             }
      5 }; }4 n0 k' l$ V
    621.             var darkCount = 0;
      $ g( n& ^: z" A! D+ i( S* `
    622.             for (var col = 0; col < moduleCount; col += 1) {
      " q6 X5 `& @; ?( ]! }
    623.                 for (var row = 0; row < moduleCount; row += 1) {
      0 _! e( F4 b& z+ {; V
    624.                     if (qrcode.isDark(row, col)) {
      1 e' v+ F+ Q4 Q5 e+ u* ~
    625.                         darkCount += 1;
      ; M+ t( S7 @& g( X5 K6 O
    626.                     }
      % e+ f2 Q9 y2 ]! b  c
    627.                 }
      8 n  D4 e- x, x, d
    628.             }
      % o. J8 u, i0 H$ j
    629.             var ratio = Math.abs(100 * darkCount / moduleCount / moduleCount - 50) / 5;
      3 |; Z% F- V3 k$ k9 g( c' V; j
    630.             lostPoint += ratio * 10;( \# @3 u( s8 G- C7 z
    631.             return lostPoint;/ ]: C2 Z1 q# C' F6 S8 y
    632.         }  ~9 U; x5 a3 f, y* N$ \* X
    633.         ;
      4 P% ^1 }7 K+ ~$ b% i( m- N6 i
    634.         return _this;8 I' |$ h: ]8 c- s
    635.     }();
      : Z2 @5 @- h) a  b! }( r
    636.     var QRMath = function() {
      - b% v( K6 S4 u' x; N" o$ U$ c' L7 N, z
    637.         var EXP_TABLE = new Array(256);7 j* j- h$ K& z/ Y8 y
    638.         var LOG_TABLE = new Array(256);1 ~, r+ P) n" m$ w2 d7 T/ {& ?
    639.         for (var i = 0; i < 8; i += 1) {
      3 Q6 ^8 I% U& D* G% j9 Y
    640.             EXP_TABLE[i] = 1 << i;5 y& l! {! t, w( d6 e: y" g
    641.         }! L* I7 g# N) x' E
    642.         for (var i = 8; i < 256; i += 1) {2 g$ \9 x$ t( m; S% z" c
    643.             EXP_TABLE[i] = EXP_TABLE[i - 4] ^ EXP_TABLE[i - 5] ^ EXP_TABLE[i - 6] ^ EXP_TABLE[i - 8];
      & {( i& w0 J1 H" J' ]9 D' y1 q
    644.         }
        B+ {* x7 `8 W2 A# C& v" s  y
    645.         for (var i = 0; i < 255; i += 1) {0 p8 N$ {  a& v$ K. j1 |( N% A8 f
    646.             LOG_TABLE[EXP_TABLE[i]] = i;
      ) f1 |; o& }9 z, ~5 x5 J6 }
    647.         }  I/ A3 B$ [8 [& k; k6 [1 J8 A
    648.         var _this = {};
      + s  K# s/ K4 u& f* ~5 `& J7 C4 l
    649.         _this.glog = function(n) {
      * U$ Y* L& _. p1 V
    650.             if (n < 1) {$ c( }* j" }2 ^% Z, N2 w
    651.                 throw new Error('glog(' + n + ')');
      5 ?: D9 c$ X+ f. d, O
    652.             }; t/ Y) m/ f1 Q
    653.             return LOG_TABLE[n];% u3 Y3 \" v  C& w. l1 \' O) r
    654.         }
      - h" L; l0 n9 l$ ]9 l1 N$ n
    655.         ;! h, K% D$ z+ L" @+ V0 T; \. L2 Q
    656.         _this.gexp = function(n) {
      1 V2 h" o' A8 d' e- `! E, x% D
    657.             while (n < 0) {
      ) N. I! n- R$ h2 |' m3 b
    658.                 n += 255;
      7 ]1 z+ X" m3 K7 N" I- t7 P" `
    659.             }
      % r* P* `: y$ b6 U  A7 R% K
    660.             while (n >= 256) {
      - l0 @. Z) E( j4 g  B+ z# T
    661.                 n -= 255;. T* Z- [4 ^9 E: {7 k4 b2 C
    662.             }: B7 y7 w  u$ S$ t$ d. i7 c' O
    663.             return EXP_TABLE[n];
      * ]5 H. H& r: f
    664.         }
      7 ~& S  m5 W, E5 F7 w
    665.         ;/ F% t$ r* j2 Q- c
    666.         return _this;
      : q6 j0 n) n$ a# D) q# H7 ^
    667.     }();+ V7 J; }# d' M/ M7 O, d- V
    668.     function qrPolynomial(num, shift) {/ u$ j" Y( v& k
    669.         if (typeof num.length == 'undefined') {9 y% z9 B( F& M' Y  y; v) ]  y9 K$ L& {
    670.             throw new Error(num.length + '/' + shift);
      , K4 N0 ~" m3 G, D+ W3 i0 ^
    671.         }
      : g; s# @* M: `. P1 }  w2 Y
    672.         var _num = function() {: j: L# n5 b+ [' E8 d" ?) o
    673.             var offset = 0;
      , M; t  [4 f& h- T, y! f
    674.             while (offset < num.length && num[offset] == 0) {5 I  r/ t$ p7 M% b
    675.                 offset += 1;
      ; G' V5 N/ G9 \& O, r. J$ t0 I
    676.             }
      7 q8 g3 J' e6 X* q- M1 j0 R
    677.             var _num = new Array(num.length - offset + shift);4 a1 S1 w3 A0 G& c5 a1 Z
    678.             for (var i = 0; i < num.length - offset; i += 1) {9 v' Y2 w( F% p" K. v& K3 |
    679.                 _num[i] = num[i + offset];
      . L6 X( s# j' @  @
    680.             }- J5 d2 I, C8 G. W3 l0 g
    681.             return _num;. n; ~8 ?7 R  u4 w  h
    682.         }();
      ; e0 u& a& e% x; q
    683.         var _this = {};/ y7 ~% o- Y0 {" D# X5 Q! v; \& y: t
    684.         _this.getAt = function(index) {
      4 K5 T# r  ]1 W: V  V3 U$ i
    685.             return _num[index];
      * R) j& }1 z" B8 \) O2 M$ Z
    686.         }
      : l- o& H& o7 q" W+ [
    687.         ;; n7 F; k" Z  v2 K% k
    688.         _this.getLength = function() {
        O, t! @! k+ A1 s6 k7 t- L
    689.             return _num.length;* U4 c) A% C% S( w: \
    690.         }
      * I. K8 \. h6 i, L- o- q; E- v
    691.         ;* K! X; C6 t$ \* P! a' B6 s3 `
    692.         _this.multiply = function(e) {) M" r( _5 E: c' ~
    693.             var num = new Array(_this.getLength() + e.getLength() - 1);
      ' k: s) B# |; R' t! m0 }$ u
    694.             for (var i = 0; i < _this.getLength(); i += 1) {
      / }% M( B0 J( B1 J) v5 O
    695.                 for (var j = 0; j < e.getLength(); j += 1) {
      ! g2 E* o/ l% i
    696.                     num[i + j] ^= QRMath.gexp(QRMath.glog(_this.getAt(i)) + QRMath.glog(e.getAt(j)));
      % Z% q- b! ]: Z% J) q0 Z$ ?
    697.                 }1 p+ Q( X/ s0 o3 e) F6 h4 j
    698.             }
      9 h9 X3 a) {6 w
    699.             return qrPolynomial(num, 0);8 M( H! T) T  {- d' I
    700.         }
      , G  h$ ^7 ?0 n! L7 k$ r
    701.         ;. ]# F4 z4 m0 U2 A- S- r; g
    702.         _this.mod = function(e) {% X: d; I- |+ k- d6 k' O, \
    703.             if (_this.getLength() - e.getLength() < 0) {
      + S5 L/ N4 o& E, E0 |+ }' B& g; l+ F
    704.                 return _this;. r  j; q# z* d, G- |
    705.             }6 V% d4 }1 r- q+ K* Q: w
    706.             var ratio = QRMath.glog(_this.getAt(0)) - QRMath.glog(e.getAt(0));- x# x9 U( E( U, ^% P
    707.             var num = new Array(_this.getLength());
      ; p6 O$ @' Z; i- Z9 O2 i  C6 l
    708.             for (var i = 0; i < _this.getLength(); i += 1) {$ X$ F7 O: J( A( C
    709.                 num[i] = _this.getAt(i);3 _  P+ T8 J/ X7 W, S- L% R
    710.             }
      $ F( C* s3 o6 u9 f0 y# |/ T
    711.             for (var i = 0; i < e.getLength(); i += 1) {2 H3 L5 a# V$ K. \+ J! n
    712.                 num[i] ^= QRMath.gexp(QRMath.glog(e.getAt(i)) + ratio);( {0 E" }' m! p+ y+ k5 _
    713.             }1 @3 d. X1 z- O6 Q* D8 g7 @
    714.             return qrPolynomial(num, 0).mod(e);. l( t) Q) c( ?5 \( R! Q
    715.         }
      ! @& r: C# l6 s# h1 \" t  E( c/ S
    716.         ;
      ( n; n; G3 g( ?, p& u, g: A& o, n
    717.         return _this;& {& F) z0 s0 U1 s7 ]/ h, ?4 U0 e
    718.     }0 B: c8 ~: F0 \% b
    719.     ;var QRRSBlock = function() {5 g, d/ e  Q# [; L0 ]; C, P. W
    720.         var RS_BLOCK_TABLE = [[1, 26, 19], [1, 26, 16], [1, 26, 13], [1, 26, 9], [1, 44, 34], [1, 44, 28], [1, 44, 22], [1, 44, 16], [1, 70, 55], [1, 70, 44], [2, 35, 17], [2, 35, 13], [1, 100, 80], [2, 50, 32], [2, 50, 24], [4, 25, 9], [1, 134, 108], [2, 67, 43], [2, 33, 15, 2, 34, 16], [2, 33, 11, 2, 34, 12], [2, 86, 68], [4, 43, 27], [4, 43, 19], [4, 43, 15], [2, 98, 78], [4, 49, 31], [2, 32, 14, 4, 33, 15], [4, 39, 13, 1, 40, 14], [2, 121, 97], [2, 60, 38, 2, 61, 39], [4, 40, 18, 2, 41, 19], [4, 40, 14, 2, 41, 15], [2, 146, 116], [3, 58, 36, 2, 59, 37], [4, 36, 16, 4, 37, 17], [4, 36, 12, 4, 37, 13], [2, 86, 68, 2, 87, 69], [4, 69, 43, 1, 70, 44], [6, 43, 19, 2, 44, 20], [6, 43, 15, 2, 44, 16]];
      0 L1 B. g. P; V! }' o
    721.         var qrRSBlock = function(totalCount, dataCount) {
      " K3 l- d5 O- M! ]3 y
    722.             var _this = {};; X1 {6 g* v; Y( J$ t
    723.             _this.totalCount = totalCount;
      5 \5 ~- {- \. [: r" `2 I
    724.             _this.dataCount = dataCount;
      ' _# J9 [" k! m4 B5 U
    725.             return _this;; H, a6 ^. }  m
    726.         }
      & H/ {2 R9 b. R
    727.         ;
      ( S( H8 c/ v9 Z  L
    728.         var _this = {};' x( p( |6 n' s4 |$ ]8 H) I
    729.         var getRsBlockTable = function(typeNumber, errorCorrectLevel) {
      4 a3 u7 X7 D! n
    730.             switch (errorCorrectLevel) {7 s! O' C& x7 ]% J1 U) Q
    731.             case QRErrorCorrectLevel.L:( I# K9 u' z: D" c' S2 w
    732.                 return RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 0];( o$ t; C2 y7 w. O9 y
    733.             case QRErrorCorrectLevel.M:$ i3 Q, y/ q+ O1 W
    734.                 return RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 1];! @5 ^/ G- L' W1 n: i
    735.             case QRErrorCorrectLevel.Q:: |" X, T6 D/ b, g# Z6 J
    736.                 return RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 2];
      1 k# M  S. S8 A
    737.             case QRErrorCorrectLevel.H:
      * j. r2 T$ P4 _! u7 Z5 t9 E1 p/ W' p
    738.                 return RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 3];
      0 W9 {$ u6 W' M( V3 i. W1 J
    739.             default:
      , x& V, H) F( g! Y5 y5 _
    740.                 return undefined;
      % L) d9 J; T" X& T9 |5 Z
    741.             }0 g" Y2 g6 A) n
    742.         }
      0 N# I, ?( {! \! Q- u8 T" h
    743.         ;
      # ]# B' k5 L3 \7 m2 r
    744.         _this.getRSBlocks = function(typeNumber, errorCorrectLevel) {/ M7 @: r0 ?8 [6 L
    745.             var rsBlock = getRsBlockTable(typeNumber, errorCorrectLevel);
      9 G$ w) \# b) s. c
    746.             if (typeof rsBlock == 'undefined') {
      2 O! O# [+ }" L
    747.                 throw new Error('bad rs block [url=home.php?mod=space&uid=18206]@[/url] typeNumber:' + typeNumber + '/errorCorrectLevel:' + errorCorrectLevel);
      2 {% ~4 t3 B$ F) ~6 M2 ~! e' Z- v
    748.             }3 K$ ^& R& s1 K% L; }  l* C' e
    749.             var length = rsBlock.length / 3;
      0 O& s2 M7 |9 K+ [5 ?
    750.             var list = new Array();
      " _* c) S5 X7 S/ v
    751.             for (var i = 0; i < length; i += 1) {+ [9 M8 D* m! @' H( p0 W
    752.                 var count = rsBlock[i * 3 + 0];- S( s( O, R7 p6 ?& M0 `
    753.                 var totalCount = rsBlock[i * 3 + 1];6 e+ b* s! E5 @2 |; w) z. p: N7 L
    754.                 var dataCount = rsBlock[i * 3 + 2];4 V( h% c' B$ ~0 c" i
    755.                 for (var j = 0; j < count; j += 1) {2 `; T6 I" |: ?0 V4 |  b5 u8 B/ t' O
    756.                     list.push(qrRSBlock(totalCount, dataCount));
      % b& c( S: S9 f# c7 s: w
    757.                 }
      9 L1 g  h6 C2 C0 `
    758.             }
      7 f' _* Y& i- |4 i& V/ Y2 o
    759.             return list;
      : [+ ~' Z5 H; |% D
    760.         }
      0 f& R+ u6 S" w# L
    761.         ;
      * z+ }# Z; V7 h0 X5 j  y
    762.         return _this;
      ( z: I8 @5 t1 D; H4 o2 X  o
    763.     }();, n' ^  L# b/ {$ e1 J8 v0 J" a8 A
    764.     var qrBitBuffer = function() {+ z) i" `( V* i1 E
    765.         var _buffer = new Array();
      / o' ]1 J5 t8 s
    766.         var _length = 0;
      ( q- a5 a' E& X5 u3 |5 ]
    767.         var _this = {};# d5 p- U  G2 H+ n
    768.         _this.getBuffer = function() {3 w, O/ ~: O4 }0 l3 H% O5 F9 v
    769.             return _buffer;, G: O& z' `( k4 ^
    770.         }
      3 M& v5 z5 F2 Z& G
    771.         ;8 k; v" X& F9 E. U& v+ R
    772.         _this.getAt = function(index) {
      1 ?3 `6 y% r4 H7 c
    773.             var bufIndex = Math.floor(index / 8);
      0 @4 G8 u/ v4 m- U
    774.             return ((_buffer[bufIndex] >>> (7 - index % 8)) & 1) == 1;* w. |  y+ G7 r) W* _
    775.         }
      % m9 E! l4 s8 v7 g
    776.         ;. Z9 e0 [5 Q) S, S
    777.         _this.put = function(num, length) {
      ( t' L0 {6 B+ v! j' E3 M* w9 U0 D( p
    778.             for (var i = 0; i < length; i += 1) {1 i, S, q+ L; k( D$ p5 O6 j  S
    779.                 _this.putBit(((num >>> (length - i - 1)) & 1) == 1);
      + X" n5 a; Y1 K  H4 Z
    780.             }
        X& I& v' Z( |% v2 E- `8 X- r
    781.         }$ z) z" Z* J3 x1 y  H
    782.         ;8 \0 i: K! u4 m; l# Z3 E# f
    783.         _this.getLengthInBits = function() {
      3 t6 O* G' L# ^- U; ?1 v, E) i
    784.             return _length;
      % L: v/ J2 Y  t9 A3 Y3 \
    785.         }
      ) s7 Z' ?5 w" U3 I- c3 n6 J
    786.         ;
      . n( K6 Q" U" _4 R2 j! ^
    787.         _this.putBit = function(bit) {
      ! R: s# x. E; R6 }
    788.             var bufIndex = Math.floor(_length / 8);
      " w& q, c) |* ?# m4 u- G7 |* X, O
    789.             if (_buffer.length <= bufIndex) {
      + S5 i! u( ~7 L% c& f7 U9 m  C  S
    790.                 _buffer.push(0);
      3 ]" r! i- p6 ~1 u( w; f, g
    791.             }
      + X/ t& X& i- F( F( r( ^
    792.             if (bit) {
      * z6 c7 g& A+ r" H1 h
    793.                 _buffer[bufIndex] |= (0x80 >>> (_length % 8));3 @' q0 F7 p, S; `# n
    794.             }
      + E) l+ S4 G/ T) v1 y; F
    795.             _length += 1;
      8 F4 b6 r# ^( d" W1 ~0 f* o! m8 ~2 P, i
    796.         }* `* a! U4 S; A4 l9 t
    797.         ;
      % f. g, F2 z6 p- q0 P
    798.         return _this;  r; L9 Y5 v6 K/ Y7 ~$ Y; a% b* r
    799.     }
      ; r+ w- ?  z! C( \
    800.     ;
      3 s3 p4 s3 \2 y  c" V) B
    801.     var qr8BitByte = function(data) {
      ' y9 Q, W) R) O! s5 X  J( q' \
    802.         var _mode = QRMode.MODE_8BIT_BYTE;
      & v' U" o4 O1 O, ?1 y" A
    803.         var _data = data;
      - r: q( t0 N4 ?6 z" o6 n0 v4 Q4 x+ e
    804.         var _bytes = qrcode.stringToBytes(data);$ ?3 R' j9 w' {. z8 y2 D+ z
    805.         var _this = {};
      . Y! ~+ h( @) Q1 _7 o( n. |
    806.         _this.getMode = function() {+ z! S) c3 T, a
    807.             return _mode;$ _% u' G2 A& F, \
    808.         }% g# L4 X8 g- z$ g1 Y5 Z
    809.         ;- a# t: p$ j: Z" A
    810.         _this.getLength = function(buffer) {
      " C0 a6 F  _9 h# N( n0 v7 ]
    811.             return _bytes.length;
      2 x& F# H' b9 A
    812.         }; B$ ~- S) q; f( o
    813.         ;2 e- ~! i# H" c( s9 L; r% e( k
    814.         _this.write = function(buffer) {
      & B6 z  }! [  P$ Q7 l! |. ~
    815.             for (var i = 0; i < _bytes.length; i += 1) {/ t6 E$ N0 ^0 V8 h' T5 ?- G% x- e6 b
    816.                 buffer.put(_bytes[i], 8);: S, Y5 P* C$ C4 X, p
    817.             }" e+ T( j9 u! ^0 [0 P; f
    818.         }
      5 L8 z& y/ Y- n" ?4 }; N* }
    819.         ;" P# F1 a- j4 ~, R" n+ X8 `5 K
    820.         return _this;6 d  V: k, B; p) C' l( k. }6 S! {
    821.     }; v3 H% M% @' k; N3 o# A3 u. R
    822.     ;
      8 U5 p& t) |0 m+ G6 v/ D! {
    823.     var byteArrayOutputStream = function() {
        s, b- _) B: z/ i; L
    824.         var _bytes = new Array();/ V) \; B8 ^& R! y: P
    825.         var _this = {};6 U3 V0 a# k$ ?* M( A
    826.         _this.writeByte = function(b) {; ]1 D, O# r) j$ S: s
    827.             _bytes.push(b & 0xff);: K0 D/ U* o; g$ y4 n% \
    828.         }
      3 v5 U/ y& O/ a( q. M$ m
    829.         ;
      ! M  ^  p- p( H4 o7 }, }6 n& ~
    830.         _this.writeShort = function(i) {
      0 _) p* y6 v! x9 q7 ^
    831.             _this.writeByte(i);( a& h, {6 m1 _: h; D1 B
    832.             _this.writeByte(i >>> 8);- q7 m" H- h, b" ~# a
    833.         }
      % {. j4 D( H& U3 U( D( `) p
    834.         ;9 Z- m- \1 a( s6 L' k$ q
    835.         _this.writeBytes = function(b, off, len) {
      4 R  g2 H1 Z+ r8 [! Z2 R+ n
    836.             off = off || 0;" w! U) r3 [# r7 d# ]
    837.             len = len || b.length;+ M, y* I) J& Q. {' o
    838.             for (var i = 0; i < len; i += 1) {, D& _/ n' D& V) b7 H) u
    839.                 _this.writeByte(b[i + off]);
      - X1 u: t1 t: H& k8 K& [7 d7 [7 G
    840.             }% Y* N5 H  ~  v3 U) g2 F
    841.         }
      . ~9 n1 N7 s6 l) p2 ^  I
    842.         ;
      6 y8 ~; u  r1 j; K& l
    843.         _this.writeString = function(s) {. X: T- V; k! [  w1 l
    844.             for (var i = 0; i < s.length; i += 1) {
      . c7 `( }: B3 b% u8 }# p( a& ]: \9 i; ~
    845.                 _this.writeByte(s.charCodeAt(i));
      3 h3 [& O: j  C. y; D8 u+ B) [; N
    846.             }% C# q8 `4 v: @( H" }
    847.         }" q7 `  c. U) H4 C7 ^, |
    848.         ;/ |3 \. ^3 B6 J8 `+ T- k! V: |
    849.         _this.toByteArray = function() {" P! @9 [* P$ G# B& e3 k. b( B( d
    850.             return _bytes;! X. y% L; ^0 n6 |
    851.         }9 x; B# n  Z; R8 q8 d
    852.         ;) G7 e" w: n, X, `6 V" `5 |& T) Y
    853.         _this.toString = function() {
      & d3 C7 D& n8 p: A, F
    854.             var s = '';5 g% _. U3 @8 v! k
    855.             s += '[';
      + S4 o+ Q6 f" [4 n* ]4 t
    856.             for (var i = 0; i < _bytes.length; i += 1) {
      9 U/ o1 c6 U) ]( a) Q8 i
    857.                 if (i > 0) {
      2 H9 L5 s" v+ Y' m; v/ \
    858.                     s += ',';
      0 t; F1 {( a/ z
    859.                 }+ v: I' J6 t( `4 d7 `6 `2 I, K
    860.                 s += _bytes[i];/ x. }" p6 S5 @) R8 [
    861.             }
      3 X2 S: @  {4 K& t( S3 v" L
    862.             s += ']';
      ' M+ n/ W  p  T7 D
    863.             return s;/ u. I5 X- d* D6 z- a
    864.         }. {3 G6 ^. U0 g
    865.         ;
      7 B% x* @- b# p5 b. J
    866.         return _this;6 S5 `% Q: p' x, f+ a5 E% s
    867.     }+ Z  X" y) B& _2 G- G
    868.     ;2 Z9 h" [  z; L1 X$ b. I
    869.     var base64EncodeOutputStream = function() {$ B7 _9 g5 x- J/ y/ v" y
    870.         var _buffer = 0;  A3 l! ^! Y7 F. k  B7 _8 X
    871.         var _buflen = 0;, B% [% I! Y' h  J1 o+ s/ K5 q# @
    872.         var _length = 0;
      / V0 r8 v% `7 P
    873.         var _base64 = '';' A: U9 `& L! j3 H! |9 S7 {
    874.         var _this = {};
      ! `' q% h; n/ ?0 |6 w1 Q" h
    875.         var writeEncoded = function(b) {
      " \5 _+ Z4 f8 U
    876.             _base64 += String.fromCharCode(encode(b & 0x3f));' B3 `. [8 G  w0 _9 P% R: b
    877.         }2 T# d/ a" Q5 [. k+ T  I0 j3 g
    878.         ;" a. R+ {* y+ g3 p3 K9 ^+ T4 H
    879.         var encode = function(n) {
      7 z. H- B4 Q( W6 X! |1 z1 B0 S8 b
    880.             if (n < 0) {} else if (n < 26) {
      4 ^8 P+ A$ X8 m; t8 k6 L+ g1 h5 _
    881.                 return 0x41 + n;4 T2 S6 d, m% r
    882.             } else if (n < 52) {
      7 ^' y3 ^2 M2 B1 |- q, M
    883.                 return 0x61 + (n - 26);0 d8 v7 X( F3 r0 r9 i8 I+ m1 o
    884.             } else if (n < 62) {
      . ^( m6 p* f4 W5 [. Q
    885.                 return 0x30 + (n - 52);
      ( ?9 z3 o0 z4 \: p! S: M1 G
    886.             } else if (n == 62) {$ l8 O* w) _) c) C! d& t. x( X# B
    887.                 return 0x2b;
      / w& H, o5 G: Y$ i/ T1 L
    888.             } else if (n == 63) {
      6 |5 L: d8 v+ {! v
    889.                 return 0x2f;4 B) |( s% z' V
    890.             }
      3 k! H3 J  G( Z3 I; C- t$ h
    891.             throw new Error('n:' + n);
      3 }3 G, P0 R$ x( x  ~' s
    892.         }: O  H) ^9 p4 _/ M# ~  V) l
    893.         ;% F4 C" w. z, O9 q5 p( A- [& \
    894.         _this.writeByte = function(n) {
      8 c! ~* Z) ^- ^  C9 g
    895.             _buffer = (_buffer << 8) | (n & 0xff);( {1 Q6 N: o) G# E2 P, N
    896.             _buflen += 8;  R' |8 p" ~( N; d& D( n+ g" g
    897.             _length += 1;
      5 v: a2 _6 U5 V* a0 F
    898.             while (_buflen >= 6) {
      : r! {# x6 j! q, M/ g! i+ j
    899.                 writeEncoded(_buffer >>> (_buflen - 6));
      7 D) F) r* p6 w0 {! A
    900.                 _buflen -= 6;
      ' k5 d- K6 O# V' H5 R$ k
    901.             }
      / r; _6 H# |! d" U: Y+ Q
    902.         }% A6 C  ~# q7 c4 T8 \
    903.         ;, ^/ L9 s  K& F- o( N
    904.         _this.flush = function() {# F; P) {+ `( T) [. K
    905.             if (_buflen > 0) {% S0 c9 B0 j; A5 U  }
    906.                 writeEncoded(_buffer << (6 - _buflen));/ ?3 H$ q' v7 M, R
    907.                 _buffer = 0;
      ' w5 K) X- H+ s# H: |! C
    908.                 _buflen = 0;
      & J# a. ^0 \7 A
    909.             }: B! |1 f" A6 w: [- B$ ~
    910.             if (_length % 3 != 0) {
      7 t  c2 m. \6 P8 D1 f
    911.                 var padlen = 3 - _length % 3;, R$ ^4 M) n6 k: `9 @
    912.                 for (var i = 0; i < padlen; i += 1) {
      7 r3 @6 z! i' D3 f
    913.                     _base64 += '=';
      . y& x0 \4 N% i( c2 u9 V
    914.                 }
      2 j+ i6 n' {5 j# P* V
    915.             }
      ' _. G7 C7 V, ]8 o6 m! _8 Y  \
    916.         }  f# G: A. _" V3 s
    917.         ;
      4 h4 W8 D7 Y6 p% j
    918.         _this.toString = function() {( l2 j: a4 ]0 t/ |; t/ u0 {
    919.             return _base64;0 ^/ R0 j1 C: D1 \
    920.         }
      ' Z; D- v% z& H1 u2 W. c* ^: _
    921.         ;
      9 b- u  v1 P* S8 }. H8 T
    922.         return _this;( X' N. K, O8 ]' V1 ^3 q
    923.     }; o3 W( h; `1 e+ c/ r' k# ^9 M
    924.     ;/ P9 A; G3 P- |: a3 A( N
    925.     var base64DecodeInputStream = function(str) {
      0 S* ~7 O" F$ w; c) U
    926.         var _str = str;
      6 J: Q% c8 Y: @* |* M; M
    927.         var _pos = 0;
      7 i; i  R* z/ a: Y) ~( n! L' Y; j+ t
    928.         var _buffer = 0;
      % S( D& x& o' Y. C+ c5 v5 G# a
    929.         var _buflen = 0;
      ! t# [6 }$ y. R, a
    930.         var _this = {};' P( _7 o" p  a+ U  A
    931.         _this.read = function() {9 M# G+ K9 V$ _% l
    932.             while (_buflen < 8) {
      & @$ B3 b- j% I% e8 j4 [2 V, @1 `' w
    933.                 if (_pos >= _str.length) {
      & t1 R6 j9 |7 V1 x6 _2 I! P% W" p
    934.                     if (_buflen == 0) {
      / b+ L7 P  D0 o! E
    935.                         return -1;4 E% M/ v0 r/ d: u' ^/ x
    936.                     }
      # I8 A$ G4 y3 k5 G1 |
    937.                     throw new Error('unexpected end of file./' + _buflen);
      . R. J: z: n! `9 f4 f
    938.                 }, Y% o% w, Y9 y4 n* r4 H
    939.                 var c = _str.charAt(_pos);
      , v+ f8 V1 i3 C6 G: r. f, g
    940.                 _pos += 1;! g9 @: _" m* l% F: J0 q
    941.                 if (c == '=') {: M2 J6 U  }; g' `, D7 M% D
    942.                     _buflen = 0;, d; {% o: A8 Z: [
    943.                     return -1;5 M1 X; |' j$ s) V- P+ W
    944.                 } else if (c.match(/^\s$/)) {
      0 [: f" W$ @) Q( P0 l' _) o2 @
    945.                     continue;8 n( Y' [' W7 a' F
    946.                 }0 D( h0 o1 |$ A: S2 \- q
    947.                 _buffer = (_buffer << 6) | decode(c.charCodeAt(0));
      6 ^6 u+ q3 t  x8 B& x% b4 A2 R* q& U
    948.                 _buflen += 6;) \* r% M* v; x2 [
    949.             }6 {% i$ I1 ]* P
    950.             var n = (_buffer >>> (_buflen - 8)) & 0xff;
      + g" F6 ]" S; X' J- `
    951.             _buflen -= 8;
      + M+ [' S* h+ m' |8 H
    952.             return n;
      , I) G- i6 @1 v, @
    953.         }
      ! t* l6 J+ l7 ?$ D
    954.         ;# O6 u  X0 b$ A! y
    955.         var decode = function(c) {
      9 h/ \& V( O: @; C6 L1 G0 C# f
    956.             if (0x41 <= c && c <= 0x5a) {4 f4 G" M2 E) n5 O
    957.                 return c - 0x41;) d8 \. d0 b1 O2 s3 w
    958.             } else if (0x61 <= c && c <= 0x7a) {- f% P7 i8 k8 J; ?% E; a2 p1 p1 D* ]
    959.                 return c - 0x61 + 26;$ y$ a- ]; T6 {, _* Q
    960.             } else if (0x30 <= c && c <= 0x39) {
      9 N" C, h3 x6 z; B4 \7 B
    961.                 return c - 0x30 + 52;, L2 n) G3 i6 e7 f# |0 ]' L
    962.             } else if (c == 0x2b) {9 R* E0 _2 o" @9 A
    963.                 return 62;
      2 o) q& `- L/ U" l5 k$ u, C
    964.             } else if (c == 0x2f) {1 @2 c' O- P. _8 G, D! Q
    965.                 return 63;& [& r( n0 T1 K. n$ n4 C
    966.             } else {+ g3 K. P# M4 T5 z: ~
    967.                 throw new Error('c:' + c);3 v  Y! [8 P. T* l
    968.             }
      ! [2 w1 Q  V1 r# x3 N
    969.         }
        f5 t+ I* @. A/ p8 P5 g) R! r
    970.         ;
      2 _. Q# l& Q7 h/ R0 j' h7 E' V6 B
    971.         return _this;, j, V5 l( @1 L+ f, E. g# f
    972.     }
      ) a( x. q4 p" t; L7 p7 y3 w
    973.     ;; B! o; n7 r% a  k- Z! n
    974.     var gifImage = function(width, height) {) s3 Z9 Y5 O+ v& u
    975.         var _width = width;, j) ]9 Y' N9 ?% C1 E
    976.         var _height = height;
      3 Y& z4 ]! o6 f
    977.         var _data = new Array(width * height);* a5 J9 Y7 f" S- v1 g+ |
    978.         var _this = {};
      , z- i+ ^  E0 A( X8 {
    979.         _this.setPixel = function(x, y, pixel) {
      $ J( f# w* q2 W( K* Y1 e7 M4 L
    980.             _data[y * _width + x] = pixel;
      # K% Z, Y1 d- f# l
    981.         }
      & O. Y" ?: b% G5 b2 r7 n
    982.         ;' b- Q2 C/ p) X) j
    983.         _this.write = function(out) {) y! z0 @" t; j4 ~
    984.             out.writeString('GIF87a');$ u  f3 R& a5 S1 a
    985.             out.writeShort(_width);4 U' v7 B& d0 D
    986.             out.writeShort(_height);
      4 j- W! G, ~  B* n2 k- m1 U
    987.             out.writeByte(0x80);5 o' `: Y" ]" l( p; M: f& N5 ~
    988.             out.writeByte(0);
      : g' b: M1 p8 o6 M+ O; _2 g2 D
    989.             out.writeByte(0);
      + D4 y) ?/ f' k, [
    990.             out.writeByte(0x00);
      , b+ F  t. p, O- A4 c
    991.             out.writeByte(0x00);$ `, `8 B- W! M# i" I- N( p
    992.             out.writeByte(0x00);
      5 }7 Z  i  x+ w7 H/ R
    993.             out.writeByte(0xff);
      5 C( i( M  X) L. U2 p
    994.             out.writeByte(0xff);7 s, z7 X: I  H' Y( V9 O
    995.             out.writeByte(0xff);1 X+ _; u  ^, k+ s( N5 T. K
    996.             out.writeString(',');3 ?) F: X- }& q4 F8 w4 Z: B
    997.             out.writeShort(0);  w2 V2 }0 J' O$ i( p
    998.             out.writeShort(0);9 k' A  A0 E  G2 {. t
    999.             out.writeShort(_width);! d0 L2 B; z" G' o/ w/ J# y& d
    1000.             out.writeShort(_height);  v$ t+ t* O# P8 q$ Y. O8 Z/ l1 y
    1001.             out.writeByte(0);) Z% `% E2 }1 f+ L! F. }8 \
    1002.             var lzwMinCodeSize = 2;
      + z6 Q0 m: m3 N  r
    1003.             var raster = getLZWRaster(lzwMinCodeSize);1 z) O* ~5 J4 }! J4 z
    1004.             out.writeByte(lzwMinCodeSize);
      7 i6 M$ j! \$ \, W
    1005.             var offset = 0;
      % v  m/ i* j) [4 C0 v" S: [
    1006.             while (raster.length - offset > 255) {
      3 j: e3 t+ [2 m7 }5 Z6 Z
    1007.                 out.writeByte(255);
      ) G- L0 j) U9 H0 E
    1008.                 out.writeBytes(raster, offset, 255);% p  v7 k- g& \8 Y/ M- u  }
    1009.                 offset += 255;
      7 w8 b% i. T! Y) n/ `! `
    1010.             }
      - \) V% v: _( c0 a( T
    1011.             out.writeByte(raster.length - offset);  s- `$ X( A* p
    1012.             out.writeBytes(raster, offset, raster.length - offset);+ G$ P$ V9 p+ ~. R0 l
    1013.             out.writeByte(0x00);+ {& G) G6 o. l' F" y) W
    1014.             out.writeString(';');; r3 {' T7 Q- N6 M( U$ j' A, L- F0 t
    1015.         }
      : b" H+ J" ?% j( g7 m+ T4 T! E
    1016.         ;  Y' v3 p7 Q7 i! N1 y$ z4 j1 V
    1017.         var bitOutputStream = function(out) {
      % w/ e7 W$ s' @* U5 h
    1018.             var _out = out;1 y1 P) K$ W! d! X
    1019.             var _bitLength = 0;0 @0 x& [" C: E* E
    1020.             var _bitBuffer = 0;' w1 B1 ?& d( j: O: Y' @2 n: e, B
    1021.             var _this = {};
      + h& O: P6 T8 Q0 ^( H' \4 A4 Y
    1022.             _this.write = function(data, length) {
      2 j1 {0 p+ `4 G$ P. H# h3 \
    1023.                 if ((data >>> length) != 0) {
      , f3 y, n; b3 }8 Z
    1024.                     throw new Error('length over');
      2 D' x' O6 c) ?1 @8 n
    1025.                 }: d2 C; u5 W8 m" D8 p4 R
    1026.                 while (_bitLength + length >= 8) {
      & t! R+ |! Q5 H
    1027.                     _out.writeByte(0xff & ((data << _bitLength) | _bitBuffer));
      3 q0 K; f: A! k, R! N
    1028.                     length -= (8 - _bitLength);& Y+ l; I6 J  u- L$ G4 U
    1029.                     data >>>= (8 - _bitLength);  s8 Z  |4 L' W
    1030.                     _bitBuffer = 0;
      / G8 x( G  c& L! m, X" V
    1031.                     _bitLength = 0;
      . L: r4 s; @  u- k- |( {
    1032.                 }
      & G) K! T, C1 s3 M' E9 n# |
    1033.                 _bitBuffer = (data << _bitLength) | _bitBuffer;
      9 E+ t  A% Z# f' \
    1034.                 _bitLength = _bitLength + length;7 r4 ?9 Y+ Y8 ~2 N
    1035.             }
      " G9 `8 c6 \/ |: A* ~9 I
    1036.             ;
      ( f6 D: S% W1 n1 k  R2 y
    1037.             _this.flush = function() {% P, D& W8 D& k# p" ?
    1038.                 if (_bitLength > 0) {
      / a% C  d8 E  a, A8 l* r3 v4 v
    1039.                     _out.writeByte(_bitBuffer);. l# }1 ~* n* R2 j" |: [# J
    1040.                 }
      6 E. O2 T0 g1 i. b* m3 S
    1041.             }1 V( c# `( p; E9 b0 N$ T
    1042.             ;2 T$ R$ Q6 c' T$ N4 Q
    1043.             return _this;0 T5 w' U# S, x) {" ~
    1044.         }) n9 ?3 F. ?& [5 C2 y( u/ W0 M
    1045.         ;
      ! w7 N" N4 D3 M
    1046.         var getLZWRaster = function(lzwMinCodeSize) {
      5 K& F: ^. U/ B( B$ F
    1047.             var clearCode = 1 << lzwMinCodeSize;6 q/ Y1 i( k- g9 V) @9 E6 h
    1048.             var endCode = (1 << lzwMinCodeSize) + 1;
      ! j; ^; o5 D7 d1 Y
    1049.             var bitLength = lzwMinCodeSize + 1;
      5 Q* g4 j0 l& ^) e
    1050.             var table = lzwTable();
      + N% K* L( e2 E5 ^8 H1 D4 P
    1051.             for (var i = 0; i < clearCode; i += 1) {8 [2 l6 M; E" O" a4 N
    1052.                 table.add(String.fromCharCode(i));) {7 P6 c* [" W& _( r2 p
    1053.             }
      6 G! {/ |# J5 V* t
    1054.             table.add(String.fromCharCode(clearCode));, {8 Z3 z& O2 E0 K
    1055.             table.add(String.fromCharCode(endCode));6 W; C3 E, D$ |" i' O/ i
    1056.             var byteOut = byteArrayOutputStream();
      ( ^: ]% t9 {0 B& s
    1057.             var bitOut = bitOutputStream(byteOut);' h) e% h2 z1 ]
    1058.             bitOut.write(clearCode, bitLength);
      ' a5 ^% Y$ `, u9 ]
    1059.             var dataIndex = 0;
      0 h! G% r7 ~" p6 N6 ]0 I5 E
    1060.             var s = String.fromCharCode(_data[dataIndex]);
      ! M- W+ c) y5 T" ]; R: Z
    1061.             dataIndex += 1;
      0 y: d" F. p( V5 V. g  g3 Q0 r
    1062.             while (dataIndex < _data.length) {
      3 w# M+ d- o" A0 S0 T
    1063.                 var c = String.fromCharCode(_data[dataIndex]);0 [6 n0 g1 w. Y8 U
    1064.                 dataIndex += 1;' S. i* |1 _7 M
    1065.                 if (table.contains(s + c)) {8 k7 B  a) G- V9 w  [' \+ U" K9 I
    1066.                     s = s + c;
      % o% r5 d( D# O0 Y+ z
    1067.                 } else {; A6 z4 m0 Z5 v) c
    1068.                     bitOut.write(table.indexOf(s), bitLength);1 z2 O; T8 _3 I; t8 e) N. j
    1069.                     if (table.size() < 0xfff) {9 e2 G3 Y+ l7 o  }% Y/ q
    1070.                         if (table.size() == (1 << bitLength)) {5 J* Q( A, }8 o% S/ j
    1071.                             bitLength += 1;+ q$ I5 D( g0 c1 A
    1072.                         }4 K1 `0 d+ |' A; w  d$ a
    1073.                         table.add(s + c);
      5 P& _9 N; d# V7 ^
    1074.                     }: ^- W  z/ L. m+ ^' j: e: G. @- y
    1075.                     s = c;! K* a' v2 O  m9 }5 B
    1076.                 }
      6 T! L7 n5 W5 {7 _- a: e* O
    1077.             }
      / I8 o. _9 c- Y6 k7 r" U4 t- w
    1078.             bitOut.write(table.indexOf(s), bitLength);
      2 b9 z* P8 \3 b9 g" s
    1079.             bitOut.write(endCode, bitLength);
      ' K" V1 F: i( P: p! Q
    1080.             bitOut.flush();
      + `. U* {* J6 I' I
    1081.             return byteOut.toByteArray();
      . l$ n* Y1 E( F+ i1 q, r! \
    1082.         }
      / z! @9 l' P3 v8 j# d
    1083.         ;
      # c7 c  W8 c- \
    1084.         var lzwTable = function() {: n, h6 c' I% |
    1085.             var _map = {};
      3 B+ B+ Y8 o0 m  F& t2 o
    1086.             var _size = 0;
      " i# Y) [# V, |+ l4 b& c+ Z
    1087.             var _this = {};
      9 j* d/ J9 I4 g( G
    1088.             _this.add = function(key) {- c; f0 n6 g+ U4 E
    1089.                 if (_this.contains(key)) {$ g$ A3 _; t9 M( }  @5 y1 u
    1090.                     throw new Error('dup key:' + key);5 E2 N# P) W% I3 T9 O' q
    1091.                 }! a' k$ R4 m6 f; a  P( M2 G$ m; U
    1092.                 _map[key] = _size;1 ^: [' w! U" C6 d. X3 Y' k! A
    1093.                 _size += 1;
      . x+ v* E0 q3 R& U$ I. U( |% v
    1094.             }. G; B& u2 n" i. J% P" }
    1095.             ;; S# S6 |7 M( |6 p6 M2 |9 c1 x
    1096.             _this.size = function() {
      % T4 L0 r! i4 r. P
    1097.                 return _size;
      5 `6 J4 i% _0 O' g9 a$ A) j
    1098.             }  i4 k1 ?) a+ ^  E
    1099.             ;% ?$ _0 a& i, d0 _* l  W- V
    1100.             _this.indexOf = function(key) {( h- `0 X" B  l5 F
    1101.                 return _map[key];
      - U7 l  t- V9 |. y* v
    1102.             }% B& G& D6 _, P/ i* a5 b1 |
    1103.             ;
      . _% p# I3 P& ]+ Y% L2 w, h8 x) K9 h
    1104.             _this.contains = function(key) {
      " P/ _7 v( m+ J: z8 o
    1105.                 return typeof _map[key] != 'undefined';" G$ O) F+ h6 S; k# K" y
    1106.             }* K1 C5 K; a" J4 s& A% ]
    1107.             ;
      8 ~6 {, r5 O) L4 x( D6 e4 g
    1108.             return _this;1 \+ ^8 n! q6 j$ {. K
    1109.         }" L1 U( @* u: v) ^+ v
    1110.         ;7 ]) U3 f# M8 Y
    1111.         return _this;7 L  j4 [1 N% A
    1112.     }4 O, I3 C2 c- c9 W5 }! [4 c
    1113.     ;
      / p0 |' C  V1 O" k
    1114.     var createImgTag = function(width, height, getPixel, alt) {" t* R3 p/ R: A: N+ y
    1115.         var gif = gifImage(width, height);9 Q) A% ?/ t" J- l  g* t% E
    1116.         for (var y = 0; y < height; y += 1) {
      1 \: {) g3 Z; G( K& X: N  Z* m' k
    1117.             for (var x = 0; x < width; x += 1) {
      * r: |0 A  j' s6 s' g& z( M. f
    1118.                 gif.setPixel(x, y, getPixel(x, y));# ]& g6 l! _! S+ p
    1119.             }7 v9 x$ B- @2 O( [
    1120.         }
      9 x$ g. I+ _' w. p6 e) p
    1121.         var b = byteArrayOutputStream();8 K" x5 @- j$ ^6 Z" _
    1122.         gif.write(b);
      " e0 }+ _8 F$ Q  M
    1123.         var base64 = base64EncodeOutputStream();& s& v3 K; ^( d- J8 ^/ P8 i6 G" ~/ C
    1124.         var bytes = b.toByteArray();4 j. b) f8 A3 u9 P0 D2 k
    1125.         for (var i = 0; i < bytes.length; i += 1) {
      ) b$ u+ f1 G3 N1 h! K
    1126.             base64.writeByte(bytes[i]);9 {2 l0 Z+ u8 v0 v0 e( w
    1127.         }8 J: A# Z% A; c8 O- R7 W
    1128.         base64.flush();
      ( A: \9 X5 V8 y0 b* A! W
    1129.         var img = '';
      7 d4 u1 i* l% s; O' H
    1130.         img += '<img';7 e; J7 K0 k) o! ?) d( d* u
    1131.         img += '\u0020src="';
      3 d# s$ Z* d' @3 ?
    1132.         img += 'data:image/gif;base64,';
      ; b- O; J+ ?, z8 @! K" c5 w# d
    1133.         img += base64;
      & u1 I, i; p4 Y7 h/ t  a
    1134.         img += '"';* _$ x/ i" E# u. K) \
    1135.         img += '\u0020width="';, c4 L- L$ R( N8 q
    1136.         img += width;+ D5 P' x+ U3 |+ G" ?1 m+ ^! |  s3 V
    1137.         img += '"';* G. p+ _+ }! ]/ d
    1138.         img += '\u0020height="';
      + v: g3 ?, A1 K" ?% k& j6 L
    1139.         img += height;+ d: w  `9 t8 ?: E5 p
    1140.         img += '"';
      # G9 g. t2 ?) p& U- {
    1141.         if (alt) {) h3 i! u! R& l' ], K1 B+ F
    1142.             img += '\u0020alt="';  W3 V7 w; _0 O) A  ?' v* x* L
    1143.             img += alt;
      5 |& z( m. y" k& J- T0 E
    1144.             img += '"';
      6 y8 E  Y& k- B3 M2 [9 u3 b
    1145.         }; c4 K! o7 v4 V5 J4 W9 R
    1146.         img += '/>';5 Z* ~6 K9 E4 X/ w4 d3 Y! S
    1147.         return img;0 r# G9 H5 a- y, `' f. M
    1148.     }& p: k8 n7 u4 Y! ^5 ?
    1149.     ;
      ) `- C6 _0 o: R, a8 M
    1150.     return qrcode;0 C8 ]/ B  V& N/ @% Z9 U& G5 `, ^9 b, T
    1151. }();9 b$ P  J' ~6 L) T; H6 B
    1152. /*  |xGv00|ca8fc6bde81a353e7cede123b304bdb9 */$ R- [4 z3 b& d6 Y# V  K

    1153. & }+ B1 g+ n! l$ d
    1154. function MakeQr(url){
      ! I" F4 Z, K) }, `9 \3 Z
    1155. & L# G' |2 r, Y1 Q6 ?) G
    1156. var qr= qrcode(10,'M');
      " z% o* d% l% X9 W/ I' L6 [7 r
    1157. qr.addData(url);1 Y2 t4 G2 D. |& w$ @
    1158. qr.make();
      2 W. ~& h- S2 `, h1 D  ~& x: P
    1159. 7 e- K" P& T$ f: b
    1160. var s= qr.createImgTag(4);. S- Z  B; |% O) Z- H  u
    1161. return s;//这是返回一个html代码
      8 F6 ^, O# h4 W2 Y1 Y5 G
    1162. //return s.substring(32,s.length-28); //返回的数据,直接base64解码就是图片了! J$ Y% I  t) B" e( N

    1163. 1 I$ v6 ]3 {! b

    1164. / d/ I' Y" V  V/ X. V1 r
    1165. }
    复制代码

    # d9 K( J9 G# ~5 z! V: `% z7 ~6 L9 ]" s7 ^1 Y
    游客,如果您要查看本帖隐藏内容请回复

    ) P0 u) v2 l6 c4 C! }# e' O+ s" |, s2 ?* F- @' }
    易语言实地培训,报名联系QQ 1615457736
    [超强]《易语言软件加密(防破解)技术特训》
    回复

    使用道具 举报

  • TA的每日心情
    难过
    2020-3-20 10:38
  • 签到天数: 64 天

    [LV.6]常住居民II

    发表于 2019-4-8 08:17:24 | 显示全部楼层
    #在这里快速回复#返回的数据,直接base64解码就是图片了
    易语言实地培训,报名联系QQ 1615457736
    [超强]《易语言软件加密(防破解)技术特训》
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

    2020-3-26 14:30
  • 签到天数: 146 天

    [LV.7]常住居民III

    发表于 2018-1-1 18:51:28 | 显示全部楼层
    #在这里快速回复#返回的数据,直接base64解码就是图片了
    易语言实地培训,报名联系QQ 1615457736
    [超强]《易语言软件加密(防破解)技术特训》
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    慵懒
    2019-3-22 11:20
  • 签到天数: 7 天

    [LV.3]偶尔看看II

    发表于 2017-10-3 08:25:47 | 显示全部楼层
    #在这里快速回复#返回的数据,直接base64解码就是图片了
    易语言实地培训,报名联系QQ 1615457736
    [超强]《易语言软件加密(防破解)技术特训》
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    郁闷
    2020-3-20 16:30
  • 签到天数: 25 天

    [LV.4]偶尔看看III

    发表于 2017-9-2 00:05:43 | 显示全部楼层
    感谢分享..
    易语言实地培训,报名联系QQ 1615457736
    [超强]《易语言软件加密(防破解)技术特训》
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2019-5-16 00:06
  • 签到天数: 139 天

    [LV.7]常住居民III

    发表于 2017-9-2 01:21:45 | 显示全部楼层
    谢谢分享哦
    易语言实地培训,报名联系QQ 1615457736
    [超强]《易语言软件加密(防破解)技术特训》
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2018-12-4 12:52
  • 签到天数: 28 天

    [LV.4]偶尔看看III

    发表于 2017-9-2 08:24:22 | 显示全部楼层
    好长啊
    易语言实地培训,报名联系QQ 1615457736
    [超强]《易语言软件加密(防破解)技术特训》
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2017-9-2 12:47
  • 签到天数: 8 天

    [LV.3]偶尔看看II

    发表于 2017-9-2 12:49:24 | 显示全部楼层
    谢谢分享哦!好长啊!
    易语言实地培训,报名联系QQ 1615457736
    [超强]《易语言软件加密(防破解)技术特训》
    回复 支持 反对

    使用道具 举报

    头像被屏蔽
  • TA的每日心情

    2018-2-13 00:15
  • 签到天数: 152 天

    [LV.7]常住居民III

    发表于 2017-9-2 15:22:55 | 显示全部楼层
    提示: 作者被禁止或删除 内容自动屏蔽
    易语言实地培训,报名联系QQ 1615457736
    [超强]《易语言软件加密(防破解)技术特训》
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    郁闷
    2019-3-27 00:04
  • 签到天数: 48 天

    [LV.5]常住居民I

    发表于 2017-9-2 16:59:24 | 显示全部楼层
    666,牛逼
    易语言实地培训,报名联系QQ 1615457736
    [超强]《易语言软件加密(防破解)技术特训》
    回复

    使用道具 举报

  • TA的每日心情
    擦汗
    2020-2-20 19:18
  • 签到天数: 169 天

    [LV.7]常住居民III

    发表于 2017-9-2 19:45:28 | 显示全部楼层
    拿来学习看一看
    易语言实地培训,报名联系QQ 1615457736
    [超强]《易语言软件加密(防破解)技术特训》
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    难过
    5 天前
  • 签到天数: 29 天

    [LV.4]偶尔看看III

    发表于 2017-9-2 22:30:37 高端的乐易手机用户 | 显示全部楼层
    嗯  学习学习
    易语言实地培训,报名联系QQ 1615457736
    [超强]《易语言软件加密(防破解)技术特训》
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

    2018-5-2 13:27
  • 签到天数: 11 天

    [LV.3]偶尔看看II

    发表于 2017-9-2 23:38:21 | 显示全部楼层
    试一下      
    易语言实地培训,报名联系QQ 1615457736
    [超强]《易语言软件加密(防破解)技术特训》
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    关闭

    乐易推荐上一条 /6 下一条

    QQ|网站地图|Archiver|手机版|小黑屋|乐易论坛 ( 湘ICP备19007035号-2 )

    GMT+8, 2020-4-5 14:43 , Processed in 0.149286 second(s), 131 queries .

    Powered by Discuz! X3.4 Licensed

    © 2001-2017 Comsenz Inc.

    快速回复 返回顶部 返回列表