JAVA生成二維碼

二維碼的生成與解析。有多種途徑。我選擇用大品牌,google老大的zxing。

gitHub鏈接是(我用的3.0.0,已經是nio了)

https://github.com/zxing/zxing/tree/zxing-3.0.0



// 其中輸出圖像和讀取圖像的類在core包

MultiFormatReader

MultiFormatWriter

// 生成矩陣的類在javase的包裏

MatrixToImageWriter

pom.xml中的配置爲

Xml代碼 

生成圖像與解析圖像的測試工具類:

Java代碼 
package com.polysaas.edu.qrcode;

import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.nio.file.FileSystems;
import java.nio.file.Path;
import java.util.HashMap;
import java.util.Map;

import javax.imageio.ImageIO;

import org.junit.Test;

import com.alibaba.fastjson.JSONObject;
import com.google.zxing.BarcodeFormat;
import com.google.zxing.Binarizer;
import com.google.zxing.BinaryBitmap;
import com.google.zxing.DecodeHintType;
import com.google.zxing.EncodeHintType;
import com.google.zxing.LuminanceSource;
import com.google.zxing.MultiFormatReader;
import com.google.zxing.MultiFormatWriter;
import com.google.zxing.NotFoundException;
import com.google.zxing.Result;
import com.google.zxing.WriterException;
import com.google.zxing.client.j2se.BufferedImageLuminanceSource;
import com.google.zxing.client.j2se.MatrixToImageWriter;
import com.google.zxing.common.BitMatrix;
import com.google.zxing.common.HybridBinarizer;

public class QRCodeTest {

	/**
	 * 生成圖像
	 * 
	 * @throws WriterException
	 * @throws IOException
	 */
	@Test
	public void testEncode() throws WriterException, IOException {
		String filePath = "D://";
		String fileName = "zxing.png";
		JSONObject json = new JSONObject();
		json.put(
				"zxing",
				"https://github.com/zxing/zxing/tree/zxing-3.0.0/javase/src/main/java/com/google/zxing");
		json.put("author", "shihy");
		String content = json.toJSONString();// 內容
		int width = 200; // 圖像寬度
		int height = 200; // 圖像高度
		String format = "png";// 圖像類型
		Map<EncodeHintType, Object> hints = new HashMap<EncodeHintType, Object>();
		hints.put(EncodeHintType.CHARACTER_SET, "UTF-8");
		BitMatrix bitMatrix = new MultiFormatWriter().encode(content,
				BarcodeFormat.QR_CODE, width, height, hints);// 生成矩陣
		Path path = FileSystems.getDefault().getPath(filePath, fileName);
		MatrixToImageWriter.writeToPath(bitMatrix, format, path);// 輸出圖像
		System.out.println("輸出成功.");
	}

	/**
	 * 解析圖像
	 */
	@Test
	public void testDecode() {
		String filePath = "D://zxing.png";
		BufferedImage image;
		try {
			image = ImageIO.read(new File(filePath));
			LuminanceSource source = new BufferedImageLuminanceSource(image);
			Binarizer binarizer = new HybridBinarizer(source);
			BinaryBitmap binaryBitmap = new BinaryBitmap(binarizer);
			Map<DecodeHintType, Object> hints = new HashMap<DecodeHintType, Object>();
			hints.put(DecodeHintType.CHARACTER_SET, "UTF-8");
			Result result = new MultiFormatReader().decode(binaryBitmap, hints);// 對圖像進行解碼
			JSONObject content = JSONObject.parseObject(result.getText());
			System.out.println("圖片中內容:	");
			System.out.println("author:	" + content.getString("author"));
			System.out.println("zxing:	" + content.getString("zxing"));
			System.out.println("圖片中格式:	");
			System.out.println("encode:	" + result.getBarcodeFormat());
		} catch (IOException e) {
			e.printStackTrace();
		} catch (NotFoundException e) {
			e.printStackTrace();
		}
	}
}

測試生成圖像爲:



解析到的內容爲:

Java代碼 複製代碼 收藏代碼
  1. 圖片中內容:
  2. author: shihy
  3. zxing: https://github.com/zxing/zxing/tree/zxing-3.0.0/javase/src/main/java/com/google/zxing
  4. 圖片中格式:
  5. encode: QR_CODE  
發佈了49 篇原創文章 · 獲贊 76 · 訪問量 22萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章