1. 程式人生 > >Java 基於zxing開源專案生成二維碼以及二維碼解析譯碼

Java 基於zxing開源專案生成二維碼以及二維碼解析譯碼

基於zxing3.3.3,點選進行跳轉到github的zxing開源專案下載開源專案檔案

JDK版本為1.8

zxing-3.3.3 jar包下載

注意:

1、二維碼掃描出來的網址顯示的是文字而不是連結網站的原因:沒有在網址前面加http://或https://

例如:將www.baidu.com更改為https://www.baidu.com

2、實現二維碼掃描下載安裝軟體(以安卓為例)

apk下載安卓網址儘量寫成:http://www.hern.com/mobile/appdown,不要寫成(這種方式在部分軟體上會出現不安全警告,例如微信和QQ的掃一掃,但是這種方式是正確的,只是不是本系(騰訊系)軟體而已):http://www.hern.com/mobile/hern.apk

3、實現二維碼名片

需要藉助VCard標準通訊簿基本格式實現

生成二維碼:

package com.zxing;
import java.util.*;
import java.io.File;
import java.math.*;
import java.net.*;
import java.nio.file.Path;

import com.google.zxing.BarcodeFormat;
import com.google.zxing.EncodeHintType;
import com.google.zxing.MultiFormatWriter;
import com.google.zxing.WriterException;
import com.google.zxing.client.j2se.MatrixToImageWriter;
import com.google.zxing.common.BitMatrix;
import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel;
import java.awt.*;
/*
 *作者:Hern
 *生成二維碼圖片 
 * */
public class CreateQRCode {
	
	private static final int width = 300;//設定二維碼的寬度
	private static final int height = 300;//設定二維碼的高度
	private static final String format = "jpg";//設定二維碼的格式
	
	private static final String url1 = "D:/QRCode/QRCode1.jpg";
	private static final String url2 = "D:/QRCode/QRCode2.jpg";
	
	private static final Path file1 = new File(url1).toPath();//設定二維碼的儲存地址
	private static final Path file2 = new File(url2).toPath();
	
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		
		//定義二維碼引數
		HashMap hints = new HashMap<>();
		hints.put(EncodeHintType.CHARACTER_SET, "utf-8");//設定編碼格式
		hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.L);//設定糾錯能力,糾錯級別(L 7%、M 15%、Q 25%、H 30%)
		hints.put(EncodeHintType.MARGIN, 5);//設定邊距

		try {
			
			URL content = new URL("https://blog.csdn.net/qq_36761831/article/details/84075497");//設定顯示網頁地址
			
			String str = "作者是Hern,基於GitHub開源專案生成的二維碼\n"+"糾錯能力最低為75%,本人測試最高糾錯能力測試為82.35%\n"+"編碼採用UTF-8格式\n"+"生成的二維碼格式為jpg\n";//設定顯示的內退
			
			BitMatrix bitMatrix1 =  new MultiFormatWriter().encode(str, BarcodeFormat.QR_CODE, width, height, hints);//生成二維碼
			BitMatrix bitMatrix2 =  new MultiFormatWriter().encode(content.toString(), BarcodeFormat.QR_CODE, width, height, hints);//生成二維碼
			
			MatrixToImageWriter.writeToPath(bitMatrix1, format, file1);//將二維碼寫入到指定資料夾中
			MatrixToImageWriter.writeToPath(bitMatrix2, format, file2);//將二維碼寫入到指定資料夾中
			
			System.out.println("成功建立二維碼\n"+"二維碼的檔案儲存位置是:"+url1+"    "+url2);
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
	}

}

解析二維碼(二維碼譯碼):

package com.zxing;

import com.google.zxing.*;
import com.google.zxing.client.j2se.BufferedImageLuminanceSource;
import com.google.zxing.common.HybridBinarizer;

import java.awt.Image;
import java.awt.image.BufferedImage;
import java.io.*;
import java.util.HashMap;

import javax.imageio.ImageIO;

public class ReadQRCode {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		
		try {
			
			HashMap hints = new HashMap<>();
			hints.put(EncodeHintType.CHARACTER_SET, "utf-8");//設定編碼格式
			
			File file = new File("D:/QRCode/QRCode1.jpg");//檔案的讀取路徑
			BufferedImage image = ImageIO.read(file);//讀取圖片
			BinaryBitmap binaryBitmap = new BinaryBitmap(new HybridBinarizer(new BufferedImageLuminanceSource(image)));//轉換成點陣圖形式
			
			MultiFormatReader formatReader = new MultiFormatReader();
			Result result = formatReader.decode(binaryBitmap, hints);//進行譯碼
			
			System.out.println("二維碼的識別結果是:"+result.toString());
			System.out.println("二維碼格式型別:"+result.getBarcodeFormat());
			System.out.println("二維碼文字內容:"+result.getText());
			System.out.println("二維碼的編碼數:"+result.getNumBits());
			System.out.println("二維碼時間截點是:"+result.getTimestamp());
			
		} catch (NotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

}