1. 程式人生 > >使用zxing實現二維碼,並解析二維碼

使用zxing實現二維碼,並解析二維碼

使用zxing生成二維碼,會比較簡單。很適合初學者學習。

package com.code;

import java.io.File;
import java.nio.file.Path;
import java.util.HashMap;

import com.google.zxing.BarcodeFormat;
import com.google.zxing.EncodeHintType;
import com.google.zxing.MultiFormatWriter;
import com.google.zxing.client.j2se.MatrixToImageWriter;
import com.google.zxing.common.BitMatrix;
import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel;

/**
 * 
 * @author 謝財盛 
 * 檔名:QRcode.java
 * 時間日期:2018年7月29日下午11:10:04
 * 作用:TODO
 * 版本號:1.0
 */
public class Zxing {

	public static void main(String[] args) {
		int width = 500;                   //設定二維碼寬
		int height = 500;                  //設定二維碼高
		String format = "png";             //二維碼的格式
		String conten = "www.baidu.com";   //二維碼的內容(可以是文字)
		
		//定義二維碼引數
		HashMap hamp = new HashMap();
		hamp.put(EncodeHintType.CHARACTER_SET,"utf-8");
		hamp.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.M);
		hamp.put(EncodeHintType.MARGIN,2);
		
		try {
			BitMatrix bitMatrix = new MultiFormatWriter().encode(conten, BarcodeFormat.QR_CODE, width, height,hamp);
			Path file = new File("D:/code/img1.png").toPath();
			MatrixToImageWriter.writeToPath(bitMatrix, format, file);

		} catch (Exception e) {
			e.printStackTrace();
		}

	}

}

注意:如果報錯java.io.FileNotFoundException: D:\abc\img1.png (系統找不到指定的路徑。)。說明在你的這個盤裡面沒有這個檔案,所以再執行這個main之前,要去D盤先建一個code資料夾。

接下來實現使用zxing來解析二維碼:

package com.code;

import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.HashMap;

import javax.imageio.ImageIO;

import com.google.zxing.BinaryBitmap;
import com.google.zxing.EncodeHintType;
import com.google.zxing.MultiFormatReader;
import com.google.zxing.NotFoundException;
import com.google.zxing.Result;
import com.google.zxing.client.j2se.BufferedImageLuminanceSource;
import com.google.zxing.common.HybridBinarizer;

public class ReadZxing {
	public static void main(String[] args) {
		try {
			MultiFormatReader formatReader = new MultiFormatReader();
			
			File file = new File("D:/code/img1.png");   //這個是上面我們生成的二維碼的路徑
			BufferedImage image = ImageIO.read(file);
			
			BinaryBitmap binaryBitmap = new BinaryBitmap(new HybridBinarizer(new BufferedImageLuminanceSource(image)));
			
			//定義二維碼引數
			HashMap hints = new HashMap();
			hints.put(EncodeHintType.CHARACTER_SET,"utf-8");
			
			Result result = formatReader.decode(binaryBitmap, hints);
			
			System.out.println("解析結果:"+result.toString());
			System.out.println("二維碼格式型別:"+result.getBarcodeFormat());
			System.out.println("二維碼文字內容:"+result.getText());
		} catch (NotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

}

執行類,結果:

二維碼內容是www.baidu.com,文字也可以。

推薦以下這兩篇文章,非常好,是個很好的學習資料,

這兩篇都非常的不錯,推薦大家去看看,對二維碼更深一層的瞭解。