java實(shí)現(xiàn)二維碼生成功能詳細(xì)示例
1、由來:
由于現(xiàn)在對(duì)二維碼的使用比較多,正好我在項(xiàng)目里面也使用到了,所以寫篇博客記錄一下。
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ù)
上面這個(gè)只是簡(jiǎn)單的生成二維碼,接下來說說自定義參數(shù)的方式生成,如長(zhǎng)、寬、二維碼的顏色、背景顏色、邊距等參數(shù),下面是代碼和效果圖:
QrConfig config = new QrConfig(300, 300);
// 設(shè)置邊距,既二維碼和背景之間的邊距
config.setMargin(3);
// 設(shè)置前景色,既二維碼顏色(青色)
config.setForeColor(Color.CYAN.getRGB());
// 設(shè)置背景色(灰色)
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小圖標(biāo)
QrCodeUtil.generate(//
"https://blog.csdn.net/liulangzhezhang?spm=1000.2115.3001.5343", //二維碼內(nèi)容
QrConfig.create().setImg("C:\\Users\\jlz\\Pictures\\Camera Roll\\zy.jpg"), //附帶logo
FileUtil.file("D:\\excel\\QRCode\\qrcode.jpg")//寫出到的文件
);4.3、調(diào)整糾錯(cuò)級(jí)別
很多時(shí)候,二維碼無法識(shí)別,這時(shí)就要調(diào)整糾錯(cuò)級(jí)別。糾錯(cuò)級(jí)別使用zxing的ErrorCorrectionLevel枚舉封裝,包括:L、M、Q、H幾個(gè)參數(shù),由低到高。低級(jí)別的像素塊更大,可以遠(yuǎn)距離識(shí)別,但是遮擋就會(huì)造成無法識(shí)別。高級(jí)別則相反,像素塊小,允許遮擋一定范圍,但是像素塊更密集。
QrConfig config = new QrConfig();
// 高糾錯(cuò)級(jí)別
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、識(shí)別二維碼
String decode = QrCodeUtil.decode(FileUtil.file("D:\\excel\\QRCode\\qrcode.jpg"));6、實(shí)際可用
在項(xiàng)目中我還加了生成二維碼名稱,是根據(jù)日期和時(shí)間生成的唯一名稱,這就解決了名稱可能重復(fù)的問題,下面是完整代碼:
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二維碼中內(nèi)容,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、總結(jié)
這就是簡(jiǎn)單的生成二維碼的方法,歡迎討論與指正?。。?/p>
到此這篇關(guān)于java實(shí)現(xiàn)二維碼生成功能的文章就介紹到這了,更多相關(guān)java二維碼生成功能內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
基于SpringBoot+Avue實(shí)現(xiàn)短信通知功能
Avue是基于vue和element-ui的快速開發(fā)框架 ,它的核心是數(shù)據(jù)驅(qū)動(dòng)UI的思想,讓我們從繁瑣的crud開發(fā)中解脫出來,本文將給大家介紹一下使用SpringBoot+Avue實(shí)現(xiàn)短信通知功能,文中有詳細(xì)的代碼示例,需要的朋友可以參考下2023-09-09
java json 省市級(jí)聯(lián)實(shí)例代碼
這篇文章介紹了java json 省市級(jí)聯(lián)實(shí)例代碼,有需要的朋友可以參考一下2013-09-09
java并發(fā)編程之深入理解Synchronized的使用
文詳細(xì)講述了線程、進(jìn)程的關(guān)系及在操作系統(tǒng)中的表現(xiàn),這是多線程學(xué)習(xí)必須了解的基礎(chǔ)。本文將接著講一下Java線程同步中的一個(gè)重要的概念synchronized,希望能夠給你有所幫助2021-06-06
攔截器獲取request的值之后,Controller拿不到值的解決
這篇文章主要介紹了攔截器獲取request的值之后,Controller拿不到值的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-10-10
SpringBoot如何使用自定義注解實(shí)現(xiàn)接口限流
這篇文章主要介紹了SpringBoot如何使用自定義注解實(shí)現(xiàn)接口限流,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-06-06
關(guān)于SpringBoot的自動(dòng)裝配原理詳解
這篇文章主要介紹了關(guān)于SpringBoot的自動(dòng)裝配原理詳解,Spring?Boot自動(dòng)裝配原理是指Spring?Boot在啟動(dòng)時(shí)自動(dòng)掃描項(xiàng)目中的依賴關(guān)系,根據(jù)依賴關(guān)系自動(dòng)配置相應(yīng)的Bean,從而簡(jiǎn)化了Spring應(yīng)用的配置過程,需要的朋友可以參考下2023-07-07

