javaScript生成支持中文带logo的二维码(jquery.qrcode.js)

前端之家收集整理的这篇文章主要介绍了javaScript生成支持中文带logo的二维码(jquery.qrcode.js)前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

本文实例为大家分享支持中文,且带logo二维码生成代码,供大家参考,具体内容如下

资料搜索

选择star最多的两个

第一个就是用的比较多的jquery.qrcode.js(但不支持中文,不能带logo)啦,第二个支持ie6+,支持中文,根据第二个源代码,使得,jquery.qrcode.js,支持中文

支持中文

QR8bitByte.prototype = {

getLength : function(buffer) {
return this.data.length;
},write : function(buffer) {
for (var i = 0; i < this.data.length; i++) {
// not JIS ...
buffer.put(this.data.charCodeAt(i),8);
}
}
};

修改如下(就是复制粘贴了第二份代码的头部):

// Added to support UTF-8 Characters
for (var i = 0,l = this.data.length; i < l; i++) {
var byteArray = [];
var code = this.data.charCodeAt(i);

if (code > 0x10000) {
  byteArray[0] = 0xF0 | ((code & 0x1C0000) >>> 18);
  byteArray[1] = 0x80 | ((code & 0x3F000) >>> 12);
  byteArray[2] = 0x80 | ((code & 0xFC0) >>> 6);
  byteArray[3] = 0x80 | (code & 0x3F);
} else if (code > 0x800) {
  byteArray[0] = 0xE0 | ((code & 0xF000) >>> 12);
  byteArray[1] = 0x80 | ((code & 0xFC0) >>> 6);
  byteArray[2] = 0x80 | (code & 0x3F);
} else if (code > 0x80) {
  byteArray[0] = 0xC0 | ((code & 0x7C0) >>> 6);
  byteArray[1] = 0x80 | (code & 0x3F);
} else {
  byteArray[0] = code;
}

this.parsedData.push(byteArray);

}

this.parsedData = Array.prototype.concat.apply([],this.parsedData);

if (this.parsedData.length != this.data.length) {
this.parsedData.unshift(191);
this.parsedData.unshift(187);
this.parsedData.unshift(239);
}
}

QR8bitByte.prototype = {
getLength: function (buffer) {
return this.parsedData.length;
},write: function (buffer) {
for (var i = 0,l = this.parsedData.length; i < l; i++) {
buffer.put(this.parsedData[i],8);
}
}
};

网上也提供的解决方案:

= 0x0001) && (c <= 0x007F)) { out += str.charAt(i); } else if (c > 0x07FF) { out += String.fromCharCode(0xE0 | ((c >> 12) & 0x0F)); out += String.fromCharCode(0x80 | ((c >> 6) & 0x3F)); out += String.fromCharCode(0x80 | ((c >> 0) & 0x3F)); } else { out += String.fromCharCode(0xC0 | ((c >> 6) & 0x1F)); out += String.fromCharCode(0x80 | ((c >> 0) & 0x3F)); } } return out; }

支持自定义logo

修改jquery.qrcode.js,createCanvas函数

// create canvas element var canvas = document.createElement('canvas'); canvas.width = options.width; canvas.height = options.height; var ctx = canvas.getContext('2d'); //<a href="https://www.jb51.cc/tag/zengjia/" target="_blank" class="keywords">增加</a>以下<a href="https://www.jb51.cc/tag/daima/" target="_blank" class="keywords">代码</a>,把<a href="https://www.jb51.cc/tag/tupian/" target="_blank" class="keywords">图片</a>画出来 if( options.src ) {//传进来的<a href="https://www.jb51.cc/tag/tupian/" target="_blank" class="keywords">图片</a>地址 //<a href="https://www.jb51.cc/tag/tupian/" target="_blank" class="keywords">图片</a>大小 options.imgWidth = options.imgWidth || options.width / 4.7; options.imgHeight = options.imgHeight || options.height / 4.7; var img = new Image(); img.src = options.src; //不放在onload里,<a href="https://www.jb51.cc/tag/tupian/" target="_blank" class="keywords">图片</a>出不来 img.onload = function () { ctx.drawImage(img,(options.width - options.imgWidth) / 2,(options.height - options.imgHeight) / 2,options.imgWidth,options.imgHeight); } } // compute tileW/tileH based on options.width/options.height var tileW = options.width / qrcode.getModuleCount(); var tileH = options.height / qrcode.getModuleCount(); // draw in the canvas for( var row = 0; row < qrcode.getModuleCount(); row++ ){ for( var col = 0; col < qrcode.getModuleCount(); col++ ){ ctx.fillStyle = qrcode.isDark(row,col) ? options.foreground : options.background; var w = (Math.ceil((col+1)*tileW) - Math.floor(col*tileW)); var h = (Math.ceil((row+1)*tileW) - Math.floor(row*tileW)); ctx.fillRect(Math.round(col*tileW),Math.round(row*tileH),w,h); } } // return just built canvas return canvas; };

修改jquery.qrcode.js,createTable函数不支持canvas用table画二维码

// create table element var $table = $('<table&gt;</table&gt;') .css("width",options.width+"px") .css("height",options.height+"px") .css("border","0px") .css("border-collapse","collapse") .css('background-color',options.background); // compute tileS percentage var tileW = options.width / qrcode.getModuleCount(); var tileH = options.height / qrcode.getModuleCount(); // draw in the table for(var row = 0; row < qrcode.getModuleCount(); row++ ){ var $row = $('<tr&gt;</tr&gt;').css('height',tileH+"px").appendTo($table); for(var col = 0; col < qrcode.getModuleCount(); col++ ){ $('<td&gt;</td&gt;') .css('width',tileW+"px") .css('background-color',qrcode.isDark(row,col) ? options.foreground : options.background) .appendTo($row); } } //主要思想,把table,和<a href="https://www.jb51.cc/tag/imgbiaoqian/" target="_blank" class="keywords">img标签</a>放在同一个div下,div relative定位,然后使得<a href="https://www.jb51.cc/tag/tupian/" target="_blank" class="keywords">图片</a>absolute定位在table中间 if( options.src ) { options.imgWidth = options.imgWidth || options.width / 4.7; options.imgHeight = options.imgHeight || options.height / 4.7; var $img = $('<img>').attr("src",options.src) .css("width",options.imgWidth) .css("height",options.imgHeight) .css("position","absolute") .css("left",(options.width - options.imgWidth) / 2) .css("top",(options.height - options.imgHeight) / 2); $table = $('<div style="position:relative;"&gt;</div>') .append($table) .append($img); } // return just built canvas return $table; };

对IE做特殊判断,大家懂的

改过后的jquery.qrcode.js如下:

//判断是否IE,IE8以下,用 table,否则用 canvas var isIE = function() { var b = document.createElement('b'); b.innerHTML = '<!--[if IE]><i></i><![endif]-->'; return b.getElementsByTagName('i').length === 1; }; options.render = options.render || (isIE(6) || isIE(7) || isIE(8))? "table": "canvas"; // set default values // typeNumber < 1 for automatic calculation options = $.extend( {},{ // render : "canvas",width : 256,height : 256,typeNumber : -1,correctLevel : QRErrorCorrectLevel.H,background : "#ffffff",foreground : "#000000" },options); var createCanvas = function(){ // create the qrcode itself var qrcode = new QRCode(options.typeNumber,options.correctLevel); qrcode.addData(options.text); qrcode.make(); // create canvas element var canvas = document.createElement('canvas'); canvas.width = options.width; canvas.height = options.height; var ctx = canvas.getContext('2d'); //在中间画<a href="https://www.jb51.cc/tag/logo/" target="_blank" class="keywords">logo</a> if( options.src ) { options.imgWidth = options.imgWidth || options.width / 4.7; options.imgHeight = options.imgHeight || options.height / 4.7; var img = new Image(); img.src = options.src; img.onload = function () { ctx.drawImage(img,h); } } // return just built canvas return canvas; }; // from Jon-Carlos Rivera (https://github.com/imbcmdth) var createTable = function(){ // create the qrcode itself var qrcode = new QRCode(options.typeNumber,col) ? options.foreground : options.background) .appendTo($row); } } //<a href="https://www.jb51.cc/tag/shengcheng/" target="_blank" class="keywords">生成</a><a href="https://www.jb51.cc/tag/logo/" target="_blank" class="keywords">logo</a> if( options.src ) { options.imgWidth = options.imgWidth || options.width / 4.7; options.imgHeight = options.imgHeight || options.height / 4.7; var $img = $('<img>').attr("src",(options.height - options.imgHeight) / 2); $table = $('<div style="position:relative;"&gt;</div>') .append($table) .append($img); } // return just built canvas return $table; }; return this.each(function(){ var element = options.render == "canvas" ? createCanvas() : createTable(); $(element).appendTo(this); });

};
})( jQuery );

测试

中文://jetienne.com",src: './logo32.png' }); jQuery('#qrcodeCanvas').qrcode({ text : "中午你://jetienne.com",src: './logo32.png' });

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程之家。

原文链接:https://www.f2er.com/jquery/42926.html

猜你在找的jQuery相关文章