java實現(xiàn)二維碼生成功能詳細示例
1、由來:
由于現(xiàn)在對二維碼的使用比較多,正好我在項目里面也使用到了,所以寫篇博客記錄一下。
2、引入依賴:
<dependency> <groupId>com.google.zxing</groupId> <artifactId>core</artifactId> <version>3.3.3</version> </dependency>
3、生成二維碼
這里我是將我博客主頁的url生成二維碼,微信掃一掃可以看到我的博客主頁(歡迎騷擾)
QrCodeUtil.generate("https://blog.csdn.net/liulangzhezhang?spm=1000.2115.3001.5343", 300, 300, FileUtil.file("D:\\QRCode\\qrcode.jpg"));
4、帶參數(shù)的
4.1、設置參數(shù)
上面這個只是簡單的生成二維碼,接下來說說自定義參數(shù)的方式生成,如長、寬、二維碼的顏色、背景顏色、邊距等參數(shù),下面是代碼和效果圖:
QrConfig config = new QrConfig(300, 300); // 設置邊距,既二維碼和背景之間的邊距 config.setMargin(3); // 設置前景色,既二維碼顏色(青色) config.setForeColor(Color.CYAN.getRGB()); // 設置背景色(灰色) config.setBackColor(Color.GRAY.getRGB()); // 生成二維碼到文件,也可以到流 QrCodeUtil.generate("https://blog.csdn.net/liulangzhezhang?spm=1000.2115.3001.5343", config, FileUtil.file("D:/qrcode.jpg"));
4.2、附帶logo小圖標
QrCodeUtil.generate(// "https://blog.csdn.net/liulangzhezhang?spm=1000.2115.3001.5343", //二維碼內容 QrConfig.create().setImg("C:\\Users\\jlz\\Pictures\\Camera Roll\\zy.jpg"), //附帶logo FileUtil.file("D:\\excel\\QRCode\\qrcode.jpg")//寫出到的文件 );
4.3、調整糾錯級別
很多時候,二維碼無法識別,這時就要調整糾錯級別。糾錯級別使用zxing的ErrorCorrectionLevel枚舉封裝,包括:L、M、Q、H幾個參數(shù),由低到高。低級別的像素塊更大,可以遠距離識別,但是遮擋就會造成無法識別。高級別則相反,像素塊小,允許遮擋一定范圍,但是像素塊更密集。
QrConfig config = new QrConfig(); // 高糾錯級別 config.setErrorCorrection(ErrorCorrectionLevel.H); QrCodeUtil.generate("https://blog.csdn.net/liulangzhezhang?spm=1000.2115.3001.5343", config, FileUtil.file("D:\\excel\\QRCode\\qrcode1.jpg"));
5、識別二維碼
String decode = QrCodeUtil.decode(FileUtil.file("D:\\excel\\QRCode\\qrcode.jpg"));
6、實際可用
在項目中我還加了生成二維碼名稱,是根據(jù)日期和時間生成的唯一名稱,這就解決了名稱可能重復的問題,下面是完整代碼:
package com.yang.zhang.QrCode; import cn.hutool.core.date.DateUtil; import cn.hutool.core.io.FileUtil; import cn.hutool.extra.qrcode.QrCodeUtil; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import org.springframework.beans.factory.annotation.Value; import java.io.File; import java.util.Date; /** * 二維碼生成 * * @Author zhangzhongqing * @Date 2022/12/14 13:56 */ @RestController @RequestMapping("/qrCode") @Api(tags = "二維碼生成") public class QrCode { @Value("${file.local.filePath}") private String filePath; @PostMapping("/qrCode1") @ApiOperation(value="二維碼生成") public void QrCode() { //二維碼里面的信息 String message = "https://blog.csdn.net/liulangzhezhang?spm=1000.2115.3001.5343" ; // 生成二維碼 String picUrl = generateQRCode(message); System.out.println(picUrl); } // 生成二維碼并返回地址 message二維碼中內容,name文件名 private String generateQRCode(String message) { String newFilePath = getUploadFilePath(".jpg"); String localPath = filePath + "/" + "QRCode" + "/" + newFilePath; File newFile = new File(localPath); if (!newFile.getParentFile().exists()) { newFile.getParentFile().mkdirs(); } // 生成二維碼 QrCodeUtil.generate(message, 300, 300, FileUtil.file(localPath)); return "/files" + newFilePath; } // 生成文件的路徑和文件名 如 jpg/2022-05-20/14_50_39_1.jpg private String getUploadFilePath(String suffix) { Date nowDate = new Date(); String dateStr = DateUtil.formatDate(nowDate); String timeStr = DateUtil.format(nowDate, "HH_mm_ss"); String newFilePath ="/" + dateStr + "/" + timeStr + suffix; return newFilePath; } }
7、總結
這就是簡單的生成二維碼的方法,歡迎討論與指正?。?!
到此這篇關于java實現(xiàn)二維碼生成功能的文章就介紹到這了,更多相關java二維碼生成功能內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
基于SpringBoot+Avue實現(xiàn)短信通知功能
Avue是基于vue和element-ui的快速開發(fā)框架 ,它的核心是數(shù)據(jù)驅動UI的思想,讓我們從繁瑣的crud開發(fā)中解脫出來,本文將給大家介紹一下使用SpringBoot+Avue實現(xiàn)短信通知功能,文中有詳細的代碼示例,需要的朋友可以參考下2023-09-09java并發(fā)編程之深入理解Synchronized的使用
文詳細講述了線程、進程的關系及在操作系統(tǒng)中的表現(xiàn),這是多線程學習必須了解的基礎。本文將接著講一下Java線程同步中的一個重要的概念synchronized,希望能夠給你有所幫助2021-06-06攔截器獲取request的值之后,Controller拿不到值的解決
這篇文章主要介紹了攔截器獲取request的值之后,Controller拿不到值的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-10-10SpringBoot如何使用自定義注解實現(xiàn)接口限流
這篇文章主要介紹了SpringBoot如何使用自定義注解實現(xiàn)接口限流,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-06-06