二維碼:java生成二維碼


1. 二維碼介紹

草料解析:

我們現在日常生活中常用的二維碼一般指 QR code

QR碼是二維碼碼制中的一種,由日本 DENSO WAVE公司於1994年發明。

二維條碼是指在一維條碼的基礎上擴展出另一維具有可讀性的條碼,使用黑白矩形圖案表示二進制數據,被設備掃描后可獲取其中所包含的信息。一維條碼的寬度記載着數據,而其長度沒有記載數據。二維條碼的長度、寬度均記載着數據。二維條碼有一維條碼沒有的“定位點”和“容錯機制”。容錯機制在即使沒有辨識到全部的條碼、或是說條碼有污損時,也可以正確地還原條碼上的信息。二維條碼的種類很多,不同的機構開發出的二維條碼具有不同的結構以及編寫、讀取方法。

 

簡單來說,二維碼就是將一些信息按照某些原則用方塊來記錄顯示。

二維碼又分為靜態碼和活碼:

靜態碼:就是固定的信息,用手機掃描識別只會獲取到固定的文本信息。

活碼:就是保存一個url,用手機掃描識別后會跳轉到該url對應的網頁或者應用,能夠獲取的信息大大增加,並且具有相當大的靈活性。因此稱為活碼。

2. 二維碼原理

具體的原理,請看這里:https://www.cnblogs.com/alantu2018/p/8504373.html

3. java生成二維碼圖片

要在java項目中生產二維碼圖片,一般直接引用jar包即可。現在主要有兩個選擇,

一個是qrcode的官網(https://www.supershareware.com/qrcode-jar-free/)下載QrCode.jar

另一個選擇就是下載谷歌(http://repo1.maven.org/maven2/com/google/zxing/core/)的Zxing.jar

 

個人感受谷歌的Zxing.jarQrCode.jar相對好用,而且Zxing.jar還可以解析條形碼之類的功能。因此,推薦下載Zxing.jar使用。

 

下面是用java生成二維碼圖片的一個簡單應用:

 

  1 import java.io.ByteArrayOutputStream;
  2 
  3 import java.io.FileOutputStream;
  4 
  5 import java.io.IOException;
  6 
  7 import java.io.OutputStream;
  8 
  9 import java.util.HashMap;
 10 
 11 import java.util.Map;
 12 
 13  
 14 
 15 import com.google.zxing.BarcodeFormat;
 16 
 17 import com.google.zxing.EncodeHintType;
 18 
 19 import com.google.zxing.MultiFormatWriter;
 20 
 21 import com.google.zxing.WriterException;
 22 
 23 import com.google.zxing.client.j2se.MatrixToImageWriter;
 24 
 25 import com.google.zxing.common.BitMatrix;
 26 
 27 import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel;
 28 
 29  
 30 
 31 /**
 32 
 33  * 二維碼工具類
 34 
 35  * @author limingcheng
 36 
 37  *
 38 
 39  */
 40 
 41 public class QrCodeUtil {
 42 
 43  
 44 
 45 /**
 46 
 47  * 生成一個二維碼圖片
 48 
 49  * @param width
 50 
 51  * @param height
 52 
 53  * @param content
 54 
 55  * @return
 56 
 57  * @throws WriterException
 58 
 59  * @throws IOException
 60 
 61  */
 62 
 63 public static byte[] createQRCode(int width, int height, String content) throws WriterException, IOException {
 64 
 65 // 二維碼基本參數設置
 66 
 67 Map<EncodeHintType, Object> hints = new HashMap<EncodeHintType, Object>();
 68 
 69 hints.put(EncodeHintType.CHARACTER_SET, "utf-8");// 設置編碼字符集utf-8
 70 
 71 hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.M);// 設置糾錯等級L/M/Q/H,糾錯等級越高越不易識別,當前設置等級為最高等級H
 72 
 73 hints.put(EncodeHintType.MARGIN, 0);// 可設置范圍為0-10,但僅四個變化0 1(2) 3(4 5 6) 7(8 9 10)
 74 
 75 // 生成圖片類型為QRCode
 76 
 77 BarcodeFormat format = BarcodeFormat.QR_CODE;
 78 
 79 // 創建位矩陣對象
 80 
 81 BitMatrix bitMatrix = new MultiFormatWriter().encode(content, format, width, height, hints);
 82 
 83 // 設置位矩陣轉圖片的參數
 84 
 85 //        MatrixToImageConfig config = new MatrixToImageConfig(Color.black.getRGB(), Color.white.getRGB());
 86 
 87 // 位矩陣對象轉流對象
 88 
 89 ByteArrayOutputStream os = new ByteArrayOutputStream();
 90 
 91 MatrixToImageWriter.writeToStream(bitMatrix, "png", os);
 92 
 93 return os.toByteArray();
 94 
 95 }
 96 
 97  
 98 
 99 public static void main(String[] args) throws WriterException, IOException {
100 
101 byte[] b = createQRCode(100, 100, "遇見最好的自己!");
102 
103 OutputStream os = new FileOutputStream("E:\\bestme.png");
104 
105 os.write(b);
106 
107 os.close();
108 
109 }
110 
111 }

 

 

生成的二維碼圖片如下:

 

 


免責聲明!

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



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