Java 生成在線二維碼 以Base64返回前端、或者寫入到本地磁盤


思路


現階段遇到這樣一個問題,在原有的產品上加入線下優惠券模式,用戶領取優惠券以后,獲取到一個唯一的ID作為領取憑證,但是在線下用掃碼槍進行掃碼的時候,總不能讓人手動輸入吧

於是乎就想出了一個辦法,后端提供一個接口,前端請求發起后,將需要加入的字符生成出二維碼,然后用Base64進行編碼后返回,前台直接展示即可

 

本地寫入二維碼就采用字節流的方式,將二維碼直接寫入到磁盤即可。

Maven依賴


 

        <dependency>
            <groupId>com.google.zxing</groupId>
            <artifactId>core</artifactId>
            <version>3.3.0</version>
        </dependency>
        <dependency>
            <groupId>com.google.zxing</groupId>
            <artifactId>javase</artifactId>
            <version>3.3.0</version>
        </dependency>

這里依賴的jar包主要是Google 的zxing 進行二維碼的生成

代碼


 

        QRCodeWriter qrCodeWriter = new QRCodeWriter();
        BitMatrix bitMatrix = qrCodeWriter.encode("622921", BarcodeFormat.QR_CODE, 600, 600);

        ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
        MatrixToImageWriter.writeToStream(bitMatrix, "PNG", outputStream);

        Base64.Encoder encoder = Base64.getEncoder();

        String text = encoder.encodeToString(outputStream.toByteArray());

        System.out.println(text);

說明:需要在二維碼里面展現的內容就是字符串622921

參數600*600 表示的就是生成后二維碼的寬高,單位px 像素

這里我們使用的是Java自帶Base64工具類進行生成的base64編碼

生成后的base64如下所示

iVBORw0KGgoAAAANSUhEUgAAAlgAAAJYAQAAAACWHaVxAAABkUlEQVR42u3czYrDIBQGUKEP5qv7YAWHtszUX8i0WWg4LgI2erZy+90Y8nkjsFgsFovFYrFYLBaLxWKxWCwWi8VisVgnWCk04/b49R5CfDye0/ESFovFYm1mlW9e0+fm+AInS1gsFou1o5X+zoTSer/tl7BYLBbrAta7VojzJSwWi8Xa3nqvPuMcYrFYLNYyVkf/HiCDzSwWi8Xa1OqD3dQ+vsiRWSwWi7WGNRppsu+TPlEWi8VirWF1fT2hbOss6SoUZrFYLNZmVpnz3scdnWmgslgsFms7K9d//oeuwyf+q+5gsVgs1qJWUyb09UN3xrBYLBZrRyuPP9bK9bTp/2GxWCzWjtaodCjLhCYaYLFYLNZ+1ri3s2JiexUbi8VisXa0buNUIBbRQBUSzLMAFovFYi1uje7iCXU0EOp1LBaLxbqANc1+A4vFYrGuZI2u4UmHsgAWi8ViLW0diH3Toe9+WSwWi7WuNbl7Lc8uaMgsFovF2tD6drBYLBaLxWKxWCwWi8VisVgsFovFYrFYn44fIpoMJJGu/X0AAAAASUVORK5CYII=
View Code

注意:這里編碼后的base64字符串沒有帶有前端img標簽解析時候的格式字符,需要在字符串前拼接:data:image/png;base64,

方可正常顯示!!

 

檢驗


在線驗證:http://imgbase64.duoshitong.com/

效果:微信掃碼后結果就是:622921

本地生成方案


 

只需要修改部分關鍵代碼即可實現,通過字節流的方式進行寫入到磁盤,這里使用字節流直接操作的是文件對象,可以不用關閉流。

        File file = new File("H:/test/456.png");

        if (!file.exists()) {
            file.createNewFile();
        }
        FileOutputStream outputStream = new FileOutputStream(file);

        MatrixToImageWriter.writeToStream(bitMatrix, "PNG", outputStream);

 

小結


 

學的東西要善於總結,這樣才容易記憶與回顧,簡單的一個生成二維碼的方式,希望幫到你們!

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM