生成二维码(QRcode(for java version)生成二维码)

本文是我在慕课网学习之后的成果,感谢慕课网的老师。详细教程可参考 http://www.imooc.com/learn/531
关于二维码,先简单的介绍下(摘自百度百科):
在代码编制上巧妙地利用构成计算机内部逻辑基础的“0”、“1”比特流的概念,使用若干个与二进制相对应的几何形体来表示文字数值信息,通过图象输入设备或光电扫描设备自动识读以实现信息自动处理。在许多种类的二维条码中,常用的码制有:Data Matrix,MaxiCode, Aztec,QR Code, Vericode,PDF417,Ultracode,Code 49,Code 16K等,QR Code码是1994年由日本DW公司发明。QR来自英文「Quick Response」的缩写,即快速反应的意思,源自发明者希望QR码可让其内容快速被解码。QR码最常见于日本、韩国;并为目前日本最流行的二维空间条码。但二维码的安全性也正备受挑战,带有恶意软件和病毒正成为二维码普及道路上的绊脚石。

接下来我们要做的就是使用QRcodeAPI来完成我们的二维码生成程序:

1.首先我们要获取QRcode的Jar包:下载地址: http://www.swetake.com/qrcode/java/qr_java.html (点击tar.gz文件即可)
然后我们去lib文件下将QRcode.jar导入我们的项目。

2.开始我们的编码工作。(首先介绍下二维码是有纠错能力,其有四个等级:L M Q H,一般使用M等级,注意如果你想生成的二维码是个网页链接,必须加上 http:/,否则扫码出来的只是你的url,例如 www.baidu.com 生成的二维码,扫描出来的结果就是这个url字符串而不会跳转到百度首页)

package com.smart.controller;

import com.swetake.util.Qrcode;

import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.File;

public class Gennerator {

    /**
     * 使用QRcode生成二维码
     * @param args
     */
    public static void main(String[] args) throws Exception{
        Qrcode x = new Qrcode();
        x.setQrcodeErrorCorrect('M');//设置纠错等级
        x.setQrcodeEncodeMode('B');//设置编码格式
        x.setQrcodeVersion(7);//设置版本(版本有多种,感兴趣的可以去研究二维码的发展历程,这里我们选择第七版本)

        String qrData = "http://www.baidu.com";
        int width = 67 + 12*(7-1);//67+12*(版本号-1)
        int height = 67+ 12*(7-1);
        int pixoff = 2;//设置偏移量
        byte[] d = qrData.getBytes("gb2312");
        BufferedImage bufferedImage = new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB);

        Graphics2D gs =bufferedImage.createGraphics();//使用java的画图工具
        gs.setBackground(Color.white);
        gs.setColor(Color.black);//设置白底黑字
        gs.clearRect(0,0,width,height);

        if (d.length > 0 && d.length < 120) {
            boolean[][] s = x.calQrcode(d);

            for (int i = 0; i < s.length; i++) {
                for (int j = 0; j < s.length; j++) {
                    if (s[j][i]) {
                        gs.fillRect(j * 3+pixoff, i * 3+pixoff, 3, 3);//根据QRcode规则填充黑白点
                    }
                }
            }
        }
        gs.dispose();
        bufferedImage.flush();//释放资源

        ImageIO.write(bufferedImage,"png",new File("D:/qrcode.png"));//生成二维码,格式 png,文件地址 


    }

}


生成的二维码如下:

扫一下试试吧!

posted @ 2017-10-03 13:43  木子归零  阅读(2706)  评论(4编辑  收藏  举报