Java 生成二维码代码解析

毫无疑问,第一点也是最重要的一点引入相关 jar 包的支持。
在这里插入图片描述
你可以在 mvn 仓库中进行下载。
我们先来看主函数:

    // 生成图片路径 src/img.png
        String imgPath = "src/qr.png";
        // 二维码内容: 文字信息 , 网址信息等。。
        String contenx = "Hello World";
        //生成二维码
        QRgenter qr = new QRgenter();
        qr.encoderQRcoed(contenx,imgPath,"png",7);

我们再来看自己定义的一个类: QRgenter及其里面的方法等

// 加密: 文字--》二维码   
    public void encoderQRcoed(String content , String imgPah , String imgType , int size) throws Exception
    {
        //内存中的一张图片;  内存--》硬盘
        BufferedImage bufImg = QRcodeCommon(content,imgType,size);
        File file = new File(imgPah);
        //API,生成图片
        ImageIO.write(bufImg,imgType,file);
    }

生成一个二维码必要条件: 指明二维码所代表的信息,二维码的图片类型,大小,存储路径。
这里的一个 BufferedImage 就相当于在内存中画的一张图片
在这里插入图片描述再来看生成 BufferedImage 的方法:QRcodeCommon

BufferedImage bufImg = null;

        int imgSize = 67 + 12*(size-1); // 放大尺寸

        bufImg = new BufferedImage(imgSize,imgSize,BufferedImage.TYPE_INT_RGB); // 确定基本颜色 rgb

       Graphics2D gp = bufImg.createGraphics();  //生成一个2d画板

        gp.setBackground(Color.white);     //设置背景色
        gp.clearRect(0,0,imgSize,imgSize); //初始化背景的大小范围,从左上角开
        gp.setColor(Color.BLACK);         //设置二维码颜色

二维码设置的最大尺寸为 40 但太小,又不能违反语法规则,只能进行放大。
接下来这一段代码的作用是, 将 String content 转化为bytes数组,在将字节数据转为二维的boolean数组,然后分布在画板上,当某个小方框内为true时,则被填充为黑色。

  // 将内容变成矩阵形式,boolean数组,有内容则方框为黑,无则白
        Qrcode qrcodeHandler =  new Qrcode();
        qrcodeHandler.setQrcodeErrorCorrect('M'); //设置二维码排错率 L:7%<M<Q<H:30% 排错率越高,可存储信息越少,二维码清晰度要求不高
        qrcodeHandler.setQrcodeEncodeMode('B');//可存放信息类型 : N:数字  A:数字+A-Z B:所有
        qrcodeHandler.setQrcodeVersion(size); //尺寸: 1-40
        byte[] contentBytes = contenx.getBytes(); // 将内容生成二维数组
        boolean[][]codeOut = qrcodeHandler.calQrcode(contentBytes); //在画板上标出范围的所有小方框 -->二维

        int pixof = 2; //偏移量
       for(int i = 0 ;i<codeOut.length;i++) {
           for (int j = 0; j < codeOut.length; j++) {

               if (codeOut[i][j])
                   gp.fillRect(i * 3 + pixof, j * 3 + pixof, 3, 3);  // 离左上角有点距离
           }
       }

重点代码解析:
在这里插入图片描述由于是 I/O 操作,我们得释放资源等。

  gp.dispose(); // 释放空间
          bufImg.flush();

        return bufImg;

这里的 flush 就是将管道中的数据强制冲进内存中。
到这里全部结束,接着就是运行主函数,生成对应的二维码啦~
结果参照:
在这里插入图片描述
不信的话,你可以检验一哈!
总结: 涉及到二维码的工具类 QRCode , 以及如何通过代码将信息加密成二维码等。

发布了51 篇原创文章 · 获赞 65 · 访问量 3246

猜你喜欢

转载自blog.csdn.net/weixin_44678969/article/details/103118439