在zblog模板制作中,偶爾需要用到在文章頁面生成當前頁面網址的二維碼,方便手機用戶手機掃一掃查看以及用手機分享文章。二維碼的生成有幾種方式,最常用的就是第三方二維碼調用,以及本站JS方法。
方法一、第三方生成二維碼(QR Code)的方式:
1、gbtags
案例:<imgsrc="http://www.gbtags.com/gb/qrcode?t=http://theme.b5b6.com/ydbaijia/post/16.html&s=300" alt="掃一掃二維碼">
2、imjad
比如:https://api.imjad.cn/qrcode.md
調用方法 GET https://api.imjad.cn/qrcode/
調用過的案例:<img src="https://api.imjad.cn/qrcode/?text={$article.Url}&size=100" alt="手機訪問">
參數說明
參數名 | 含義 | 默認 |
---|---|---|
text | string 待轉換內容,最大 512Byte,請使用 utf-8 字符集并進行 urlencode | https://api.imjad.cn/qrcode.md |
logo | string 二維碼中間 logo 的地址,最大 200KiB | 無 |
size | int 二維碼大小,單位 px,最大 500 | 200 |
level | string 冗余度,可用值為 L/M/Q/H | M |
bgcolor | string 背景色,應為十六進制 | #FFFFFF |
fgcolor | string 前景色,應為十六進制 | #000000 |
encode | string 返回數據格式 | raw |
fun | string 用于異步調用時,指定 CallBack 的函數名 | qrcode |
返回數據格式說明
encode | 含義 |
---|---|
raw | 返回 MIME 類型為 image/png 的圖像數據 |
json | 返回 JSON 格式數據 |
js | 返回函數名為 qrcode 的 JavaScript 腳本,用于同步調用 |
jsc | 返回指定 CallBack 函數名的 JavaScript 腳本,可用于異步調用 |
備注:服務器緩存保留 7 天
方法二、使用juqery+jquery.qrcode.min.js生成本地二維碼:
如何使用
1、首先在頁面中加入jquery庫文件和qrcode插件。
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="jquery.qrcode.min.js"></script>
2、在頁面中需要顯示二維碼的地方加入以下代碼:
<div id="code"></div>
3、調用qrcode插件。
qrcode支持canvas和table兩種方式進行圖片渲染,默認使用canvas方式,效率最高,當然要瀏覽器支持html5。直接調用如下:
$('#code').qrcode("http://www.helloweba.com"); //任意字符串
您也可以通過以下方式調用:
$("#code").qrcode({
render: "table", //table方式
width: 200, //寬度
height:200, //高度
text: "www.helloweba.com" //任意內容
});
這樣就可以在頁面中直接生成一個二維碼,你可以用手機“掃一掃”功能讀取二維碼信息。
識別中文
我們試驗的時候發現不能識別中文內容的二維碼,通過查找多方資料了解到,jquery-qrcode是采用charCodeAt()方式進行編碼轉換的。而這個方法默認會獲取它的Unicode編碼,如果有中文內容,在生成二維碼前就要把字符串轉換成UTF-8,然后再生成二維碼。您可以通過以下函數來轉換中文字符串:
function toUtf8(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;
}
以下示例:
var str = toUtf8("釣魚島是中國的!");
$('#code').qrcode(str);
具體調用案例:
模板代碼:
<div id="code"></div> //調用位置
<script type="text/javascript" src="jquery.min.js"></script>
<script type="text/javascript" src="{$host}zb_users/theme/{$theme}/script/jquery.qrcode.min.js"></script>
<script>
$("#code").qrcode({
// render: "table", //table方式
width: 80, //寬度
height:80, //高度
text: "{$article.Url}" //任意內容
});
</script>
jquery.qrcode.min.js下載: