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 , 以及如何通過代碼將信息加密成二維碼等。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章