思路
現階段遇到這樣一個問題,在原有的產品上加入線下優惠券模式,用戶領取優惠券以后,獲取到一個唯一的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=
注意:這里編碼后的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);
小結
學的東西要善於總結,這樣才容易記憶與回顧,簡單的一個生成二維碼的方式,希望幫到你們!