Google Zxing 二维码生成与解析_JAVA_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > JAVA > Google Zxing 二维码生成与解析

Google Zxing 二维码生成与解析

 2017/6/8 5:32:24  bijian1013  程序员俱乐部  我要评论(0)
  • 摘要:生成二维码的开源项目可谓是琳琅满目:SwetakeQRCode、BarCode4j、Zxing等等。前端有JQuery-qrcode,同样能实现生成二维码。选择Zxing的原因可能是觉得Google公司是很著名的公司吧。其实使用起来相当的简单,我这里使用的是最新3.2Zxing.jar,省的你找jar的时间,下面是下载地址。一.生成二维码publicstaticStringcreateQrcode(){StringqrcodeFilePath="";try{intqrcodeWidth=300
  • 标签:Google 解析 二维码

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

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

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

一.生成二维码

class="java">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目录下生成一个二维码图片,如下所示:


  可以直接用微信扫描,打开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

  • 大小: 20.7 KB
  • ZxingDemo.rar (517.1 KB)
  • 下载次数: 0
  • 查看图片附件
上一篇: int数组交并差集 下一篇: 没有下一篇了!
发表评论
用户名: 匿名