Java使用ZXing、QRCode及JQuery-qrcode生成二维码教程

简介

二维码在现实生活中无处不在,应用越来越广泛。那么大家想不想知道如何生成二维码,以及如何去解析二维码呢?本文将为大家介绍Java中三种二维码的实现方式,分为使用ZXing、QRCode以及jquery-qrcode。

本项目GitHub地址,如果您觉得不错,欢迎给个star:https://github.com/geekerstar/JavaQRCode

需要了解的小知识

二维码的分类:线性堆叠式二维码、矩阵式二维码、邮政码。

目前流行的三大国际标准
PDF417:不支持中文
DM:专利未公开,需支付专利费用
QR code:专利公开,支持中文

QR code比其他二维码相比,具有识读速度快,数据密度大,占用空间小的优势。
QR Code是有日本Demso公司于1994年研制的一种矩阵二维码符号码

纠错能力:

  • L级:约可纠错7%的数据码字
  • M级:约可纠错15%的数据码字
  • Q级:约可纠错25%的数据码字
  • H级:约可纠错30%的数据码字

纠错能力越高,存储的数据就越少

需要用到的Jar包

ZXing是个GitHub上的开源项目,地址 https://github.com/zxing/

首先我们将项目要用到的文件导成jar包,jar包已导好,点击下载

回复可见密码:
[hide]
密码:vt9w
[/hide]

使用ZXing生成二维码

在eclipse里创建一个java project,src下建一个包,创建文件CreateQRCode.java,然后导入下载的jar包,导入Zxing3.2.1.jar,编写如下代码:

package com.geekerstar.zxing;
import java.io.File;
import java.nio.file.Path;
import java.util.HashMap;
import com.google.zxing.BarcodeFormat;
import com.google.zxing.EncodeHintType;
import com.google.zxing.MultiFormatWriter;
import com.google.zxing.client.j2se.MatrixToImageWriter;
import com.google.zxing.common.BitMatrix;
import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel;
public class CreateQRCode {
    public static void main(String[] args) {
        int width=300;                                             //设置二维码的宽
        int height=300;                                            //设置二维码的长
        String format="png";                                    //设置二维码图片的格式
        String contents="www.geekerstar.com";            //设置的连接地址
        //二维码参数
        HashMap hints=new HashMap();
        hints.put(EncodeHintType.CHARACTER_SET,"utf-8");        //设置支持中文编码
        hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.M);        //纠错等级。
        hints.put(EncodeHintType.MARGIN, 2);                    //边框
        try{
            BitMatrix bitmatrix=new MultiFormatWriter().encode(contents, BarcodeFormat.QR_CODE, width, height);
            File files=new File("E:/zxing.png");                        //文件
            Path file=files.toPath();                                //文件路径
            MatrixToImageWriter.writeToPath(bitmatrix, format, file);
        }catch(Exception e){
            e.printStackTrace();
        }
    }
}

代码很简单,应该能看懂,运行后将在E盘根目录下生成一个QRCode.png的二维码图片,如下图所示:

二维码图

拿手机扫一下将访问设置的地址……

使用ZXing解析二维码

同样创建一个文件,命名为ReadQRCode.java,并编写如下代码:

package com.geekerstar.zxing;
import java.awt.image.BufferedImage;
import java.io.File;
import java.util.HashMap;
import javax.imageio.ImageIO;
import com.google.zxing.BinaryBitmap;
import com.google.zxing.EncodeHintType;
import com.google.zxing.MultiFormatReader;
import com.google.zxing.Result;
import com.google.zxing.client.j2se.BufferedImageLuminanceSource;
import com.google.zxing.common.HybridBinarizer;
import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel;
public class ReadQRCode {
    public static void main(String[] args) {
        try{
            MultiFormatReader formatReader =new MultiFormatReader();
            File file=new File("E:/zxing.png");
            BufferedImage image=ImageIO.read(file);
            BinaryBitmap binaryBitmap=new BinaryBitmap(new HybridBinarizer(new BufferedImageLuminanceSource(image)));
            HashMap hints=new HashMap();
            hints.put(EncodeHintType.CHARACTER_SET,"utf-8");        //设置支持中文编码
            hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.M);        //纠错等级。
            hints.put(EncodeHintType.MARGIN, 2);
            Result result=formatReader.decode(binaryBitmap,hints);
            System.out.println("解析结果"+result.toString());
            System.out.println("二维码格式"+result.getBarcodeFormat());
            System.out.println("二维码格式"+result.getText());
        }catch(Exception e){
            e.printStackTrace();
        }
    }
}

执行后就可以在控制台里看到输出结果

解析二维码

使用QRcode方式生成二维码

新建一个package,创建文件CreateQRCode.java,编写如下代码:

package com.geekerstar.qrcode;
import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.File;
import javax.imageio.ImageIO;
import com.swetake.util.Qrcode;
public class CreateQRCode {
        public static void main(String[] args) throws Exception {
            Qrcode x=new Qrcode();
            x.setQrcodeErrorCorrect('M');//纠错等级
            x.setQrcodeEncodeMode('B'); //N代表数字;A代表a—Z;B代表其他字符
            x.setQrcodeVersion(7);        //版本号(1-40)
            String qrData="www.geekerstar.com";
            int width= 67 + 12 * (7-1);
            int height= 67 + 12 * (7-1);
            //依托javaGUI的画图工具实现的
            BufferedImage bufferedImage=new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB);
            Graphics2D gs=bufferedImage.createGraphics();
            gs.setBackground(Color.WHITE);
            gs.setColor(Color.BLACK);
            gs.clearRect(0, 0, width, height);
            int pixoff=2;//偏移量
            byte[] d=qrData.getBytes("gb2312");
            if(d.length>0 && d.length 除了有特殊标注文章外欢迎转载,但请务必标明出处,格式如上,谢谢合作。
> 本作品采用 [知识共享署名-非商业性使用-相同方式共享 3.0 中国大陆许可协议](https://creativecommons.org/licenses/by-nc-sa/3.0/cn/) 进行许可。
本站所有资源均由网友共享,仅用于参考学习用,请勿直接商用,如有侵权,请联系网站客服删除相关资源。若由于商用引起版权纠纷,一切责任均由使用者承担。
Geekerstar » Java使用ZXing、QRCode及JQuery-qrcode生成二维码教程

17 评论

  1. 不错OωO

  2. hello

  3. hello,good sourse

  4. hey

    1. .

  5. hey

  6. 看完了

  7. 666

  8. 感谢

  9. HEY

    1. 感谢

  10. 感谢

    1. 66

    2. 66

  11. 请问下,我为什么我的jar包复制剪贴不进去

  12. 百度网盘密码

发表评论