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

资料搜索
选择star最多的两个
第一个就是用的比较多的jquery.qrcode.js(但不支持中文,不能带logo)啦,第二个支持ie6+,支持中文,根据第二个源代码,使得,jquery.qrcode.js,支持中文。
支持中文
//qrcode.js
function QR8bitByte(data) {
this.mode = QRMode.MODE_8BIT_BYTE;
this.data = data;
}
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);
}
}
};
修改如下(就是复制粘贴了第二份代码的头部):
function QR8bitByte(data) {
this.mode = QRMode.MODE_8BIT_BYTE;
this.data = data;
this.parsedData = [];
// 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);
}
}
};
网上也提供的解决方案:
//在传入文本处转码也可
function utf16to8(str) {
var out, i, len, c;
out = "";
len = str.length;
for(i = 0; i < len; i++) {
c = str.charCodeAt(i);
if ((c >= 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函数
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');
//增加以下代码,把图片画出来
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;
//不放在onload里,图片出不来
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画二维码)
var createTable = function(){
// create the qrcode itself
var qrcode = new QRCode(options.typeNumber, options.correctLevel);
qrcode.addData(options.text);
qrcode.make();
// create table element
var $table = $('<table></table>')
.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></tr>').css('height', tileH+"px").appendTo($table);
for(var col = 0; col < qrcode.getModuleCount(); col++ ){
$('<td></td>')
.css('width', tileW+"px")
.css('background-color', qrcode.isDark(row, col) ? options.foreground : options.background)
.appendTo($row);
}
}
//主要思想,把table,和img标签放在同一个div下,div relative定位,然后使得图片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;"></div>')
.append($table)
.append($img);
}
// return just built canvas
return $table;
};
对IE做特殊判断,大家懂的
//判断是否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";
改过后的jquery.qrcode.js如下:
(function( $ ){
$.fn.qrcode = function(options) {
// if options is string,
if( typeof options === 'string' ){
options = { text: options };
}
//判断是否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');
//在中间画logo
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, (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;
};
// from Jon-Carlos Rivera (https://github.com/imbcmdth)
var createTable = function(){
// create the qrcode itself
var qrcode = new QRCode(options.typeNumber, options.correctLevel);
qrcode.addData(options.text);
qrcode.make();
// create table element
var $table = $('<table></table>')
.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></tr>').css('height', tileH+"px").appendTo($table);
for(var col = 0; col < qrcode.getModuleCount(); col++ ){
$('<td></td>')
.css('width', tileW+"px")
.css('background-color', qrcode.isDark(row, col) ? options.foreground : options.background)
.appendTo($row);
}
}
//生成logo
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;"></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 );
测试
jQuery('#qrcodeTable').qrcode({
render : "table",
text : "中文://jetienne.com",
src: './logo32.png'
});
jQuery('#qrcodeCanvas').qrcode({
text : "中午你://jetienne.com",
src: './logo32.png'
});
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
# js
# 二维码
# jquery.qrcode.js
# JS实现将链接生成二维码并转为图片的方法
# JavaScript生成二维码图片小结
# js canvas实现二维码和图片合成的海报
# QRCode.js二维码生成并能长按识别
# js二维码生成插件jquery.qrcode.js如何自定义LOGO
# 放在
# 第二个
# 则用
# 判断是否
# 第一个
# 最多
# 也可
# 自定义
# 不支持
# 能带
# 比较多
# 但不
# 大家分享
# 画出
# 具体内容
# 源代码
# 大家多多
# 出不来
# 二份
# 中午
相关文章:
建站VPS推荐:2025年高性能服务器配置指南
网站制作多少钱一个,建一个论坛网站大约需要多少钱?
如何在阿里云虚拟服务器快速搭建网站?
齐河建站公司:营销型网站建设与SEO优化双核驱动策略
SQL查询语句优化的实用方法总结
TestNG的testng.xml配置文件怎么写
建站上市公司网站建设方案与SEO优化服务定制指南
定制建站策划方案_专业建站与网站建设方案一站式指南
如何在新浪SAE免费搭建个人博客?
建站之星好吗?新手能否轻松上手建站?
JS中使用new Date(str)创建时间对象不兼容firefox和ie的解决方法(两种)
如何获取PHP WAP自助建站系统源码?
制作网站的模板软件,网站怎么建设?
建站之星体验版:智能建站系统+响应式设计,多端适配快速建站
c# 服务器GC和工作站GC的区别和设置
如何快速打造个性化非模板自助建站?
如何用景安虚拟主机手机版绑定域名建站?
网站制作大概多少钱一个,做一个平台网站大概多少钱?
一键制作网站软件下载安装,一键自动采集网页文档制作步骤?
如何在宝塔面板创建新站点?
如何用狗爹虚拟主机快速搭建网站?
如何通过虚拟主机快速搭建个人网站?
如何通过万网虚拟主机快速搭建网站?
代刷网站制作软件,别人代刷火车票靠谱吗?
广平建站公司哪家专业可靠?如何选择?
阿里云高弹*务器配置方案|支持分布式架构与多节点部署
建站之星价格显示格式升级,你的预算足够吗?
盘锦网站制作公司,盘锦大洼有多少5G网站?
建站之星如何实现网站加密操作?
太平洋网站制作公司,网络用语太平洋是什么意思?
如何在局域网内绑定自建网站域名?
网站制作话术技巧,网站推广做的好怎么话术?
国美网站制作流程,国美电器蒸汽鍋怎么用官方网站?
贸易公司网站制作流程,出口贸易网站设计怎么做?
个人摄影网站制作流程,摄影爱好者都去什么网站?
如何用PHP工具快速搭建高效网站?
建站10G流量真的够用吗?如何应对访问高峰?
,怎么用自己头像做动态表情包?
专业网站设计制作公司,如何制作一个企业网站,建设网站的基本步骤有哪些?
如何快速搭建FTP站点实现文件共享?
成都网站制作价格表,现在成都广电的单独网络宽带有多少的,资费是什么情况呢?
建站之星展会模板:智能建站与自助搭建高效解决方案
高防服务器租用首荐平台,企业级优惠套餐快速部署
网站制作服务平台,有什么网站可以发布本地服务信息?
建站主机空间推荐 高性价比配置与快速部署方案解析
三星网站视频制作教程下载,三星w23网页如何全屏?
青浦网站制作公司有哪些,苹果官网发货地是哪里?
如何选择高性价比服务器搭建个人网站?
建站ABC备案流程中有哪些关键注意事项?
建站之星微信建站一键生成小程序+多端营销系统
*请认真填写需求信息,我们会在24小时内与您取得联系。