首頁  >  文章  >  web前端  >  jquery外掛qrcode線上產生二維碼_jquery

jquery外掛qrcode線上產生二維碼_jquery

WBOY
WBOY原創
2016-05-16 16:02:161364瀏覽

隨著行動網路的發展,二維碼現在應用得越來越廣泛了,隨手掃掃就可以瀏覽網站、加個好友什麼的,比起手工輸入真的是方便太多了。

前期做了一個綜合評量系統,考慮逐步實現行動化,一長串的IP位址用戶輸入也不方便,借助二維碼的話,用戶拿起手機掃掃就可以直接進入系統。

基於這個應用場景,就上網研究下了網站二維碼的實現方式,歸納起來有以下兩種:

1、借助一些二維碼產生網站或二維碼產生器產生二維碼圖片,然後掛在網站上,如碼雲 QR-Code (二維碼) 線上產生器

優點:開發成本為零,能夠快速實現多樣化的二維碼;

缺點:變更二維碼的維護略顯麻煩

2、在後端利用java或.net程式碼產生二維碼圖片,再在網站上引用圖片,如qrcode、zxing等

優點:可自訂性強,可快速批量產生

缺點:重量級實作方式,對於簡單應用來講開發成本較高

3、在前端頁透過javascript等方式即時產生為二維碼(ˇ?ˇ) ,如jquery-qrcode

優點:輕量級實現方式,減少圖片IO,節省流量

缺點:不適合複雜二維碼的生成

當然在實際應用中,這三種實現方式也不是完全孤立的,我們也可以根據專案實際情況結合應用,最大限度地提高效率、節省成本。

晚上時間也不多就選了個jquery-qrcode研究下。

jquery-qrcode

jquery-qrcode是一個能夠在瀏覽器端產生二維碼的jquery外掛程式。它是獨立的,最小壓縮之後不足4k,也沒有圖片下載請求。引入該類別庫之後,只需要一行程式碼,就可以輕鬆地在web頁面上加上二維碼。

其託管在github上:https://github.com/jeromeetienne/jquery-qrcode

jquery-qrcode主要包含兩個檔案:

1、qrcode.js:二維碼演算法實作類別

2、jquery.qrcode.js:用jquery將qrcode.js封裝起來,依照使用者參數,實作canvas及table兩種方式渲染產生二維碼

壓縮之後的只有一個檔案jquery.qrcode.min.js。

程式碼實作

github上其實已經有了非常詳細的使用說明及範例,在此就不多做說明了。

不過為了方便今後使用,我還是結合網路上大家的使用心得重新整理一份程式碼。

jquery-qrcode.html代碼如下:

<!DOCTYPE html>
<html>
<head>
 <meta charset="UTF-8">
 <title>通过jquery-qrcode生成二维码</title>
</head>
<body>
<!-- 引入百度CDN公共库的压缩版jQuery -->
<script src="http://libs.baidu.com/jquery/2.0.3/jquery.min.js"></script>
<!--引入压缩版jquery.qrcode.js -->
<script src="jquery.qrcode.min.js"></script>
<!--未压缩则需要引入两个文件jquery.qrcode.js和qrcode.js -->
<!--jquery.qrcode.js:jquery封装渲染类库 -->
<!--<script src="jquery.qrcode.js"></script>-->
<!--qrcode.js:二维码核心计算类库 -->
<!--<script src="qrcode.js"></script>-->
<script src="jquery.qrcode.min.js"></script>
<!--解决中文乱码问题,引入utf16t8.js -->
<script src="utf16to8.js"></script>

<div id="qrcodeCanvas"></div>

<div id="qrcodeTable"></div>
<script>
 //最简用法,render默认是canvas
 $('#qrcodeCanvas').qrcode("http://www.jb51.net/");
 //完整用法,有默认值的均可省略
 $('#qrcodeTable').qrcode({
  text: utf16to8("脚本之家:http://www.jb51.net/"),//二维码包含的内容,默认只支持英文内容,中文会乱码,通过utf16to8转码可支持中文
  render: "table",//渲染方式可选择canvas或table,默认是canvas,canvas方式还支持右键图片下载
  width: 256,//宽度,默认是256
  height: 256,//高度,默认是256,建议宽度和高度保持一致,否则不容易被识别
  typeNumber: -1,//计算模式,默认是-1
  //correctLevel: QRErrorCorrectLevel.H,//纠错等级,默认是QRErrorCorrectLevel.H,但是加上correctLevel这一行后无法渲染出二维码
  background: "#ffffff",//背景颜色,默认是白色
  foreground: "#000000"//前景颜色,默认是黑色
 });
</script>
<body>
</html>

基於官方範例測試,我們會發現辨識出來的中文二維碼會是亂碼。

根據網友心存善念的解釋:

這跟js的機制有關係,jquery-qrcode這個函式庫是採用 charCodeAt() 這個方式進行編碼轉換的,

而這個方法預設會取得它的 Unicode 編碼,一般的解碼器都是採用UTF-8, ISO-8859-1等方式,

英文是沒有問題,如果是中文,一般情況下Unicode是UTF-16實現,長度2位,而UTF-8編碼是3位,這樣二維碼的編解碼就不匹配了。

解決方式當然是,在二維碼編碼前把字串轉換成UTF-8

因此我們可以藉助utf16to8.js解決這個問題,具體程式碼如下:

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;
}

以上就是今天給大家分享的全部內容了,希望能夠對大家學習jQuery有所幫助。

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn