乐易论坛-乐易网易语言培训教程火山PC视窗中文编程交流论坛

 找回密码
 立即注册

手机号登录

用手机号号登陆

微信登录

微信扫码,快速开始

QQ登录

用QQ账号登陆

办理VIP,定制软件,报名培训联系QQ[重磅]2024年实地培训高清培训目录火山PC版乐易模块使用教程
有了火山,易语言是否还有必要学习吗?易语言0基础入门课程火山PC视窗0基础入门课程
乐易论坛官方QQ群一览表易语言外挂0基础入门课程火山PC视窗火山HOOK入门课程
易语言误报处理课程QQ空间POST课程2022年火山PC易语言POST系列课程
Android逆向Jeb动态调试0基础课程QQ邮箱网页POST课程WeChat个微Hook实战课程
百日Js加密分析实战课程(无密下载)QQ群POST课程h5游戏WebSocket逆向视频
JavaScript加密特训课程易语言汇编快速入门课程破解实战系列课程
手游模拟器脚本0基础课程易语言加密防破解0基础入门课程广告位招租联系QQ1615457736
查看: 33934|回复: 35

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

[复制链接]

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

[复制链接]
已绑定手机
已实名认证
揰掵佲
等级头衔

等級:乐易运营组

Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20

积分成就
易币
贡献
主题
精华
金钱
积分
33747
注册时间
2014-8-2
最后登录
1970-1-1

勋章墙

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

据统计90%查看本帖的人,都已经注册本站了哦

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

×
效果图

QQ截图20170901212930.jpg

  1. var qrcode = function() {
  2.     var qrcode = function(typeNumber, errorCorrectLevel) {
  3.         var PAD0 = 0xEC;
  4.         var PAD1 = 0x11;
  5.         var _typeNumber = typeNumber;
  6.         var _errorCorrectLevel = QRErrorCorrectLevel[errorCorrectLevel];
  7.         var _modules = null ;
  8.         var _moduleCount = 0;
  9.         var _dataCache = null ;
  10.         var _dataList = new Array();
  11.         var _this = {};
  12.         var makeImpl = function(test, maskPattern) {
  13.             _moduleCount = _typeNumber * 4 + 17;
  14.             _modules = function(moduleCount) {
  15.                 var modules = new Array(moduleCount);
  16.                 for (var row = 0; row < moduleCount; row += 1) {
  17.                     modules[row] = new Array(moduleCount);
  18.                     for (var col = 0; col < moduleCount; col += 1) {
  19.                         modules[row][col] = null ;
  20.                     }
  21.                 }
  22.                 return modules;
  23.             }(_moduleCount);
  24.             setupPositionProbePattern(0, 0);
  25.             setupPositionProbePattern(_moduleCount - 7, 0);
  26.             setupPositionProbePattern(0, _moduleCount - 7);
  27.             setupPositionAdjustPattern();
  28.             setupTimingPattern();
  29.             setupTypeInfo(test, maskPattern);
  30.             if (_typeNumber >= 7) {
  31.                 setupTypeNumber(test);
  32.             }
  33.             if (_dataCache == null ) {
  34.                 _dataCache = createData(_typeNumber, _errorCorrectLevel, _dataList);
  35.             }
  36.             mapData(_dataCache, maskPattern);
  37.         }
  38.         ;
  39.         var setupPositionProbePattern = function(row, col) {
  40.             for (var r = -1; r <= 7; r += 1) {
  41.                 if (row + r <= -1 || _moduleCount <= row + r)
  42.                     continue;for (var c = -1; c <= 7; c += 1) {
  43.                     if (col + c <= -1 || _moduleCount <= col + c)
  44.                         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)) {
  45.                         _modules[row + r][col + c] = true;
  46.                     } else {
  47.                         _modules[row + r][col + c] = false;
  48.                     }
  49.                 }
  50.             }
  51.         }
  52.         ;
  53.         var getBestMaskPattern = function() {
  54.             var minLostPoint = 0;
  55.             var pattern = 0;
  56.             for (var i = 0; i < 8; i += 1) {
  57.                 makeImpl(true, i);
  58.                 var lostPoint = QRUtil.getLostPoint(_this);
  59.                 if (i == 0 || minLostPoint > lostPoint) {
  60.                     minLostPoint = lostPoint;
  61.                     pattern = i;
  62.                 }
  63.             }
  64.             return pattern;
  65.         }
  66.         ;
  67.         var setupTimingPattern = function() {
  68.             for (var r = 8; r < _moduleCount - 8; r += 1) {
  69.                 if (_modules[r][6] != null ) {
  70.                     continue;
  71.                 }
  72.                 _modules[r][6] = (r % 2 == 0);
  73.             }
  74.             for (var c = 8; c < _moduleCount - 8; c += 1) {
  75.                 if (_modules[6][c] != null ) {
  76.                     continue;
  77.                 }
  78.                 _modules[6][c] = (c % 2 == 0);
  79.             }
  80.         }
  81.         ;
  82.         var setupPositionAdjustPattern = function() {
  83.             var pos = QRUtil.getPatternPosition(_typeNumber);
  84.             for (var i = 0; i < pos.length; i += 1) {
  85.                 for (var j = 0; j < pos.length; j += 1) {
  86.                     var row = pos[i];
  87.                     var col = pos[j];
  88.                     if (_modules[row][col] != null ) {
  89.                         continue;
  90.                     }
  91.                     for (var r = -2; r <= 2; r += 1) {
  92.                         for (var c = -2; c <= 2; c += 1) {
  93.                             if (r == -2 || r == 2 || c == -2 || c == 2 || (r == 0 && c == 0)) {
  94.                                 _modules[row + r][col + c] = true;
  95.                             } else {
  96.                                 _modules[row + r][col + c] = false;
  97.                             }
  98.                         }
  99.                     }
  100.                 }
  101.             }
  102.         }
  103.         ;
  104.         var setupTypeNumber = function(test) {
  105.             var bits = QRUtil.getBCHTypeNumber(_typeNumber);
  106.             for (var i = 0; i < 18; i += 1) {
  107.                 var mod = (!test && ((bits >> i) & 1) == 1);
  108.                 _modules[Math.floor(i / 3)][i % 3 + _moduleCount - 8 - 3] = mod;
  109.             }
  110.             for (var i = 0; i < 18; i += 1) {
  111.                 var mod = (!test && ((bits >> i) & 1) == 1);
  112.                 _modules[i % 3 + _moduleCount - 8 - 3][Math.floor(i / 3)] = mod;
  113.             }
  114.         }
  115.         ;
  116.         var setupTypeInfo = function(test, maskPattern) {
  117.             var data = (_errorCorrectLevel << 3) | maskPattern;
  118.             var bits = QRUtil.getBCHTypeInfo(data);
  119.             for (var i = 0; i < 15; i += 1) {
  120.                 var mod = (!test && ((bits >> i) & 1) == 1);
  121.                 if (i < 6) {
  122.                     _modules[i][8] = mod;
  123.                 } else if (i < 8) {
  124.                     _modules[i + 1][8] = mod;
  125.                 } else {
  126.                     _modules[_moduleCount - 15 + i][8] = mod;
  127.                 }
  128.             }
  129.             for (var i = 0; i < 15; i += 1) {
  130.                 var mod = (!test && ((bits >> i) & 1) == 1);
  131.                 if (i < 8) {
  132.                     _modules[8][_moduleCount - i - 1] = mod;
  133.                 } else if (i < 9) {
  134.                     _modules[8][15 - i - 1 + 1] = mod;
  135.                 } else {
  136.                     _modules[8][15 - i - 1] = mod;
  137.                 }
  138.             }
  139.             _modules[_moduleCount - 8][8] = (!test);
  140.         }
  141.         ;
  142.         var mapData = function(data, maskPattern) {
  143.             var inc = -1;
  144.             var row = _moduleCount - 1;
  145.             var bitIndex = 7;
  146.             var byteIndex = 0;
  147.             var maskFunc = QRUtil.getMaskFunction(maskPattern);
  148.             for (var col = _moduleCount - 1; col > 0; col -= 2) {
  149.                 if (col == 6)
  150.                     col -= 1;
  151.                 while (true) {
  152.                     for (var c = 0; c < 2; c += 1) {
  153.                         if (_modules[row][col - c] == null ) {
  154.                             var dark = false;
  155.                             if (byteIndex < data.length) {
  156.                                 dark = (((data[byteIndex] >>> bitIndex) & 1) == 1);
  157.                             }
  158.                             var mask = maskFunc(row, col - c);
  159.                             if (mask) {
  160.                                 dark = !dark;
  161.                             }
  162.                             _modules[row][col - c] = dark;
  163.                             bitIndex -= 1;
  164.                             if (bitIndex == -1) {
  165.                                 byteIndex += 1;
  166.                                 bitIndex = 7;
  167.                             }
  168.                         }
  169.                     }
  170.                     row += inc;
  171.                     if (row < 0 || _moduleCount <= row) {
  172.                         row -= inc;
  173.                         inc = -inc;
  174.                         break;
  175.                     }
  176.                 }
  177.             }
  178.         }
  179.         ;
  180.         var createBytes = function(buffer, rsBlocks) {
  181.             var offset = 0;
  182.             var maxDcCount = 0;
  183.             var maxEcCount = 0;
  184.             var dcdata = new Array(rsBlocks.length);
  185.             var ecdata = new Array(rsBlocks.length);
  186.             for (var r = 0; r < rsBlocks.length; r += 1) {
  187.                 var dcCount = rsBlocks[r].dataCount;
  188.                 var ecCount = rsBlocks[r].totalCount - dcCount;
  189.                 maxDcCount = Math.max(maxDcCount, dcCount);
  190.                 maxEcCount = Math.max(maxEcCount, ecCount);
  191.                 dcdata[r] = new Array(dcCount);
  192.                 for (var i = 0; i < dcdata[r].length; i += 1) {
  193.                     dcdata[r][i] = 0xff & buffer.getBuffer()[i + offset];
  194.                 }
  195.                 offset += dcCount;
  196.                 var rsPoly = QRUtil.getErrorCorrectPolynomial(ecCount);
  197.                 var rawPoly = qrPolynomial(dcdata[r], rsPoly.getLength() - 1);
  198.                 var modPoly = rawPoly.mod(rsPoly);
  199.                 ecdata[r] = new Array(rsPoly.getLength() - 1);
  200.                 for (var i = 0; i < ecdata[r].length; i += 1) {
  201.                     var modIndex = i + modPoly.getLength() - ecdata[r].length;
  202.                     ecdata[r][i] = (modIndex >= 0) ? modPoly.getAt(modIndex) : 0;
  203.                 }
  204.             }
  205.             var totalCodeCount = 0;
  206.             for (var i = 0; i < rsBlocks.length; i += 1) {
  207.                 totalCodeCount += rsBlocks[i].totalCount;
  208.             }
  209.             var data = new Array(totalCodeCount);
  210.             var index = 0;
  211.             for (var i = 0; i < maxDcCount; i += 1) {
  212.                 for (var r = 0; r < rsBlocks.length; r += 1) {
  213.                     if (i < dcdata[r].length) {
  214.                         data[index] = dcdata[r][i];
  215.                         index += 1;
  216.                     }
  217.                 }
  218.             }
  219.             for (var i = 0; i < maxEcCount; i += 1) {
  220.                 for (var r = 0; r < rsBlocks.length; r += 1) {
  221.                     if (i < ecdata[r].length) {
  222.                         data[index] = ecdata[r][i];
  223.                         index += 1;
  224.                     }
  225.                 }
  226.             }
  227.             return data;
  228.         }
  229.         ;
  230.         var createData = function(typeNumber, errorCorrectLevel, dataList) {
  231.             var rsBlocks = QRRSBlock.getRSBlocks(typeNumber, errorCorrectLevel);
  232.             var buffer = qrBitBuffer();
  233.             for (var i = 0; i < dataList.length; i += 1) {
  234.                 var data = dataList[i];
  235.                 buffer.put(data.getMode(), 4);
  236.                 buffer.put(data.getLength(), QRUtil.getLengthInBits(data.getMode(), typeNumber));
  237.                 data.write(buffer);
  238.             }
  239.             var totalDataCount = 0;
  240.             for (var i = 0; i < rsBlocks.length; i += 1) {
  241.                 totalDataCount += rsBlocks[i].dataCount;
  242.             }
  243.             if (buffer.getLengthInBits() > totalDataCount * 8) {
  244.                 throw new Error('code length overflow. ('
  245.                 + buffer.getLengthInBits()
  246.                 + '>'
  247.                 + totalDataCount * 8
  248.                 + ')');
  249.             }
  250.             if (buffer.getLengthInBits() + 4 <= totalDataCount * 8) {
  251.                 buffer.put(0, 4);
  252.             }
  253.             while (buffer.getLengthInBits() % 8 != 0) {
  254.                 buffer.putBit(false);
  255.             }
  256.             while (true) {
  257.                 if (buffer.getLengthInBits() >= totalDataCount * 8) {
  258.                     break;
  259.                 }
  260.                 buffer.put(PAD0, 8);
  261.                 if (buffer.getLengthInBits() >= totalDataCount * 8) {
  262.                     break;
  263.                 }
  264.                 buffer.put(PAD1, 8);
  265.             }
  266.             return createBytes(buffer, rsBlocks);
  267.         }
  268.         ;
  269.         _this.addData = function(data) {
  270.             var newData = qr8BitByte(data);
  271.             _dataList.push(newData);
  272.             _dataCache = null ;
  273.         }
  274.         ;
  275.         _this.isDark = function(row, col) {
  276.             if (row < 0 || _moduleCount <= row || col < 0 || _moduleCount <= col) {
  277.                 throw new Error(row + ',' + col);
  278.             }
  279.             return _modules[row][col];
  280.         }
  281.         ;
  282.         _this.getModuleCount = function() {
  283.             return _moduleCount;
  284.         }
  285.         ;
  286.         _this.make = function() {
  287.             makeImpl(false, getBestMaskPattern());
  288.         }
  289.         ;
  290.         _this.createTableTag = function(cellSize, margin) {
  291.             cellSize = cellSize || 2;
  292.             margin = (typeof margin == 'undefined') ? cellSize * 4 : margin;
  293.             var qrHtml = '';
  294.             qrHtml += '<table style="';
  295.             qrHtml += ' border-width: 0px; border-style: none;';
  296.             qrHtml += ' border-collapse: collapse;';
  297.             qrHtml += ' padding: 0px; margin: ' + margin + 'px;';
  298.             qrHtml += '">';
  299.             qrHtml += '<tbody>';
  300.             for (var r = 0; r < _this.getModuleCount(); r += 1) {
  301.                 qrHtml += '<tr>';
  302.                 for (var c = 0; c < _this.getModuleCount(); c += 1) {
  303.                     qrHtml += '<td style="';
  304.                     qrHtml += ' border-width: 0px; border-style: none;';
  305.                     qrHtml += ' border-collapse: collapse;';
  306.                     qrHtml += ' padding: 0px; margin: 0px;';
  307.                     qrHtml += ' width: ' + cellSize + 'px;';
  308.                     qrHtml += ' height: ' + cellSize + 'px;';
  309.                     qrHtml += ' background-color: ';
  310.                     qrHtml += _this.isDark(r, c) ? '#000000' : '#ffffff';
  311.                     qrHtml += ';';
  312.                     qrHtml += '"/>';
  313.                 }
  314.                 qrHtml += '</tr>';
  315.             }
  316.             qrHtml += '</tbody>';
  317.             qrHtml += '</table>';
  318.             return qrHtml;
  319.         }
  320.         ;
  321.         _this.createImgTag = function(cellSize, margin) {
  322.             cellSize = cellSize || 2;
  323.             margin = (typeof margin == 'undefined') ? cellSize * 4 : margin;
  324.             var size = _this.getModuleCount() * cellSize + margin * 2;
  325.             var min = margin;
  326.             var max = size - margin;
  327.             return createImgTag(size, size, function(x, y) {
  328.                 if (min <= x && x < max && min <= y && y < max) {
  329.                     var c = Math.floor((x - min) / cellSize);
  330.                     var r = Math.floor((y - min) / cellSize);
  331.                     return _this.isDark(r, c) ? 0 : 1;
  332.                 } else {
  333.                     return 1;
  334.                 }
  335.             });
  336.         }
  337.         ;
  338.         return _this;
  339.     }
  340.     ;
  341.     qrcode.stringToBytes = function(s) {
  342.         var bytes = new Array();
  343.         for (var i = 0; i < s.length; i += 1) {
  344.             var c = s.charCodeAt(i);
  345.             bytes.push(c & 0xff);
  346.         }
  347.         return bytes;
  348.     }
  349.     ;
  350.     qrcode.createStringToBytes = function(unicodeData, numChars) {
  351.         var unicodeMap = function() {
  352.             var bin = base64DecodeInputStream(unicodeData);
  353.             var read = function() {
  354.                 var b = bin.read();
  355.                 if (b == -1)
  356.                     throw new Error();
  357.                 return b;
  358.             }
  359.             ;
  360.             var count = 0;
  361.             var unicodeMap = {};
  362.             while (true) {
  363.                 var b0 = bin.read();
  364.                 if (b0 == -1)
  365.                     break;
  366.                 var b1 = read();
  367.                 var b2 = read();
  368.                 var b3 = read();
  369.                 var k = String.fromCharCode((b0 << 8) | b1);
  370.                 var v = (b2 << 8) | b3;
  371.                 unicodeMap[k] = v;
  372.                 count += 1;
  373.             }
  374.             if (count != numChars) {
  375.                 throw new Error(count + ' != ' + numChars);
  376.             }
  377.             return unicodeMap;
  378.         }();
  379.         var unknownChar = '?'.charCodeAt(0);
  380.         return function(s) {
  381.             var bytes = new Array();
  382.             for (var i = 0; i < s.length; i += 1) {
  383.                 var c = s.charCodeAt(i);
  384.                 if (c < 128) {
  385.                     bytes.push(c);
  386.                 } else {
  387.                     var b = unicodeMap[s.charAt(i)];
  388.                     if (typeof b == 'number') {
  389.                         if ((b & 0xff) == b) {
  390.                             bytes.push(b);
  391.                         } else {
  392.                             bytes.push(b >>> 8);
  393.                             bytes.push(b & 0xff);
  394.                         }
  395.                     } else {
  396.                         bytes.push(unknownChar);
  397.                     }
  398.                 }
  399.             }
  400.             return bytes;
  401.         }
  402.         ;
  403.     }
  404.     ;
  405.     var QRMode = {
  406.         MODE_NUMBER: 1 << 0,
  407.         MODE_ALPHA_NUM: 1 << 1,
  408.         MODE_8BIT_BYTE: 1 << 2,
  409.         MODE_KANJI: 1 << 3
  410.     };
  411.     var QRErrorCorrectLevel = {
  412.         L: 1,
  413.         M: 0,
  414.         Q: 3,
  415.         H: 2
  416.     };
  417.     var QRMaskPattern = {
  418.         PATTERN000: 0,
  419.         PATTERN001: 1,
  420.         PATTERN010: 2,
  421.         PATTERN011: 3,
  422.         PATTERN100: 4,
  423.         PATTERN101: 5,
  424.         PATTERN110: 6,
  425.         PATTERN111: 7
  426.     };
  427.     var QRUtil = function() {
  428.         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]];
  429.         var G15 = (1 << 10) | (1 << 8) | (1 << 5) | (1 << 4) | (1 << 2) | (1 << 1) | (1 << 0);
  430.         var G18 = (1 << 12) | (1 << 11) | (1 << 10) | (1 << 9) | (1 << 8) | (1 << 5) | (1 << 2) | (1 << 0);
  431.         var G15_MASK = (1 << 14) | (1 << 12) | (1 << 10) | (1 << 4) | (1 << 1);
  432.         var _this = {};
  433.         var getBCHDigit = function(data) {
  434.             var digit = 0;
  435.             while (data != 0) {
  436.                 digit += 1;
  437.                 data >>>= 1;
  438.             }
  439.             return digit;
  440.         }
  441.         ;
  442.         _this.getBCHTypeInfo = function(data) {
  443.             var d = data << 10;
  444.             while (getBCHDigit(d) - getBCHDigit(G15) >= 0) {
  445.                 d ^= (G15 << (getBCHDigit(d) - getBCHDigit(G15)));
  446.             }
  447.             return ((data << 10) | d) ^ G15_MASK;
  448.         }
  449.         ;
  450.         _this.getBCHTypeNumber = function(data) {
  451.             var d = data << 12;
  452.             while (getBCHDigit(d) - getBCHDigit(G18) >= 0) {
  453.                 d ^= (G18 << (getBCHDigit(d) - getBCHDigit(G18)));
  454.             }
  455.             return (data << 12) | d;
  456.         }
  457.         ;
  458.         _this.getPatternPosition = function(typeNumber) {
  459.             return PATTERN_POSITION_TABLE[typeNumber - 1];
  460.         }
  461.         ;
  462.         _this.getMaskFunction = function(maskPattern) {
  463.             switch (maskPattern) {
  464.             case QRMaskPattern.PATTERN000:
  465.                 return function(i, j) {
  466.                     return (i + j) % 2 == 0;
  467.                 }
  468.                 ;
  469.             case QRMaskPattern.PATTERN001:
  470.                 return function(i, j) {
  471.                     return i % 2 == 0;
  472.                 }
  473.                 ;
  474.             case QRMaskPattern.PATTERN010:
  475.                 return function(i, j) {
  476.                     return j % 3 == 0;
  477.                 }
  478.                 ;
  479.             case QRMaskPattern.PATTERN011:
  480.                 return function(i, j) {
  481.                     return (i + j) % 3 == 0;
  482.                 }
  483.                 ;
  484.             case QRMaskPattern.PATTERN100:
  485.                 return function(i, j) {
  486.                     return (Math.floor(i / 2) + Math.floor(j / 3)) % 2 == 0;
  487.                 }
  488.                 ;
  489.             case QRMaskPattern.PATTERN101:
  490.                 return function(i, j) {
  491.                     return (i * j) % 2 + (i * j) % 3 == 0;
  492.                 }
  493.                 ;
  494.             case QRMaskPattern.PATTERN110:
  495.                 return function(i, j) {
  496.                     return ((i * j) % 2 + (i * j) % 3) % 2 == 0;
  497.                 }
  498.                 ;
  499.             case QRMaskPattern.PATTERN111:
  500.                 return function(i, j) {
  501.                     return ((i * j) % 3 + (i + j) % 2) % 2 == 0;
  502.                 }
  503.                 ;
  504.             default:
  505.                 throw new Error('bad maskPattern:' + maskPattern);
  506.             }
  507.         }
  508.         ;
  509.         _this.getErrorCorrectPolynomial = function(errorCorrectLength) {
  510.             var a = qrPolynomial([1], 0);
  511.             for (var i = 0; i < errorCorrectLength; i += 1) {
  512.                 a = a.multiply(qrPolynomial([1, QRMath.gexp(i)], 0));
  513.             }
  514.             return a;
  515.         }
  516.         ;
  517.         _this.getLengthInBits = function(mode, type) {
  518.             if (1 <= type && type < 10) {
  519.                 switch (mode) {
  520.                 case QRMode.MODE_NUMBER:
  521.                     return 10;
  522.                 case QRMode.MODE_ALPHA_NUM:
  523.                     return 9;
  524.                 case QRMode.MODE_8BIT_BYTE:
  525.                     return 8;
  526.                 case QRMode.MODE_KANJI:
  527.                     return 8;
  528.                 default:
  529.                     throw new Error('mode:' + mode);
  530.                 }
  531.             } else if (type < 27) {
  532.                 switch (mode) {
  533.                 case QRMode.MODE_NUMBER:
  534.                     return 12;
  535.                 case QRMode.MODE_ALPHA_NUM:
  536.                     return 11;
  537.                 case QRMode.MODE_8BIT_BYTE:
  538.                     return 16;
  539.                 case QRMode.MODE_KANJI:
  540.                     return 10;
  541.                 default:
  542.                     throw new Error('mode:' + mode);
  543.                 }
  544.             } else if (type < 41) {
  545.                 switch (mode) {
  546.                 case QRMode.MODE_NUMBER:
  547.                     return 14;
  548.                 case QRMode.MODE_ALPHA_NUM:
  549.                     return 13;
  550.                 case QRMode.MODE_8BIT_BYTE:
  551.                     return 16;
  552.                 case QRMode.MODE_KANJI:
  553.                     return 12;
  554.                 default:
  555.                     throw new Error('mode:' + mode);
  556.                 }
  557.             } else {
  558.                 throw new Error('type:' + type);
  559.             }
  560.         }
  561.         ;
  562.         _this.getLostPoint = function(qrcode) {
  563.             var moduleCount = qrcode.getModuleCount();
  564.             var lostPoint = 0;
  565.             for (var row = 0; row < moduleCount; row += 1) {
  566.                 for (var col = 0; col < moduleCount; col += 1) {
  567.                     var sameCount = 0;
  568.                     var dark = qrcode.isDark(row, col);
  569.                     for (var r = -1; r <= 1; r += 1) {
  570.                         if (row + r < 0 || moduleCount <= row + r) {
  571.                             continue;
  572.                         }
  573.                         for (var c = -1; c <= 1; c += 1) {
  574.                             if (col + c < 0 || moduleCount <= col + c) {
  575.                                 continue;
  576.                             }
  577.                             if (r == 0 && c == 0) {
  578.                                 continue;
  579.                             }
  580.                             if (dark == qrcode.isDark(row + r, col + c)) {
  581.                                 sameCount += 1;
  582.                             }
  583.                         }
  584.                     }
  585.                     if (sameCount > 5) {
  586.                         lostPoint += (3 + sameCount - 5);
  587.                     }
  588.                 }
  589.             }
  590.             ;for (var row = 0; row < moduleCount - 1; row += 1) {
  591.                 for (var col = 0; col < moduleCount - 1; col += 1) {
  592.                     var count = 0;
  593.                     if (qrcode.isDark(row, col))
  594.                         count += 1;
  595.                     if (qrcode.isDark(row + 1, col))
  596.                         count += 1;
  597.                     if (qrcode.isDark(row, col + 1))
  598.                         count += 1;
  599.                     if (qrcode.isDark(row + 1, col + 1))
  600.                         count += 1;
  601.                     if (count == 0 || count == 4) {
  602.                         lostPoint += 3;
  603.                     }
  604.                 }
  605.             }
  606.             for (var row = 0; row < moduleCount; row += 1) {
  607.                 for (var col = 0; col < moduleCount - 6; col += 1) {
  608.                     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)) {
  609.                         lostPoint += 40;
  610.                     }
  611.                 }
  612.             }
  613.             for (var col = 0; col < moduleCount; col += 1) {
  614.                 for (var row = 0; row < moduleCount - 6; row += 1) {
  615.                     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)) {
  616.                         lostPoint += 40;
  617.                     }
  618.                 }
  619.             }
  620.             var darkCount = 0;
  621.             for (var col = 0; col < moduleCount; col += 1) {
  622.                 for (var row = 0; row < moduleCount; row += 1) {
  623.                     if (qrcode.isDark(row, col)) {
  624.                         darkCount += 1;
  625.                     }
  626.                 }
  627.             }
  628.             var ratio = Math.abs(100 * darkCount / moduleCount / moduleCount - 50) / 5;
  629.             lostPoint += ratio * 10;
  630.             return lostPoint;
  631.         }
  632.         ;
  633.         return _this;
  634.     }();
  635.     var QRMath = function() {
  636.         var EXP_TABLE = new Array(256);
  637.         var LOG_TABLE = new Array(256);
  638.         for (var i = 0; i < 8; i += 1) {
  639.             EXP_TABLE[i] = 1 << i;
  640.         }
  641.         for (var i = 8; i < 256; i += 1) {
  642.             EXP_TABLE[i] = EXP_TABLE[i - 4] ^ EXP_TABLE[i - 5] ^ EXP_TABLE[i - 6] ^ EXP_TABLE[i - 8];
  643.         }
  644.         for (var i = 0; i < 255; i += 1) {
  645.             LOG_TABLE[EXP_TABLE[i]] = i;
  646.         }
  647.         var _this = {};
  648.         _this.glog = function(n) {
  649.             if (n < 1) {
  650.                 throw new Error('glog(' + n + ')');
  651.             }
  652.             return LOG_TABLE[n];
  653.         }
  654.         ;
  655.         _this.gexp = function(n) {
  656.             while (n < 0) {
  657.                 n += 255;
  658.             }
  659.             while (n >= 256) {
  660.                 n -= 255;
  661.             }
  662.             return EXP_TABLE[n];
  663.         }
  664.         ;
  665.         return _this;
  666.     }();
  667.     function qrPolynomial(num, shift) {
  668.         if (typeof num.length == 'undefined') {
  669.             throw new Error(num.length + '/' + shift);
  670.         }
  671.         var _num = function() {
  672.             var offset = 0;
  673.             while (offset < num.length && num[offset] == 0) {
  674.                 offset += 1;
  675.             }
  676.             var _num = new Array(num.length - offset + shift);
  677.             for (var i = 0; i < num.length - offset; i += 1) {
  678.                 _num[i] = num[i + offset];
  679.             }
  680.             return _num;
  681.         }();
  682.         var _this = {};
  683.         _this.getAt = function(index) {
  684.             return _num[index];
  685.         }
  686.         ;
  687.         _this.getLength = function() {
  688.             return _num.length;
  689.         }
  690.         ;
  691.         _this.multiply = function(e) {
  692.             var num = new Array(_this.getLength() + e.getLength() - 1);
  693.             for (var i = 0; i < _this.getLength(); i += 1) {
  694.                 for (var j = 0; j < e.getLength(); j += 1) {
  695.                     num[i + j] ^= QRMath.gexp(QRMath.glog(_this.getAt(i)) + QRMath.glog(e.getAt(j)));
  696.                 }
  697.             }
  698.             return qrPolynomial(num, 0);
  699.         }
  700.         ;
  701.         _this.mod = function(e) {
  702.             if (_this.getLength() - e.getLength() < 0) {
  703.                 return _this;
  704.             }
  705.             var ratio = QRMath.glog(_this.getAt(0)) - QRMath.glog(e.getAt(0));
  706.             var num = new Array(_this.getLength());
  707.             for (var i = 0; i < _this.getLength(); i += 1) {
  708.                 num[i] = _this.getAt(i);
  709.             }
  710.             for (var i = 0; i < e.getLength(); i += 1) {
  711.                 num[i] ^= QRMath.gexp(QRMath.glog(e.getAt(i)) + ratio);
  712.             }
  713.             return qrPolynomial(num, 0).mod(e);
  714.         }
  715.         ;
  716.         return _this;
  717.     }
  718.     ;var QRRSBlock = function() {
  719.         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]];
  720.         var qrRSBlock = function(totalCount, dataCount) {
  721.             var _this = {};
  722.             _this.totalCount = totalCount;
  723.             _this.dataCount = dataCount;
  724.             return _this;
  725.         }
  726.         ;
  727.         var _this = {};
  728.         var getRsBlockTable = function(typeNumber, errorCorrectLevel) {
  729.             switch (errorCorrectLevel) {
  730.             case QRErrorCorrectLevel.L:
  731.                 return RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 0];
  732.             case QRErrorCorrectLevel.M:
  733.                 return RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 1];
  734.             case QRErrorCorrectLevel.Q:
  735.                 return RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 2];
  736.             case QRErrorCorrectLevel.H:
  737.                 return RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 3];
  738.             default:
  739.                 return undefined;
  740.             }
  741.         }
  742.         ;
  743.         _this.getRSBlocks = function(typeNumber, errorCorrectLevel) {
  744.             var rsBlock = getRsBlockTable(typeNumber, errorCorrectLevel);
  745.             if (typeof rsBlock == 'undefined') {
  746.                 throw new Error('bad rs block [url=home.php?mod=space&uid=18206]@[/url] typeNumber:' + typeNumber + '/errorCorrectLevel:' + errorCorrectLevel);
  747.             }
  748.             var length = rsBlock.length / 3;
  749.             var list = new Array();
  750.             for (var i = 0; i < length; i += 1) {
  751.                 var count = rsBlock[i * 3 + 0];
  752.                 var totalCount = rsBlock[i * 3 + 1];
  753.                 var dataCount = rsBlock[i * 3 + 2];
  754.                 for (var j = 0; j < count; j += 1) {
  755.                     list.push(qrRSBlock(totalCount, dataCount));
  756.                 }
  757.             }
  758.             return list;
  759.         }
  760.         ;
  761.         return _this;
  762.     }();
  763.     var qrBitBuffer = function() {
  764.         var _buffer = new Array();
  765.         var _length = 0;
  766.         var _this = {};
  767.         _this.getBuffer = function() {
  768.             return _buffer;
  769.         }
  770.         ;
  771.         _this.getAt = function(index) {
  772.             var bufIndex = Math.floor(index / 8);
  773.             return ((_buffer[bufIndex] >>> (7 - index % 8)) & 1) == 1;
  774.         }
  775.         ;
  776.         _this.put = function(num, length) {
  777.             for (var i = 0; i < length; i += 1) {
  778.                 _this.putBit(((num >>> (length - i - 1)) & 1) == 1);
  779.             }
  780.         }
  781.         ;
  782.         _this.getLengthInBits = function() {
  783.             return _length;
  784.         }
  785.         ;
  786.         _this.putBit = function(bit) {
  787.             var bufIndex = Math.floor(_length / 8);
  788.             if (_buffer.length <= bufIndex) {
  789.                 _buffer.push(0);
  790.             }
  791.             if (bit) {
  792.                 _buffer[bufIndex] |= (0x80 >>> (_length % 8));
  793.             }
  794.             _length += 1;
  795.         }
  796.         ;
  797.         return _this;
  798.     }
  799.     ;
  800.     var qr8BitByte = function(data) {
  801.         var _mode = QRMode.MODE_8BIT_BYTE;
  802.         var _data = data;
  803.         var _bytes = qrcode.stringToBytes(data);
  804.         var _this = {};
  805.         _this.getMode = function() {
  806.             return _mode;
  807.         }
  808.         ;
  809.         _this.getLength = function(buffer) {
  810.             return _bytes.length;
  811.         }
  812.         ;
  813.         _this.write = function(buffer) {
  814.             for (var i = 0; i < _bytes.length; i += 1) {
  815.                 buffer.put(_bytes[i], 8);
  816.             }
  817.         }
  818.         ;
  819.         return _this;
  820.     }
  821.     ;
  822.     var byteArrayOutputStream = function() {
  823.         var _bytes = new Array();
  824.         var _this = {};
  825.         _this.writeByte = function(b) {
  826.             _bytes.push(b & 0xff);
  827.         }
  828.         ;
  829.         _this.writeShort = function(i) {
  830.             _this.writeByte(i);
  831.             _this.writeByte(i >>> 8);
  832.         }
  833.         ;
  834.         _this.writeBytes = function(b, off, len) {
  835.             off = off || 0;
  836.             len = len || b.length;
  837.             for (var i = 0; i < len; i += 1) {
  838.                 _this.writeByte(b[i + off]);
  839.             }
  840.         }
  841.         ;
  842.         _this.writeString = function(s) {
  843.             for (var i = 0; i < s.length; i += 1) {
  844.                 _this.writeByte(s.charCodeAt(i));
  845.             }
  846.         }
  847.         ;
  848.         _this.toByteArray = function() {
  849.             return _bytes;
  850.         }
  851.         ;
  852.         _this.toString = function() {
  853.             var s = '';
  854.             s += '[';
  855.             for (var i = 0; i < _bytes.length; i += 1) {
  856.                 if (i > 0) {
  857.                     s += ',';
  858.                 }
  859.                 s += _bytes[i];
  860.             }
  861.             s += ']';
  862.             return s;
  863.         }
  864.         ;
  865.         return _this;
  866.     }
  867.     ;
  868.     var base64EncodeOutputStream = function() {
  869.         var _buffer = 0;
  870.         var _buflen = 0;
  871.         var _length = 0;
  872.         var _base64 = '';
  873.         var _this = {};
  874.         var writeEncoded = function(b) {
  875.             _base64 += String.fromCharCode(encode(b & 0x3f));
  876.         }
  877.         ;
  878.         var encode = function(n) {
  879.             if (n < 0) {} else if (n < 26) {
  880.                 return 0x41 + n;
  881.             } else if (n < 52) {
  882.                 return 0x61 + (n - 26);
  883.             } else if (n < 62) {
  884.                 return 0x30 + (n - 52);
  885.             } else if (n == 62) {
  886.                 return 0x2b;
  887.             } else if (n == 63) {
  888.                 return 0x2f;
  889.             }
  890.             throw new Error('n:' + n);
  891.         }
  892.         ;
  893.         _this.writeByte = function(n) {
  894.             _buffer = (_buffer << 8) | (n & 0xff);
  895.             _buflen += 8;
  896.             _length += 1;
  897.             while (_buflen >= 6) {
  898.                 writeEncoded(_buffer >>> (_buflen - 6));
  899.                 _buflen -= 6;
  900.             }
  901.         }
  902.         ;
  903.         _this.flush = function() {
  904.             if (_buflen > 0) {
  905.                 writeEncoded(_buffer << (6 - _buflen));
  906.                 _buffer = 0;
  907.                 _buflen = 0;
  908.             }
  909.             if (_length % 3 != 0) {
  910.                 var padlen = 3 - _length % 3;
  911.                 for (var i = 0; i < padlen; i += 1) {
  912.                     _base64 += '=';
  913.                 }
  914.             }
  915.         }
  916.         ;
  917.         _this.toString = function() {
  918.             return _base64;
  919.         }
  920.         ;
  921.         return _this;
  922.     }
  923.     ;
  924.     var base64DecodeInputStream = function(str) {
  925.         var _str = str;
  926.         var _pos = 0;
  927.         var _buffer = 0;
  928.         var _buflen = 0;
  929.         var _this = {};
  930.         _this.read = function() {
  931.             while (_buflen < 8) {
  932.                 if (_pos >= _str.length) {
  933.                     if (_buflen == 0) {
  934.                         return -1;
  935.                     }
  936.                     throw new Error('unexpected end of file./' + _buflen);
  937.                 }
  938.                 var c = _str.charAt(_pos);
  939.                 _pos += 1;
  940.                 if (c == '=') {
  941.                     _buflen = 0;
  942.                     return -1;
  943.                 } else if (c.match(/^\s$/)) {
  944.                     continue;
  945.                 }
  946.                 _buffer = (_buffer << 6) | decode(c.charCodeAt(0));
  947.                 _buflen += 6;
  948.             }
  949.             var n = (_buffer >>> (_buflen - 8)) & 0xff;
  950.             _buflen -= 8;
  951.             return n;
  952.         }
  953.         ;
  954.         var decode = function(c) {
  955.             if (0x41 <= c && c <= 0x5a) {
  956.                 return c - 0x41;
  957.             } else if (0x61 <= c && c <= 0x7a) {
  958.                 return c - 0x61 + 26;
  959.             } else if (0x30 <= c && c <= 0x39) {
  960.                 return c - 0x30 + 52;
  961.             } else if (c == 0x2b) {
  962.                 return 62;
  963.             } else if (c == 0x2f) {
  964.                 return 63;
  965.             } else {
  966.                 throw new Error('c:' + c);
  967.             }
  968.         }
  969.         ;
  970.         return _this;
  971.     }
  972.     ;
  973.     var gifImage = function(width, height) {
  974.         var _width = width;
  975.         var _height = height;
  976.         var _data = new Array(width * height);
  977.         var _this = {};
  978.         _this.setPixel = function(x, y, pixel) {
  979.             _data[y * _width + x] = pixel;
  980.         }
  981.         ;
  982.         _this.write = function(out) {
  983.             out.writeString('GIF87a');
  984.             out.writeShort(_width);
  985.             out.writeShort(_height);
  986.             out.writeByte(0x80);
  987.             out.writeByte(0);
  988.             out.writeByte(0);
  989.             out.writeByte(0x00);
  990.             out.writeByte(0x00);
  991.             out.writeByte(0x00);
  992.             out.writeByte(0xff);
  993.             out.writeByte(0xff);
  994.             out.writeByte(0xff);
  995.             out.writeString(',');
  996.             out.writeShort(0);
  997.             out.writeShort(0);
  998.             out.writeShort(_width);
  999.             out.writeShort(_height);
  1000.             out.writeByte(0);
  1001.             var lzwMinCodeSize = 2;
  1002.             var raster = getLZWRaster(lzwMinCodeSize);
  1003.             out.writeByte(lzwMinCodeSize);
  1004.             var offset = 0;
  1005.             while (raster.length - offset > 255) {
  1006.                 out.writeByte(255);
  1007.                 out.writeBytes(raster, offset, 255);
  1008.                 offset += 255;
  1009.             }
  1010.             out.writeByte(raster.length - offset);
  1011.             out.writeBytes(raster, offset, raster.length - offset);
  1012.             out.writeByte(0x00);
  1013.             out.writeString(';');
  1014.         }
  1015.         ;
  1016.         var bitOutputStream = function(out) {
  1017.             var _out = out;
  1018.             var _bitLength = 0;
  1019.             var _bitBuffer = 0;
  1020.             var _this = {};
  1021.             _this.write = function(data, length) {
  1022.                 if ((data >>> length) != 0) {
  1023.                     throw new Error('length over');
  1024.                 }
  1025.                 while (_bitLength + length >= 8) {
  1026.                     _out.writeByte(0xff & ((data << _bitLength) | _bitBuffer));
  1027.                     length -= (8 - _bitLength);
  1028.                     data >>>= (8 - _bitLength);
  1029.                     _bitBuffer = 0;
  1030.                     _bitLength = 0;
  1031.                 }
  1032.                 _bitBuffer = (data << _bitLength) | _bitBuffer;
  1033.                 _bitLength = _bitLength + length;
  1034.             }
  1035.             ;
  1036.             _this.flush = function() {
  1037.                 if (_bitLength > 0) {
  1038.                     _out.writeByte(_bitBuffer);
  1039.                 }
  1040.             }
  1041.             ;
  1042.             return _this;
  1043.         }
  1044.         ;
  1045.         var getLZWRaster = function(lzwMinCodeSize) {
  1046.             var clearCode = 1 << lzwMinCodeSize;
  1047.             var endCode = (1 << lzwMinCodeSize) + 1;
  1048.             var bitLength = lzwMinCodeSize + 1;
  1049.             var table = lzwTable();
  1050.             for (var i = 0; i < clearCode; i += 1) {
  1051.                 table.add(String.fromCharCode(i));
  1052.             }
  1053.             table.add(String.fromCharCode(clearCode));
  1054.             table.add(String.fromCharCode(endCode));
  1055.             var byteOut = byteArrayOutputStream();
  1056.             var bitOut = bitOutputStream(byteOut);
  1057.             bitOut.write(clearCode, bitLength);
  1058.             var dataIndex = 0;
  1059.             var s = String.fromCharCode(_data[dataIndex]);
  1060.             dataIndex += 1;
  1061.             while (dataIndex < _data.length) {
  1062.                 var c = String.fromCharCode(_data[dataIndex]);
  1063.                 dataIndex += 1;
  1064.                 if (table.contains(s + c)) {
  1065.                     s = s + c;
  1066.                 } else {
  1067.                     bitOut.write(table.indexOf(s), bitLength);
  1068.                     if (table.size() < 0xfff) {
  1069.                         if (table.size() == (1 << bitLength)) {
  1070.                             bitLength += 1;
  1071.                         }
  1072.                         table.add(s + c);
  1073.                     }
  1074.                     s = c;
  1075.                 }
  1076.             }
  1077.             bitOut.write(table.indexOf(s), bitLength);
  1078.             bitOut.write(endCode, bitLength);
  1079.             bitOut.flush();
  1080.             return byteOut.toByteArray();
  1081.         }
  1082.         ;
  1083.         var lzwTable = function() {
  1084.             var _map = {};
  1085.             var _size = 0;
  1086.             var _this = {};
  1087.             _this.add = function(key) {
  1088.                 if (_this.contains(key)) {
  1089.                     throw new Error('dup key:' + key);
  1090.                 }
  1091.                 _map[key] = _size;
  1092.                 _size += 1;
  1093.             }
  1094.             ;
  1095.             _this.size = function() {
  1096.                 return _size;
  1097.             }
  1098.             ;
  1099.             _this.indexOf = function(key) {
  1100.                 return _map[key];
  1101.             }
  1102.             ;
  1103.             _this.contains = function(key) {
  1104.                 return typeof _map[key] != 'undefined';
  1105.             }
  1106.             ;
  1107.             return _this;
  1108.         }
  1109.         ;
  1110.         return _this;
  1111.     }
  1112.     ;
  1113.     var createImgTag = function(width, height, getPixel, alt) {
  1114.         var gif = gifImage(width, height);
  1115.         for (var y = 0; y < height; y += 1) {
  1116.             for (var x = 0; x < width; x += 1) {
  1117.                 gif.setPixel(x, y, getPixel(x, y));
  1118.             }
  1119.         }
  1120.         var b = byteArrayOutputStream();
  1121.         gif.write(b);
  1122.         var base64 = base64EncodeOutputStream();
  1123.         var bytes = b.toByteArray();
  1124.         for (var i = 0; i < bytes.length; i += 1) {
  1125.             base64.writeByte(bytes[i]);
  1126.         }
  1127.         base64.flush();
  1128.         var img = '';
  1129.         img += '<img';
  1130.         img += '\u0020src="';
  1131.         img += 'data:image/gif;base64,';
  1132.         img += base64;
  1133.         img += '"';
  1134.         img += '\u0020width="';
  1135.         img += width;
  1136.         img += '"';
  1137.         img += '\u0020height="';
  1138.         img += height;
  1139.         img += '"';
  1140.         if (alt) {
  1141.             img += '\u0020alt="';
  1142.             img += alt;
  1143.             img += '"';
  1144.         }
  1145.         img += '/>';
  1146.         return img;
  1147.     }
  1148.     ;
  1149.     return qrcode;
  1150. }();
  1151. /*  |xGv00|ca8fc6bde81a353e7cede123b304bdb9 */

  1152. function MakeQr(url){

  1153. var qr= qrcode(10,'M');
  1154. qr.addData(url);
  1155. qr.make();

  1156. var s= qr.createImgTag(4);
  1157. return s;//这是返回一个html代码
  1158. //return s.substring(32,s.length-28); //返回的数据,直接base64解码就是图片了


  1159. }
复制代码


游客,如果您要查看本帖隐藏内容请回复


回复

使用道具 举报

已绑定手机
落雪有声
等级头衔

等級:编程学徒

Rank: 3Rank: 3

积分成就
易币
贡献
主题
精华
金钱
积分
251
注册时间
2019-10-16
最后登录
1970-1-1

勋章墙

2020-7-20 03:40:13 | 显示全部楼层

#在这里快速回复#返回的数据,直接base64解码就是图片了
回复

使用道具 举报

已绑定手机
diouenji
等级头衔

等級:编程入门

Rank: 4

积分成就
易币
贡献
主题
精华
金钱
积分
441
注册时间
2018-10-19
最后登录
1970-1-1

勋章墙

2019-4-8 08:17:24 | 显示全部楼层
#在这里快速回复#返回的数据,直接base64解码就是图片了
回复

使用道具 举报

已绑定手机
已实名认证
zt471402521
等级头衔

等級:程序制作者

Rank: 6Rank: 6

积分成就
易币
贡献
主题
精华
金钱
积分
1251
注册时间
2016-5-7
最后登录
1970-1-1

勋章墙

2018-1-1 18:51:28 | 显示全部楼层
#在这里快速回复#返回的数据,直接base64解码就是图片了
回复

使用道具 举报

已绑定手机
empo
等级头衔

等級:编程起步

Rank: 5Rank: 5

积分成就
易币
贡献
主题
精华
金钱
积分
888
注册时间
2015-7-18
最后登录
1970-1-1

勋章墙

2017-9-2 00:05:43 | 显示全部楼层
感谢分享..
回复

使用道具 举报

已绑定手机
Linn
等级头衔

等級:编程起步

Rank: 5Rank: 5

积分成就
易币
贡献
主题
精华
金钱
积分
1019
注册时间
2016-8-7
最后登录
1970-1-1

勋章墙

2017-9-2 01:21:45 | 显示全部楼层
谢谢分享哦
回复

使用道具 举报

已绑定手机
季末QwQ
等级头衔

等級:编程菜鸟

Rank: 2

积分成就
易币
贡献
主题
精华
金钱
积分
138
注册时间
2017-5-19
最后登录
1970-1-1

勋章墙

2017-9-2 08:24:22 | 显示全部楼层
好长啊
回复

使用道具 举报

越大越高端
等级头衔

等級:编程学徒

Rank: 3Rank: 3

积分成就
易币
贡献
主题
精华
金钱
积分
390
注册时间
2016-7-22
最后登录
1970-1-1

勋章墙

2017-9-2 12:49:24 | 显示全部楼层
谢谢分享哦!好长啊!
回复

使用道具 举报

头像被屏蔽
已绑定手机
superlu
等级头衔

等級:禁止发言

积分成就
易币
贡献
主题
精华
金钱
积分
2332
注册时间
2017-8-23
最后登录
1970-1-1

勋章墙

2017-9-2 15:22:55 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

已绑定手机
死循环
等级头衔

等級:顶级Vip

Rank: 14Rank: 14Rank: 14Rank: 14

积分成就
易币
贡献
主题
精华
金钱
积分
377
注册时间
2014-9-22
最后登录
1970-1-1

勋章墙

2017-9-2 16:59:24 | 显示全部楼层
666,牛逼
回复

使用道具 举报

已绑定手机
已实名认证
南i
等级头衔

等級:顶级Vip

Rank: 14Rank: 14Rank: 14Rank: 14

积分成就
易币
贡献
主题
精华
金钱
积分
1445
注册时间
2016-5-22
最后登录
1970-1-1

勋章墙

2017-9-2 19:45:28 | 显示全部楼层
拿来学习看一看
回复

使用道具 举报

已绑定手机
a66298458
等级头衔

等級:顶级Vip

Rank: 14Rank: 14Rank: 14Rank: 14

积分成就
易币
贡献
主题
精华
金钱
积分
342
注册时间
2016-12-21
最后登录
1970-1-1

勋章墙

2017-9-2 22:30:37 高端的乐易手机用户 | 显示全部楼层
嗯  学习学习
回复

使用道具 举报

已绑定手机
已实名认证
Decimal
等级头衔

等級:编程学徒

Rank: 3Rank: 3

积分成就
易币
贡献
主题
精华
金钱
积分
191
注册时间
2017-2-2
最后登录
1970-1-1

勋章墙

2017-9-2 23:38:21 | 显示全部楼层
试一下      
回复

使用道具 举报

如果懒得打字,请选择右侧内容快捷回复 提醒:以任何方式进行『恶意灌水』的行为,进行封号处理
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

热点推荐上一条 /5 下一条

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

拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表乐易立场!

娄底市乐易网络科技有限公司声明:乐易原创培训课程版权均为我公司所有,未经许可,不得擅自翻录,盗版,破解本站课课程,我们将保留法律诉讼的权利

GMT+8, 2024-4-28 17:53 , Processed in 0.090741 second(s), 88 queries .

Powered by Discuz! X3.4

Copyright © Tencent Cloud.

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