Google Zxing 二维码生成与解析

阅读更多

        生成二维码的开源项目可谓是琳琅满目:SwetakeQRCode、BarCode4j、Zxing等等。前端有JQuery-qrcode,同样能实现生成二维码。

  选择Zxing的原因可能是觉得Google公司是很著名的公司吧。

  其实使用起来相当的简单,我这里使用的是最新3.2 Zxing.jar ,省的你找jar的时间,下面是下载地址。

一.生成二维码

public static String createQrcode(){
	String qrcodeFilePath = "";
	try {
		int qrcodeWidth = 300;
		int qrcodeHeight = 300;
		String qrcodeFormat = "png";
		HashMap hints = new HashMap();
		hints.put(EncodeHintType.CHARACTER_SET, "UTF-8");
		BitMatrix bitMatrix = new MultiFormatWriter().encode("http://bijian1013.iteye.com/", BarcodeFormat.QR_CODE, qrcodeWidth, qrcodeHeight, hints);

		BufferedImage image = new BufferedImage(qrcodeWidth, qrcodeHeight, BufferedImage.TYPE_INT_RGB);
		Random random = new Random();
		File QrcodeFile = new File("D:\\qrcode\\" + random.nextInt() + "." + qrcodeFormat);
		ImageIO.write(image, qrcodeFormat, QrcodeFile);
		//MatrixToImageWriter.writeToFile(bitMatrix, qrcodeFormat, QrcodeFile);
		OutputStream out = new FileOutputStream(QrcodeFile);
		MatrixToImageWriter.writeToStream(bitMatrix, qrcodeFormat, out);
		qrcodeFilePath = QrcodeFile.getAbsolutePath();
	} catch (Exception e) {
		e.printStackTrace();
	}
	return qrcodeFilePath;
}

  a.上述代码中的 hints,为生成二维码时的一些参数设置,实现者将它构建Map类型的参数。

  b.上述生成实现当中,每生成一个二维码都会存放在目录下面,名称取整数随机数。

  c.MultiFormatWriter 对象为生成二维码的核心类,后面的 MatrixToImageWriter 只是将二维码矩阵输出到图片上面。

 

二.解析二维码

public static String decodeQr(String filePath) {
	String retStr = "";
	if ("".equalsIgnoreCase(filePath) && filePath.length() == 0) {
		return "图片路径为空!";
	}
	try {
		BufferedImage bufferedImage = ImageIO.read(new FileInputStream(filePath));
		LuminanceSource source = new BufferedImageLuminanceSource(bufferedImage);
		Binarizer binarizer = new HybridBinarizer(source);
		BinaryBitmap bitmap = new BinaryBitmap(binarizer);
		HashMap hintTypeObjectHashMap = new HashMap();
		hintTypeObjectHashMap.put(DecodeHintType.CHARACTER_SET, "UTF-8");
		Result result = new MultiFormatReader().decode(bitmap, hintTypeObjectHashMap);
		retStr = result.getText();
	} catch (Exception e) {
		e.printStackTrace();
	}
	return retStr;
}

  a.读取二维码图片,并送给 Zxing LuminanceSource 和 Binarizer 两兄弟的处理。

  b.处理完的位图和相应的解析参数,交由 MultiFormatReader 处理,并返回解析后的结果。

  c.如果对上述 两兄弟的处理 和 MultiFormatReader的解析有兴趣,可以读读源码。

 

三.运行效果

1.生成二维码图片

public static void main(String[] args) {
   ZxingDemo.createQrcode();
}

  执行上面的方法,将会在D:\qrcode目录下生成一个二维码图片,如下所示:

Google Zxing 二维码生成与解析_第1张图片
  可以直接用微信扫描,打开http://bijian1013.iteye.com/网址,当然,也可以用decodeQr方法解析此二维码。

2.解析二维码

public static void main(String[] args) {
   //ZxingDemo.createQrcode();
   String retStr = ZxingDemo.decodeQr("D:\\qrcode\\-2018013175.png");
   System.out.println(retStr);
}

  执行上面的方法,输出字符串“http://bijian1013.iteye.com/”。

 

参考文章:http://www.cnblogs.com/java-class/p/5251690.html

  • Google Zxing 二维码生成与解析_第2张图片
  • 大小: 20.7 KB
  • ZxingDemo.rar (517.1 KB)
  • 下载次数: 2
  • 查看图片附件

你可能感兴趣的:(java,二维码,Zxing)