博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Google Zxing 二维码生成与解析
阅读量:6073 次
发布时间:2019-06-20

本文共 2669 字,大约阅读时间需要 8 分钟。

生成二维码的开源项目可谓是琳琅满目,SwetakeQRCode、BarCode4j、Zxing......

    前端有JQuery-qrcode,同样能实现生成二维码。

    选择Zxing的原因可能是对 Google 公司的信赖和个人崇拜吧。

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

    百度云盘地址:  提取密码: bssv

    生成二维码:

public static String createQrcode(String _text){        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(_text, BarcodeFormat.QR_CODE, qrcodeWidth, qrcodeHeight, hints); BufferedImage image = new BufferedImage(qrcodeWidth, qrcodeHeight, BufferedImage.TYPE_INT_RGB); JVMRandom random = new JVMRandom(); File QrcodeFile = new File("F:\\qrcode\\" + random.nextInt() + "." + qrcodeFormat); ImageIO.write(image, qrcodeFormat, QrcodeFile); MatrixToImageWriter.writeToFile(bitMatrix, qrcodeFormat, QrcodeFile); 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  的解析有兴趣,可以读读源码。

 

作者: 

出处: 
如果,您认为阅读这篇博客让您有些收获,不妨点击一下右下角的【推荐】 
如果,您希望更容易地发现我的新博客,不妨点击一下左下角的【关注我】 
如果,您对我的博客内容感兴趣,请继续关注我的后续博客,我是【Orson】 
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段 声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。 

转载:http://www.cnblogs.com/java-class/p/5251690.html

你可能感兴趣的文章
Android开源代码解读の使用TelephonyManager获取移动网络信息
查看>>
想说一点东西。。。。
查看>>
css知多少(8)——float上篇
查看>>
NLB网路负载均衡管理器详解
查看>>
水平添加滚动条
查看>>
PHP中”单例模式“实例讲解
查看>>
VS2008查看dll导出函数
查看>>
VM EBS R12迁移,启动APTier . AutoConfig错误
查看>>
atitit.细节决定成败的适合情形与缺点
查看>>
iOS - Library 库
查看>>
MATLAB 读取DICOM格式文件
查看>>
spring事务管理(Transaction)
查看>>
django.contrib.auth登陆注销学习
查看>>
js执行本地exe文件的3种方法
查看>>
理解B树索引
查看>>
vi编辑器的命令集合
查看>>
Mysql利用binlog恢复数据
查看>>
解决 Windows启动时要求验证
查看>>
我的友情链接
查看>>
用yum安装mariadb
查看>>