java实现二维码生成功能

2023-10-27

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、总结

这就是简单的生成二维码的方法,欢迎讨论与指正!!!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

java实现二维码生成功能 的相关文章

随机推荐

  • py将图片生成pdf

    usr local bin python3 coding utf 8 from PIL import Image import os def combine2Pdf folderPath pdfFilePath files os listd
  • 删除字符串中指定字符

    include
  • DP转HDMI后显示器无信号

    板DP接口是老式接口需要主动式DP转HDMI的转换器或者线 主板DP接口是老式接口需要主动式DP转HDMI的转换器或者线才行 新的DP 接口就没有这个问题 主动式DP转HDMI线就OK了
  • MabtisPlus书写模糊查询(Mysql)

    CONCAT关键字 拼接字符串 例 Select SELECT FROM classify WHERE itemName like CONCAT itemName public List
  • 统计难题

    链接 http acm hdu edu cn showproblem php pid 1251 Problem Description Ignatius最近遇到一个难题 老师交给他很多单词 只有小写字母组成 不会有重复的单词出现 现在老师要
  • 网络编程架构简介

    软件开发架构 什么是软件开发架构 实际编写项目时 不会把所有代码都写在同一个项目文件中 在编写项目前 一般要先按照不同的功能分开写代码 像这样按照不同功能将代码写在不同的区域就是软件开发架构 软件开发架构分类 1 c s架构 c clien
  • 新人毕业,老人跳槽:5位同学简历中的问题

    新人毕业 老人跳槽 2位同学简历中的15个问题 又是凤凰花开 新人毕业 老人跳槽的季节了 最近 有2位同学有跳槽的意向 趁着晚上和周末 写写简历 这2位同学 很看得起我 让我帮忙看看简历 我反复看了简历 发现了不少问题 下面主要列出一些 排
  • AIGC数据库工具-阿里开源Chat2DB

    前言 今天无意间发现了一个AIGC数据库工具 chat2DB 重点 阿里开源 其设计产品的思想给了我很多灵感 故记录一下 并分享给大家 概述 Chat2DB 是一款有开源免费的多数据库客户端工具 支持windows mac本地安装 也支持服
  • Linux设置开机启动和定时任务crontab

    一般来说Ubunt会默认安装crontab工具 特别注意 环境变量crontab读取不到的 一定在里面不要有环境变量 入口 入口2 入口3 如果你需要输入密码可以在脚本中这样写 bin bash echo home pwd pwd sudo
  • AS/400上的FTP

    3 1 1 1 AS 400上的FTP FTP是如何工作的 FTP是基于客户 服务器模型而设计的 客户和服务器之间利用TCP直接连接 与其它客户 服务器模型不同的是 FTP客户与服务器之间是要建立双重连接 一个是控制连接 一个是数据连接 建
  • DS证据理论用法

    一 基本概念 全名 DS 证据理论 Dempster Shafer envidence theory 也称为DS理论 是一种处理不确定性问题的完整理论 主要作用 Dempster合成规则 将多个主体 可以是不同的人的预测 不同的传感器的数据
  • DATAX快速上手非常详细

    前言 博主在工作的过程中有一天公司决定将数据迁移的新的项目上去 当我发现数据库中的表大于有4000多张表的时我顿时懵了下 这数据迁移人力物力消耗的也太大了吧 看DataX的设计 所以我们可以借助阿里云开源的DataX来解决这个问题 看完这篇
  • 基于客户端与服务器的管理系统,基于客户端和服务器的点菜系统.doc

    基于客户端和服务器的点菜系统 基于客户端和服务器的点菜系统 引论 网络技术的不断发展 传统的点菜方式发生越来越多的变化 通过现代化的信息技术 构建高效的 共享的信息化平台 建立以服务台为管理中枢的一体化管理网络 实现对餐饮行业进行系统而全方
  • 图解GPT-2

    这是我翻译这位大佬的第二篇文章了 翻译授权见最后 其他工作 图解transformer The Illustrated Transformer 图解BERT ELMo NLP中的迁移学习 The Illustrated BERT ELMo
  • Docker 运行时资源限制

    Docker 运行时资源限制 Docker 基于 Linux 内核提供的 cgroups 功能 可以限制容器在运行时使用到的资源 比如内存 CPU 块 I O 网络等 内存限制 概述 Docker 提供的内存限制功能有以下几点 容器能使用的
  • 2.4.4 Profile基本参数

    最后更新2021 07 18 通过HMC GUI界面选择一个分区 然后选择ConfigurationManage Profiles或者用鼠标点击分区名右侧箭头进入分区菜单选项 也可进入Profile管理页面 图 234 分区Profile管
  • 工资计算(C++)

    问题描述 有一个工厂有三类人 固定工资工人A 计件工人B 计时工人C 构建基类 工厂员工Worker类 包括三个成员数据 名字name 字符串string 住址address 字符串string 工资salary long int 包括成员
  • 即时通讯源码/im源码uniapp基于在线聊天系统附完整搭建部署教程

    即时通讯im源码 Instant Messaging System 是个基于uniapp项目 我们在其中使用了许多uniapp服务 这个纡AWS云的项目 我们为想要学习uniapp和云计算的学生开发 我们将提供部署说明以及uniapp即时消
  • Flutter状态管理之Provider的使用

    当App的复杂性发展到一定程度 经常会出现一个页面中不同深度的子Widget需要共享访问同一个数据状态 甚至不同页面要共享同一个状态 这时我们就会想到InheritedWidget InheritedWidget是 Flutter 中非常重
  • java实现二维码生成功能

    1 由来 由于现在对二维码的使用比较多 正好我在项目里面也使用到了 所以写篇博客记录一下 2 引入依赖