欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Google Zxing 二维码生成与解析

程序员文章站 2022-05-28 18:52:47
...

        生成二维码的开源项目可谓是琳琅满目: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<EncodeHintType, String> hints = new HashMap<EncodeHintType, String>();
		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<DecodeHintType, Object> hintTypeObjectHashMap = new HashMap<DecodeHintType, Object>();
		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 二维码生成与解析
            
    
    博客分类: java基础 java二维码Zxing 
  可以直接用微信扫描,打开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 二维码生成与解析
            
    
    博客分类: java基础 java二维码Zxing 
  • 大小: 20.7 KB