首先須要jquery.qrcode.min.js插件轉二維碼,下載地址:https://github.com/jeromeetienne/jquery-qrcodejavascript
例:
html
<script type="text/javascript" src="jquery-1.7.2.min.js"></script>
<script type="text/javascript" src="jquery.qrcode.min.js"></script>
一、在頁面須要顯示二維碼的地方,代碼以下:java
<div id="qrcode"></div>jquery
二、調用qrcode插件。git
qrcode能夠支持canvas和table兩種方式渲染圖片,默認canvas。通常canvas渲染效果比table要好,區別能夠試一下。github
調用代碼以下:canvas
$('#qrcode').qrcode("您好!");//任意字符串ui
也能夠這樣:編碼
$('#qrcode').qrcode({ render:"table",//渲染方式 height:100, width:100, text:"簡單,會想" // background:"yellow" ,//背景顏色 // foreground:"red"//前景顏色 });
還有不少其餘屬性,如邊框留白大小quietZoneSize,定義圖標logo,correctLevel(容錯級別,支持L,M,H)Low/Middle/High等等spa
三、
其實上面的js有一個小小的缺點,就是默認不支持中文。
這跟js的機制有關係,jquery-qrcode這個庫是採用 charCodeAt() 這個方式進行編碼轉換的,
而這個方法默認會獲取它的 Unicode 編碼,通常的解碼器都是採用UTF-8, ISO-8859-1等方式,
英文是沒有問題,若是是中文,通常狀況下Unicode是UTF-16實現,長度2位,而UTF-8編碼是3位,這樣二維碼的編解碼就不匹配了。
解決方式固然是,在二維碼編碼前把字符串轉換成UTF-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; }
這是本身寫的一個例子:加了一些樣式,你們能夠參考下
<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8"> <title>生成二維碼</title> <script type="text/javascript" src="jquery-1.7.2.min.js"></script> <script type="text/javascript" src="jquery.qrcode.min.js"></script> </head> <script type="text/javascript"> //轉字符碼 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; } function qrcode(){ //生成二維碼 $('#output').qrcode({ height:100, width:100, text:utf16to8($('#text'.html)) // background:"yellow" ,//背景顏色 // foreground:"red"//前景顏色 }); } </script> <body> <div id="headName" style="border-bottom:solid 1px #F9F3DD;width:100%;line-height: 60px;font-weight: bold;"> <div style="padding-left: 20px;width: 42%;float: left;"> <span style="color: #0099FF; font-size: 20px"> qrcode. <a target="_blank" style="color: #B266B2;text-decoration: none;" href="http://easy521.com/">easy521.com</a> </span> </div> <div style="width: 58%;float: none;"> <button onclick="qrcode()" style="text-align: center;font-weight: bold;border-radius: 5px;font-size:14px;color: #CC3366 ">生成二維碼</button> <p dir="rtl" style="color: #666666;">提供者:劉譜</p> </div> <div style="width: 100%;"> <div style="width: 42%; float: left;"> <textarea id="text" class="form-control" style="width: 93%; padding: 20px; border-top: 1px solid rgb(221, 221, 221);border-bottom: 1px solid rgb(221, 221, 221); resize: none; font-size: 14px; height: 243px;" placeholder="請在此輸入文本信息">Hello Word</textarea> </div> <div style="width: 58%; float: right;"> <div id="output" style="border-bottom: 1px solid rgb(221, 221, 221); border-left: 1px solid rgb(221, 221, 221);border-top: 1px solid rgb(221, 221, 221); padding: 20px; overflow: auto; height: 243px;"></div> </div> <br style="clear:both;"> </div> <div class="form-control" align="right" style="width: 100%; color:#CCC; padding-right: 20px;"> 最後更新時間:2015.08.20 </div> </div> </body> </html>