程序员scholar 程序员scholar
首页
  • Java 基础

    • JavaSE
    • JavaIO
    • JavaAPI速查
  • Java 高级

    • JUC
    • JVM
    • Java新特性
    • 设计模式
  • Web 开发

    • Servlet
    • Java网络编程
  • Web 标准

    • HTML
    • CSS
    • JavaScript
  • 前端框架

    • Vue2
    • Vue3
    • Vue3 + TS
    • 微信小程序
    • uni-app
  • 工具与库

    • jQuery
    • Ajax
    • Axios
    • Webpack
    • Vuex
    • WebSocket
    • 第三方登录
  • 后端与语言扩展

    • ES6
    • Typescript
    • node.js
  • Element-UI
  • Apache ECharts
  • 数据结构
  • HTTP协议
  • HTTPS协议
  • 计算机网络
  • Linux常用命令
  • Windows常用命令
  • SQL数据库

    • MySQL
    • MySQL速查
  • NoSQL数据库

    • Redis
    • ElasticSearch
  • 数据库

    • MyBatis
    • MyBatis-Plus
  • 消息中间件

    • RabbitMQ
  • 服务器

    • Nginx
  • Spring框架

    • Spring6
    • SpringMVC
    • SpringBoot
    • SpringSecurity
  • SpringCould微服务

    • SpringCloud基础
    • 微服务之DDD架构思想
  • 日常必备

    • 开发常用工具包
    • Hutoll工具包
    • IDEA常用配置
    • 开发笔记
    • 日常记录
    • 项目部署
    • 网站导航
    • 产品学习
    • 英语学习
  • 代码管理

    • Maven
    • Git教程
    • Git小乌龟教程
  • 运维工具

    • Docker
    • Jenkins
    • Kubernetes
  • 算法笔记

    • 算法思想
    • 刷题笔记
  • 面试问题常见

    • 十大经典排序算法
    • 面试常见问题集锦
关于
GitHub (opens new window)
首页
  • Java 基础

    • JavaSE
    • JavaIO
    • JavaAPI速查
  • Java 高级

    • JUC
    • JVM
    • Java新特性
    • 设计模式
  • Web 开发

    • Servlet
    • Java网络编程
  • Web 标准

    • HTML
    • CSS
    • JavaScript
  • 前端框架

    • Vue2
    • Vue3
    • Vue3 + TS
    • 微信小程序
    • uni-app
  • 工具与库

    • jQuery
    • Ajax
    • Axios
    • Webpack
    • Vuex
    • WebSocket
    • 第三方登录
  • 后端与语言扩展

    • ES6
    • Typescript
    • node.js
  • Element-UI
  • Apache ECharts
  • 数据结构
  • HTTP协议
  • HTTPS协议
  • 计算机网络
  • Linux常用命令
  • Windows常用命令
  • SQL数据库

    • MySQL
    • MySQL速查
  • NoSQL数据库

    • Redis
    • ElasticSearch
  • 数据库

    • MyBatis
    • MyBatis-Plus
  • 消息中间件

    • RabbitMQ
  • 服务器

    • Nginx
  • Spring框架

    • Spring6
    • SpringMVC
    • SpringBoot
    • SpringSecurity
  • SpringCould微服务

    • SpringCloud基础
    • 微服务之DDD架构思想
  • 日常必备

    • 开发常用工具包
    • Hutoll工具包
    • IDEA常用配置
    • 开发笔记
    • 日常记录
    • 项目部署
    • 网站导航
    • 产品学习
    • 英语学习
  • 代码管理

    • Maven
    • Git教程
    • Git小乌龟教程
  • 运维工具

    • Docker
    • Jenkins
    • Kubernetes
  • 算法笔记

    • 算法思想
    • 刷题笔记
  • 面试问题常见

    • 十大经典排序算法
    • 面试常见问题集锦
关于
GitHub (opens new window)
npm

(进入注册为作者充电)

  • 快速入门

  • 克隆

  • 类型转换

  • 日期时间

  • IO流相关

  • 工具类

  • 语言特性

  • JavaBean

  • 集合类

  • Map

  • Codec编码

  • 文本操作

  • 注解

  • 比较器

  • 异常

  • 数学

  • 线程和并发

  • 图片

  • 网络

  • 源码编译

  • 配置文件

  • 日志

  • 缓存

  • JSON

  • 加密解密

  • DFA查找

  • HTTP客户端

  • 定时任务

  • 扩展

    • Servlet 工具类 - `ServletUtil`
    • 二维码工具 - `QrCodeUtil`
      • 依赖引入
      • 1. 生成二维码
      • 2. 自定义参数生成二维码
      • 3. 生成带 Logo 的二维码
      • 4. 识别二维码
      • 5. 生成 SVG 矢量图二维码(since 5.8.6)
      • 6. 生成 ASCII Art 字符画二维码(since 5.8.6)
    • 邮件工具 - `MailUtil`
    • Cglib 工具 - `CglibUtil`
    • Emoji 工具 - `EmojiUtil`
    • FTP 客户端封装 - `Ftp`
    • 简易FTP服务器 - `SimpleFtpServer`
    • SFTP封装 - `Sftp`
    • Jsch工具 - `JschUtil`
    • Spring工具 - `SpringUtil`
    • 中文分词封装 - `TokenizerUtil`
    • 160压缩封装 - `CompressUtil`
    • 拼音工具 - `PinyinUtil`
    • 表达式引擎封装 - `ExpressionUtil`
    • 模板引擎封装 - `TemplateUtil`
  • 切面

  • 脚本

  • Office文档操作

  • 系统调用

  • 图形验证码

  • 网络Socket

  • JWT

  • Hutoll
  • 扩展
scholar
2024-08-20
目录

二维码工具 - QrCodeUtil

# 二维码工具 - QrCodeUtil

简介

QrCodeUtil 是 Hutool 提供的一个方便生成和解析二维码的工具类。它基于 zxing (opens new window) 库进行封装,支持生成二维码、解析二维码、生成带 Logo 的二维码等功能。考虑到 Hutool 的非强制依赖性,zxing 需要用户自行引入。

# 依赖引入

在 Maven 项目中使用 QrCodeUtil 工具类,需要添加以下依赖:

<dependency>
    <groupId>com.google.zxing</groupId>
    <artifactId>core</artifactId>
    <version>${zxing.version}</version>
</dependency>
1
2
3
4
5

提示:zxing-3.5.1 是此文档编写时的最新版本,建议引入与此版本一致或更新的版本。


# 1. 生成二维码

示例:生成一个普通的二维码

以下代码展示了如何生成一个指定 URL 对应的二维码,并保存为图片文件:

import cn.hutool.extra.qrcode.QrCodeUtil;
import cn.hutool.core.io.FileUtil;

public class QrCodeExample {
    public static void main(String[] args) {
        // 生成二维码到指定文件,宽和高都是300像素
        QrCodeUtil.generate("https://hutool.cn/", 300, 300, FileUtil.file("d:/qrcode.jpg"));
    }
}
1
2
3
4
5
6
7
8
9

效果图:

qrcode.jpg

  • QrCodeUtil.generate(String content, int width, int height, File file):生成一个二维码并保存为图片。

    • content:二维码的内容,可以是 URL、文本等。
    • width 和 height:二维码的宽度和高度。
    • file:保存二维码图片的文件路径。

    作用: 用于生成二维码,并将其保存为图片文件,适用于各种场景,如在网站上展示二维码、生成可供下载的二维码等。

    实际开发场景: 生成网站、商品、个人名片等二维码。


# 2. 自定义参数生成二维码

示例:设置二维码的边距、颜色和背景色

通过 QrConfig 可以自定义二维码的生成参数,例如边距、前景色、背景色等:

import cn.hutool.extra.qrcode.QrCodeUtil;
import cn.hutool.extra.qrcode.QrConfig;
import cn.hutool.core.io.FileUtil;

import java.awt.Color;

public class QrCodeExample {
    public static void main(String[] args) {
        // 配置二维码参数
        QrConfig config = new QrConfig(300, 300);
        config.setMargin(3); // 设置边距
        config.setForeColor(Color.CYAN.getRGB()); // 设置前景色
        config.setBackColor(Color.GRAY.getRGB()); // 设置背景色

        // 生成二维码并保存到文件
        QrCodeUtil.generate("http://hutool.cn/", config, FileUtil.file("d:/qrcode_custom.jpg"));
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

效果图:

qrcodeCustom.jpg

  • QrConfig(int width, int height):用于设置二维码的宽度和高度。

  • setMargin(int margin):设置二维码的边距。

  • setForeColor(int color):设置二维码的前景色。

  • setBackColor(int color):设置二维码的背景色。

    作用: 用于根据需求自定义二维码的外观,如调整二维码颜色、增加边距等。

    实际开发场景: 生成与品牌颜色匹配的二维码,增加视觉识别度。


# 3. 生成带 Logo 的二维码

示例:生成一个带 Logo 的二维码

import cn.hutool.extra.qrcode.QrCodeUtil;
import cn.hutool.extra.qrcode.QrConfig;
import cn.hutool.core.io.FileUtil;

public class QrCodeExample {
    public static void main(String[] args) {
        // 生成二维码并附带Logo
        QrCodeUtil.generate(
            "http://hutool.cn/",
            QrConfig.create().setImg("d:/logo_small.jpg"), // 设置Logo
            FileUtil.file("d:/qrcodeWithLogo.jpg") // 保存二维码
        );
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14

效果图:

qrcodeWithLogo.jpg

  • setImg(String imgPath):用于设置二维码中心的 Logo。

    作用: 在二维码中嵌入 Logo,提升二维码的品牌识别度。

    实际开发场景: 在品牌推广、名片设计中,嵌入品牌 Logo 的二维码常用于提高用户识别率。


# 4. 识别二维码

示例:解析一个二维码图片的内容

import cn.hutool.extra.qrcode.QrCodeUtil;
import cn.hutool.core.io.FileUtil;

public class QrCodeExample {
    public static void main(String[] args) {
        // 解析二维码内容
        String decode = QrCodeUtil.decode(FileUtil.file("d:/qrcode.jpg"));
        System.out.println("二维码内容: " + decode); // 输出: https://hutool.cn/
    }
}
1
2
3
4
5
6
7
8
9
10
  • QrCodeUtil.decode(File file):用于解析二维码图片中的内容。

    • file:二维码图片文件。
    • 返回值:二维码中的内容。

    作用: 从二维码图片中提取信息,适用于扫描二维码、批量解析二维码等场景。

    实际开发场景: 在用户上传二维码图片后,自动解析其中的信息,如提取网址、识别名片内容等。


# 5. 生成 SVG 矢量图二维码(since 5.8.6)

示例:生成 SVG 矢量图格式的二维码

import cn.hutool.extra.qrcode.QrCodeUtil;
import cn.hutool.extra.qrcode.QrConfig;
import java.awt.Color;

public class QrCodeExample {
    public static void main(String[] args) {
        QrConfig qrConfig = QrConfig.create()
            .setImg("d:/test/logo.png") // 设置 Logo
            .setForeColor(Color.BLUE.getRGB()) // 设置前景色
            .setBackColor(Color.PINK.getRGB()) // 设置背景色
            .setErrorCorrection(ErrorCorrectionLevel.M) // 设置纠错级别
            .setMargin(1); // 设置边距

        String svg = QrCodeUtil.generateAsSvg("https://hutool.cn/", qrConfig);
        System.out.println(svg);
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

效果图:

hutool_qr.png

  • generateAsSvg(String content, QrConfig config):生成 SVG 格式的二维码。

    • content:二维码的内容。
    • config:二维码配置,如边距、颜色等。

    作用: 用于生成矢量化的二维码,适用于需要高分辨率、可缩放的场景。

    实际开发场景: 在打印、品牌设计等需要高精度图形的场景中,SVG 格式的二维码非常实用。


# 6. 生成 ASCII Art 字符画二维码(since 5.8.6)

示例:生成 ASCII Art 字符画格式的二维码

import cn.hutool.extra.qrcode.QrCodeUtil;
import cn.hutool.extra.qrcode.QrConfig;
import java.awt.Color;

public class QrCodeExample {
    public static void main(String[] args) {
        QrConfig qrConfig = QrConfig.create()
            .setForeColor(Color.BLUE.getRGB()) // 设置前景色
            .setBackColor(Color.MAGENTA.getRGB()) // 设置背景色
            .setMargin(1); // 设置边距

        String asciiArt = QrCodeUtil.generateAsAsciiArt("https://hutool.cn/", qrConfig);
        System.out.println(asciiArt);
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

生成的二维码字符画:

[38;5;21;48;5;201m█▀▀▀▀▀▀▀█▀█▀█▀█▀█▀█▀▀▀▀▀▀▀█[0;39m
[38;5;21;48;5;201m█ █▀▀▀█ █▀▄▀▄ ▄▀ ▀█ █▀▀▀█ █[0;39m
[38;5;21;48;5;201m█ █   █ █▀█▄█▄▄▀▄ █ █   █ █[0;39m
...
1
2
3
4

打印效果图:

asscii_art_qr.png

  • generateAsAsciiArt(String content, QrConfig config):生成 ASCII Art 格式的二维码。

  • content:二维码的内容。

  • config:二维码配置,如边距、颜色等。

作用: 将二维码以字符画形式呈现,适用于在命令行、控制台等文本环境下展示二维码。

实际开发场景: 在命令行工具、文本展示环境中输出二维码,特别适合嵌入 CLI 工具或文本输出中。


这样总结后,每个功能点都进行了详细说明,代码块中包含了详细注释,同时提供了实际开发中的应用场景和完整代码示例。如果你有其他功能需要,我会继续为你提供帮助!

编辑此页 (opens new window)
上次更新: 2024/12/28, 18:32:08
Servlet 工具类 - `ServletUtil`
邮件工具 - `MailUtil`

← Servlet 工具类 - `ServletUtil` 邮件工具 - `MailUtil`→

Theme by Vdoing | Copyright © 2019-2025 程序员scholar
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式