js生成帶logo的二維碼


作為一名java程序員,一直以來都是使用服務端生成二維碼,最近接觸前端的設計,感覺二維碼這塊如果放到前端去生成,一方面可以減輕服務端的壓力,訪問帶寬,另一方面,前端頁面控制比較順暢

閑話少敘,說下我的思路,先使用jquery.qrcode.js生成一個二維碼(關於中文問題接下來討論),由於此插件本身不支持帶自定義logo的,所以差強人意吧,但是已經為我們省去不少工作,接下來的工作我們自己搞

簡述下思路

先頁面上准備一個logo圖的img標簽

用插件生成一個二維碼,(canvas標簽)

通過畫筆將logo圖片畫到二維碼上即可,

是不是很簡單?

上代碼

 1 //計算寬,高,中心坐標,logo大小                                                                       
 2     var width = 200;                                                                      
 3     var height = 200;                                                                     
 4     var x = width * 0.4;                                                                  
 5     var y = height * 0.4;                                                                 
 6     var lw = width * 0.2;                                                                 
 7     var lh = height * 0.2;                                                                
 8 //生成二維碼                                                                                   
 9     $("#qrcodeDiv").qrcode({                                                              
10         width: width,                                                                     
11         height:height,                                                                    
12         text: "http://www.baidu.com"                                                      
13     });                                                                                   
14 //畫logo                                                                                      
15     $("#qrcodeDiv canvas")[0].getContext('2d').drawImage($("#logoImg")[0], x, y, lx, ly); 

 上效果圖

接着剛才的中文的問題在說兩句,

中文一直是程序員永久的痛,不要問怎么知道的,時間久了就會知道,關於這個可以自己進行字符轉碼,將utf8編碼轉為

 1     function utf16to8(str) {  
 2             var out, i, len, c;  
 3             out = "";  
 4             len = str.length;  
 5             for (i = 0; i < len; i++) {  
 6                 c = str.charCodeAt(i);  
 7                 if ((c >= 0x0001) && (c <= 0x007F)) {  
 8                     out += str.charAt(i);  
 9                 } else if (c > 0x07FF) {  
10                     out += String.fromCharCode(0xE0 | ((c >> 12) & 0x0F));  
11                     out += String.fromCharCode(0x80 | ((c >> 6) & 0x3F));  
12                     out += String.fromCharCode(0x80 | ((c >> 0) & 0x3F));  
13                 } else {  
14                     out += String.fromCharCode(0xC0 | ((c >> 6) & 0x1F));  
15                     out += String.fromCharCode(0x80 | ((c >> 0) & 0x3F));  
16                 }  
17             }  
18             return out;  
19         } 
轉換之后就可以用了

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM