java实现二维码生成功能详细示例

 更新时间:2023年07月25日 11:28:57   作者:流浪者13号  
这篇文章主要给大家介绍了关于java实现二维码生成功能的相关资料,随着信息化时代的到来,二维码作为一种信息传递的工具,越来越受到人们的欢迎,文中通过代码介绍的非常详细,需要的朋友可以参考下

1、由来:

由于现在对二维码的使用比较多,正好我在项目里面也使用到了,所以写篇博客记录一下。

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、带参数的

4.1、设置参数

上面这个只是简单的生成二维码,接下来说说自定义参数的方式生成,如长、宽、二维码的颜色、背景颜色、边距等参数,下面是代码和效果图:

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几个参数,由低到高。低级别的像素块更大,可以远距离识别,但是遮挡就会造成无法识别。高级别则相反,像素块小,允许遮挡一定范围,但是像素块更密集。

    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、实际可用

在项目中我还加了生成二维码名称,是根据日期和时间生成的唯一名称,这就解决了名称可能重复的问题,下面是完整代码:

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实现二维码生成功能的文章就介绍到这了,更多相关java二维码生成功能内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Hibernate缓存详解

    Hibernate缓存详解

    本文主要介绍了Hibernate缓存的相关知识。具有很好的参考价值,下面跟着小编一起来看下吧
    2017-02-02
  • springMvc请求的跳转和传值的方法

    springMvc请求的跳转和传值的方法

    本篇文章主要介绍了springMvc请求的跳转和传值的方法,这里整理了几种跳转方式,具有一定的参考价值,感兴趣的小伙伴们可以参考一下。
    2017-02-02
  • 浅析Java中ConcurrentHashMap的存储流程

    浅析Java中ConcurrentHashMap的存储流程

    ConcurrentHashMap技术在互联网技术使用如此广泛,几乎所有的后端技术面试官都要在ConcurrentHashMap技术的使用和原理方面对小伙伴们进行360°的刁难,本文详细给大家介绍一下ConcurrentHashMap的存储流程,需要的朋友可以参考下
    2023-05-05
  • mybatis防止SQL注入的方法实例详解

    mybatis防止SQL注入的方法实例详解

    SQL注入是一种很简单的攻击手段,但直到今天仍然十分常见。那么mybatis是如何防止SQL注入的呢?下面脚本之家小编给大家带来了实例代码,需要的朋友参考下吧
    2018-04-04
  • 浅析Java中clone()方法浅克隆与深度克隆

    浅析Java中clone()方法浅克隆与深度克隆

    Java克隆(Clone)是Java语言的特性之一,本篇文章主要介绍了Java中的Clone机制是如何工作的,需要的朋友可以参考下
    2017-04-04
  • MyBatis中正则使用foreach拼接字符串

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

    这篇文章主要介绍了MyBatis中正则使用foreach拼接字符串,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-01-01
  • Hadoop之常用端口号解读

    Hadoop之常用端口号解读

    这篇文章主要介绍了Hadoop之常用端口号,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-11-11
  • 详解Java redis中缓存穿透 缓存击穿 雪崩三种现象以及解决方法

    详解Java redis中缓存穿透 缓存击穿 雪崩三种现象以及解决方法

    缓存穿透是指缓存和数据库中都没有的数据,而用户不断发起请求,如发起为id为“-1”的数据或id为特别大不存在的数据。这时的用户很可能是攻击者,攻击会导致数据库压力过大
    2022-01-01
  • 使用Java实现MapReduce词频统计示例代码

    使用Java实现MapReduce词频统计示例代码

    这篇文章主要介绍了使用Java实现MapReduce词频统计的相关资料,通过词频统计示例来展示MapReduce的运行机制,涵盖了Mapper和Reducer的实现,并说明了如何配置和执行MapReduce作业,需要的朋友可以参考下
    2024-11-11
  • SpringMVC中的ResourceUrlProviderExposingInterceptor详解

    SpringMVC中的ResourceUrlProviderExposingInterceptor详解

    这篇文章主要介绍了SpringMVC中的ResourceUrlProviderExposingInterceptor详解,ResourceUrlProviderExposingInterceptor是Spring MVC的一个HandlerInterceptor,用于向请求添加一个属性,需要的朋友可以参考下
    2023-12-12

最新评论