歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

Java實現二維碼QRCode的編碼和解碼

試用下Android手機的二維碼掃描軟件,掃描了下火車票、名片等等,覺得非常不錯很有意思的。當然Java也可以實現這些,現在就分享下如何簡單用Java實現二維碼中QRCode的編碼和解碼(可以手機掃描驗證)。

涉及到的一些主要類庫,方便大家下載:

編碼 lib:Qrcode_swetake.jar   (官網介紹 -- http://www.swetake.com/qr/index-e.html)
解碼 lib:qrcode.jar            (官網介紹 -- http://sourceforge.jp/projects/qrcode/)

免費下載地址在 http://linux.linuxidc.com/

用戶名與密碼都是www.linuxidc.com

具體下載目錄在 /2012年資料/8月/16日/Java實現二維碼QRCode的編碼和解碼

後來發現一個更好的條形碼和二維碼的開源軟件(ZXing),詳細介紹見:http://www.linuxidc.com/Linux/2012-08/68359.htm

【一】、編碼:

QRCodeEncoderHandler.java

添加如下代碼:

  1. package michael.qrcode;   
  2.   
  3. import java.awt.Color;   
  4. import java.awt.Graphics2D;   
  5. import java.awt.image.BufferedImage;   
  6. import java.io.File;   
  7.   
  8. import javax.imageio.ImageIO;   
  9.   
  10. import com.swetake.util.Qrcode;   
  11.   
  12. /**  
  13.  * 二維碼生成器  
  14.  * @blog http://www.linuxidc.com  
  15.  * @author Michael  
  16.  */  
  17. public class QRCodeEncoderHandler {   
  18.   
  19.     /**  
  20.      * 生成二維碼(QRCode)圖片  
  21.      * @param content  
  22.      * @param imgPath  
  23.      */  
  24.     public void encoderQRCode(String content, String imgPath) {   
  25.         try {   
  26.   
  27.             Qrcode qrcodeHandler = new Qrcode();   
  28.             qrcodeHandler.setQrcodeErrorCorrect('M');   
  29.             qrcodeHandler.setQrcodeEncodeMode('B');   
  30.             qrcodeHandler.setQrcodeVersion(7);   
  31.   
  32.             System.out.println(content);   
  33.             byte[] contentBytes = content.getBytes("gb2312");   
  34.   
  35.             BufferedImage bufImg = new BufferedImage(140140,   
  36.                     BufferedImage.TYPE_INT_RGB);   
  37.   
  38.             Graphics2D gs = bufImg.createGraphics();   
  39.   
  40.             gs.setBackground(Color.WHITE);   
  41.             gs.clearRect(00140140);   
  42.   
  43.             // 設定圖像顏色 > BLACK   
  44.             gs.setColor(Color.BLACK);   
  45.   
  46.             // 設置偏移量 不設置可能導致解析出錯   
  47.             int pixoff = 2;   
  48.             // 輸出內容 > 二維碼   
  49.             if (contentBytes.length > 0 && contentBytes.length < 120) {   
  50.                 boolean[][] codeOut = qrcodeHandler.calQrcode(contentBytes);   
  51.                 for (int i = 0; i < codeOut.length; i++) {   
  52.                     for (int j = 0; j < codeOut.length; j++) {   
  53.                         if (codeOut[j][i]) {   
  54.                             gs.fillRect(j * 3 + pixoff, i * 3 + pixoff, 33);   
  55.                         }   
  56.                     }   
  57.                 }   
  58.             } else {   
  59.                 System.err.println("QRCode content bytes length = "  
  60.                         + contentBytes.length + " not in [ 0,120 ]. ");   
  61.             }   
  62.   
  63.             gs.dispose();   
  64.             bufImg.flush();   
  65.   
  66.             File imgFile = new File(imgPath);   
  67.   
  68.             // 生成二維碼QRCode圖片   
  69.             ImageIO.write(bufImg, "png", imgFile);   
  70.   
  71.         } catch (Exception e) {   
  72.             e.printStackTrace();   
  73.         }   
  74.   
  75.     }   
  76.   
  77.     /**  
  78.      * @param args the command line arguments  
  79.      */  
  80.     public static void main(String[] args) {   
  81.         String imgPath = "D:/test/twocode/Michael_QRCode.png";   
  82.   
  83.         String content = "Hello 大大、小小,welcome to QRCode!"  
  84.                 + "\nMyblog [ http://www.linuxidc.com ]"  
  85.                 + "\nEMail [ [email protected] ]" + "\nTwitter [ @suncto ]";   
  86.   
  87.         QRCodeEncoderHandler handler = new QRCodeEncoderHandler();   
  88.         handler.encoderQRCode(content, imgPath);   
  89.   
  90.         System.out.println("encoder QRcode success");   
  91.     }   
  92. }  

運行後生成的二維碼圖片如下:

此時就可用手機的二維碼掃描軟件(本人用的:android 快拍二維碼 )來測試下,識別成功的截圖如下:

喜歡的朋友可以下載後試一試,做一些名片或者自己喜歡的東西。當然Java也可以對二維碼圖片解碼,具體看下面關於解碼的內容。

Copyright © Linux教程網 All Rights Reserved