最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

java實(shí)現(xiàn)二維碼生成功能詳細(xì)示例

 更新時(shí)間:2023年07月25日 11:28:57   作者:流浪者13號(hào)  
這篇文章主要給大家介紹了關(guān)于java實(shí)現(xiàn)二維碼生成功能的相關(guān)資料,隨著信息化時(shí)代的到來(lái),二維碼作為一種信息傳遞的工具,越來(lái)越受到人們的歡迎,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下

1、由來(lái):

由于現(xiàn)在對(duì)二維碼的使用比較多,正好我在項(xiàng)目里面也使用到了,所以寫篇博客記錄一下。

2、引入依賴:

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

3、生成二維碼

這里我是將我博客主頁(yè)的url生成二維碼,微信掃一掃可以看到我的博客主頁(yè)(歡迎騷擾)

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)單的生成二維碼,接下來(lái)說(shuō)說(shuō)自定義參數(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í)候,二維碼無(wú)法識(shí)別,這時(shí)就要調(diào)整糾錯(cuò)級(jí)別。糾錯(cuò)級(jí)別使用zxing的ErrorCorrectionLevel枚舉封裝,包括:L、M、Q、H幾個(gè)參數(shù),由低到高。低級(jí)別的像素塊更大,可以遠(yuǎn)距離識(shí)別,但是遮擋就會(huì)造成無(wú)法識(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ù)的問(wèn)題,下面是完整代碼:

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)單的生成二維碼的方法,歡迎討論與指正!??!

到此這篇關(guān)于java實(shí)現(xiàn)二維碼生成功能的文章就介紹到這了,更多相關(guān)java二維碼生成功能內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Hibernate緩存詳解

    Hibernate緩存詳解

    本文主要介紹了Hibernate緩存的相關(guān)知識(shí)。具有很好的參考價(jià)值,下面跟著小編一起來(lái)看下吧
    2017-02-02
  • springMvc請(qǐng)求的跳轉(zhuǎn)和傳值的方法

    springMvc請(qǐng)求的跳轉(zhuǎn)和傳值的方法

    本篇文章主要介紹了springMvc請(qǐng)求的跳轉(zhuǎn)和傳值的方法,這里整理了幾種跳轉(zhuǎn)方式,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。
    2017-02-02
  • 淺析Java中ConcurrentHashMap的存儲(chǔ)流程

    淺析Java中ConcurrentHashMap的存儲(chǔ)流程

    ConcurrentHashMap技術(shù)在互聯(lián)網(wǎng)技術(shù)使用如此廣泛,幾乎所有的后端技術(shù)面試官都要在ConcurrentHashMap技術(shù)的使用和原理方面對(duì)小伙伴們進(jìn)行360°的刁難,本文詳細(xì)給大家介紹一下ConcurrentHashMap的存儲(chǔ)流程,需要的朋友可以參考下
    2023-05-05
  • mybatis防止SQL注入的方法實(shí)例詳解

    mybatis防止SQL注入的方法實(shí)例詳解

    SQL注入是一種很簡(jiǎn)單的攻擊手段,但直到今天仍然十分常見。那么mybatis是如何防止SQL注入的呢?下面腳本之家小編給大家?guī)?lái)了實(shí)例代碼,需要的朋友參考下吧
    2018-04-04
  • 淺析Java中clone()方法淺克隆與深度克隆

    淺析Java中clone()方法淺克隆與深度克隆

    Java克隆(Clone)是Java語(yǔ)言的特性之一,本篇文章主要介紹了Java中的Clone機(jī)制是如何工作的,需要的朋友可以參考下
    2017-04-04
  • MyBatis中正則使用foreach拼接字符串

    MyBatis中正則使用foreach拼接字符串

    這篇文章主要介紹了MyBatis中正則使用foreach拼接字符串,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-01-01
  • Hadoop之常用端口號(hào)解讀

    Hadoop之常用端口號(hào)解讀

    這篇文章主要介紹了Hadoop之常用端口號(hào),具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • 詳解Java?redis中緩存穿透?緩存擊穿?雪崩三種現(xiàn)象以及解決方法

    詳解Java?redis中緩存穿透?緩存擊穿?雪崩三種現(xiàn)象以及解決方法

    緩存穿透是指緩存和數(shù)據(jù)庫(kù)中都沒(méi)有的數(shù)據(jù),而用戶不斷發(fā)起請(qǐng)求,如發(fā)起為id為“-1”的數(shù)據(jù)或id為特別大不存在的數(shù)據(jù)。這時(shí)的用戶很可能是攻擊者,攻擊會(huì)導(dǎo)致數(shù)據(jù)庫(kù)壓力過(guò)大
    2022-01-01
  • 使用Java實(shí)現(xiàn)MapReduce詞頻統(tǒng)計(jì)示例代碼

    使用Java實(shí)現(xiàn)MapReduce詞頻統(tǒng)計(jì)示例代碼

    這篇文章主要介紹了使用Java實(shí)現(xiàn)MapReduce詞頻統(tǒng)計(jì)的相關(guān)資料,通過(guò)詞頻統(tǒng)計(jì)示例來(lái)展示MapReduce的運(yùn)行機(jī)制,涵蓋了Mapper和Reducer的實(shí)現(xiàn),并說(shuō)明了如何配置和執(zhí)行MapReduce作業(yè),需要的朋友可以參考下
    2024-11-11
  • SpringMVC中的ResourceUrlProviderExposingInterceptor詳解

    SpringMVC中的ResourceUrlProviderExposingInterceptor詳解

    這篇文章主要介紹了SpringMVC中的ResourceUrlProviderExposingInterceptor詳解,ResourceUrlProviderExposingInterceptor是Spring MVC的一個(gè)HandlerInterceptor,用于向請(qǐng)求添加一個(gè)屬性,需要的朋友可以參考下
    2023-12-12

最新評(píng)論

班戈县| 清新县| 忻州市| 玉环县| 汕头市| 许昌县| 临泉县| 杭锦旗| 天气| 榆社县| 洛浦县| 天镇县| 丘北县| 中西区| 建始县| 榆中县| 阿瓦提县| 秦皇岛市| 贡觉县| 桐柏县| 航空| 临武县| 外汇| 炎陵县| 景宁| 烟台市| 玉门市| 南充市| 从化市| 西和县| 淮安市| 恩平市| 共和县| 满洲里市| 靖西县| 霍山县| 岳阳县| 岳普湖县| 浙江省| 夏邑县| 阳原县|