基于Google的zxing生成和解析QR Code

原创 2016年08月30日 09:55:10

基于Google的zxing生成和解析QR Code

介绍

二维码的技术在当今应用相当的的广泛,其中以QR Code应用最为广泛和流行。 

在二维码发展之前还有一维码即条形码,相比条形码二维码存储容量更大,并且容错性也更好。

优点

1、高密度编码,信息容量大(大概能存储几百上千个汉字)
2、编码范围广
3、容错能力强,具有纠错功能
4、译码可靠性高
5、可引入加密措施
6、成本低,易制作,持久耐用

缺点

1、安全问题,可能成为一些病毒入侵新渠道
备注:主要是安全问题

基于zxing生成和解析二维码

maven pom依赖

    <!-- 二维码zxing组件 -->

    <!-- 核心组件 -->
    <dependency>
        <groupId>com.google.zxing</groupId>
        <artifactId>core</artifactId>
        <version>3.2.1</version>
    </dependency>

    <!-- javase扩展组件 -->
    <dependency>
        <groupId>com.google.zxing</groupId>
        <artifactId>javase</artifactId>
        <version>3.2.1</version>
    </dependency>

    备注:一定不能忘记javase扩展组件

封装QrCodeUtils工具类

/**
 * <h3>QRCode工具类</h3>
 * 
 *      1、生成二维码<br>
 *      2、解析二维码<br>
 * 
 * @author xuyi3
 * @2016年8月30日 @上午8:49:21
 * @QrUtils
 * @功能说明:<br>
 * @春风十里不如你
 * @备注
 */
public class QrCodeUtils
{

    /**
     * <h3>生成二维码</h3>
     * 
     * @param width             宽度(像素)
     * @param height            高度(像素)
     * @param content           文本内容
     * @param charset           文本字符编码
     * @param path              存放二维码路径
     * @param imageFormat       图片格式(jpg/png...)
     * @throws Exception
     */
    public static void createQRCode(int width, int height, String content, String charset, String path,
            String imageFormat) throws Exception
    {
        // 设置二维码一些配置信息
        Map<EncodeHintType, Object> hints = new HashMap<EncodeHintType, Object>();
        hints.put(EncodeHintType.CHARACTER_SET, charset);//设置二维码内容编码格式
        hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.M);//设置二维码容错级别(L、M、Q、H)

        //将内容编码为指定的二维矩阵图像
        MultiFormatWriter multiFormatWriter = new MultiFormatWriter();
        BitMatrix bitMatrix = multiFormatWriter.encode(content, BarcodeFormat.QR_CODE, width, height, hints);

        //使用MatrixToImageWriter类的静态方法将二维矩阵写入到输出流或指定路径path
        MatrixToImageWriter.writeToStream(bitMatrix, imageFormat, new FileOutputStream(new File(path)));
        //MatrixToImageWriter.writeToPath(bitMatrix, imageFormat, new File("").toPath());
    }

    /**
     * <h3>解析二维码内容</h3>
     * 
     * @param imagePath         待解析的二维码图片存放路径
     * @return
     * @throws Exception
     */
    public static String decodeQRCode(String imagePath) throws Exception
    {
        // 其实下面这四步顺着推是很难推出来的,反着推倒比较简答,不过完全没必要记住,知道大概就行了
        BufferedImage bufferedImage = ImageIO.read(new File(imagePath));
        LuminanceSource source = new BufferedImageLuminanceSource(bufferedImage);
        Binarizer binarizer = new HybridBinarizer(source);
        BinaryBitmap binaryBitmap = new BinaryBitmap(binarizer);

        //使用MultiFormatReader将二维码图片解析为内容对象
        MultiFormatReader multiFormatReader = new MultiFormatReader();
        Map<DecodeHintType, Object> hints = new HashMap<DecodeHintType, Object>();
        hints.put(DecodeHintType.CHARACTER_SET, "UTF-8");

        Result result = multiFormatReader.decode(binaryBitmap, hints);
        return result.getText();
    }

}

main code

/**
 * 
 * @author xuyi3
 * @2016年8月30日 @上午9:51:44
 * @Main
 * @功能说明:<br>
 * @春风十里不如你
 * @备注
 */
public class Main
{
    public static void main(String[] args) throws Exception
    {
        String content = "http://www.baidu.com";
        String path = "e:/test.png";
        //创建二维码
        QrCodeUtils.createQRCode(300, 300, content, "utf-8", path, "png");

        //解析二维码
        String string = QrCodeUtils.decodeQRCode(path);
        System.out.println(string);

    }
}

总结

借助于zxing生成和解析二维码还是比较简单的,有时间可以看看二维码的发展和其实现原理。
本质上就是一种编码和解码,只不过其有自己的规范。

参考

1、https://github.com/zxing/zxing

版权声明:本文为博主原创文章,未经博主允许不得转载。

二维码工具类QrCodeUtils

package com.chenb.test; import java.awt.image.BufferedImage; import java.io.File; import java.io.Fi...
  • chentiefeng521
  • chentiefeng521
  • 2017年06月19日 15:59
  • 467

微信公众号开发_QRCodeUtils的代码(七)

package com.igoxin.weixin.custom; import java.awt.Color; import java.awt.Graphics; import java.awt....
  • qq_24784495
  • qq_24784495
  • 2016年10月10日 18:31
  • 702

java生成二维码使用QRCode和ZXing两种方式

QRCode是日本人开发的ZXing是google开发的 QRCode方式: package cn.utils; import java.awt.Color; import java.awt.G...
  • xiaokui_wingfly
  • xiaokui_wingfly
  • 2014年09月22日 14:39
  • 17028

二维码工具类 - QrcodeUtils.java

二维码工具类,提供多种生成二维码、解析二维码的方法,包括中间logo的二维码等方法。   源码如下:(点击下载 - QrcodeUtils.java、MatrixToImageWriter...
  • u011300819
  • u011300819
  • 2017年05月24日 10:21
  • 482

利用ZXing生成二维码的工具类

import java.awt.Graphics2D; import java.awt.image.BufferedImage; import java.io.File; import j...
  • softwave
  • softwave
  • 2013年09月15日 23:07
  • 4934

QRCode(微信开发包)

  • 2014年11月14日 17:21
  • 1.05MB
  • 下载

基于Google的zxing生成和解析QR Code

基于Google的zxing生成和解析QR Code介绍二维码的技术在当今应用相当的的广泛,其中以QR Code应用最为广泛和流行。 在二维码发展之前还有一维码即条形码,相比条形码二维码存储容量更大,...
  • nicewuranran
  • nicewuranran
  • 2016年08月30日 09:55
  • 376

Zxing实现工作原理之QRCode

QRCode是被广泛应用的一种二维码,解码速度快。二维码相对于条形码来说,二维码的存储数据量更大,空间利用率高,有一定的容错性。 二维码原理介绍: 二维码是用某种特定的几何图形按一定的规律...
  • languobeibei
  • languobeibei
  • 2017年06月29日 14:23
  • 1094

用com.google.zxing生成QR code矩阵二维码

首先需要去下载一下google.zxing jar包
  • hzw2312
  • hzw2312
  • 2014年06月19日 14:02
  • 7115

QRCode二维码扫描和生成

使用zxing的第三方抽取包,简单的几行代码就可以完成。 首先,下载第三方抽取包libzxing 将其按一个model导入到我们建好的app中,添加model引用,添加权限。 注意:因为权限问题,我们...
  • xxkalychen
  • xxkalychen
  • 2016年12月25日 01:23
  • 1618
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:基于Google的zxing生成和解析QR Code
举报原因:
原因补充:

(最多只允许输入30个字)