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.jar比QrCode.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 }
生成的二維碼圖片如下: