java:一键生成二维码工具类

news/2025/3/17 22:45:36/文章来源:https://www.cnblogs.com/kun1790051360/p/18342140

前言:本工具选择了Zxing,他是一个开源的,使用java实现多种格式的1D/2D条码图像处理库,

1.pom添加依赖

  <!-- 二维码生成&识别组件 --><dependency><groupId>com.google.zxing</groupId><artifactId>core</artifactId><version>3.3.3</version></dependency><dependency><groupId>com.google.zxing</groupId><artifactId>javase</artifactId><version>3.3.3</version></dependency><dependency><groupId>org.apache.commons</groupId><artifactId>commons-lang3</artifactId></dependency>

2.二维码生成工具类

import com.google.zxing.BarcodeFormat;
import com.google.zxing.EncodeHintType;
import com.google.zxing.client.j2se.MatrixToImageWriter;
import com.google.zxing.common.BitMatrix;
import com.google.zxing.qrcode.QRCodeWriter;
import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel;
import org.apache.commons.lang3.StringUtils;import javax.imageio.ImageIO;
import javax.servlet.ServletOutputStream;
import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.util.HashMap;
public class QRCodeUtil {/*** 生成二维码** @param content 二维码对应的URL* @param width   二维码图片宽度* @param height  二维码图片高度* @return*/public String createQRCode(String content, int width, int height) throws IOException {String resultImage = "";//除了尺寸,传入内容不能为空if (!StringUtils.isEmpty(content)) {ServletOutputStream stream = null;ByteArrayOutputStream os = new ByteArrayOutputStream();//二维码参数@SuppressWarnings("rawtypes")HashMap<EncodeHintType, Comparable> hints = new HashMap<>();//指定字符编码为“utf-8”hints.put(EncodeHintType.CHARACTER_SET, "utf-8");//L M Q H四个纠错等级从低到高,指定二维码的纠错等级为M//纠错级别越高,可以修正的错误就越多,需要的纠错码的数量也变多,相应的二维吗可储存的数据就会减少
            hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.M);//设置图片的边距hints.put(EncodeHintType.MARGIN, 1);try {//zxing生成二维码核心类QRCodeWriter writer = new QRCodeWriter();//把输入文本按照指定规则转成二维吗BitMatrix bitMatrix = writer.encode(content, BarcodeFormat.QR_CODE, width, height, hints);//生成二维码图片流BufferedImage bufferedImage = MatrixToImageWriter.toBufferedImage(bitMatrix);//输出流ImageIO.write(bufferedImage, "png", os);/*** 原生转码前面没有 data:image/png;base64 这些字段,返回给前端是无法被解析,所以加上前缀*/resultImage = new String("data:image/png;base64," + EncryptUtil.encodeBase64(os.toByteArray()));return resultImage;} catch (Exception e) {e.printStackTrace();throw new RuntimeException("生成二维码出错");} finally {if (stream != null) {stream.flush();stream.close();}}}return null;}
}

3.附加解码工具类内方法

    public static String encodeBase64(byte[] bytes){String encoded = Base64.getEncoder().encodeToString(bytes);return encoded;}

4.调用工具类

QRCodeUtil qrCodeUtil = new QRCodeUtil();
System.out.println(qrCodeUtil.createQRCode("http://address:port/url", 200, 200));

5.结果分析:

最后一行黑字复制下来直接贴在浏览器,扫码后即可跳转到上述具体路径

6.小tips:前端直接用img标签接收即可展示效果

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/777851.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Luogu P10842 Piggy and Trees 题解 [ 绿 ] [ 拆边 ] [ 贡献思维 ]

Piggy and Trees:把路径拆成边的思维题。 思路 一看到这题的路径,就想到了 Luogu P3177 树上染色 这题化路径为边的贡献,分别计算的思维。 那么对于此题,先来观察题目里式子的意思:对于树上的每个无序点对,求出树上每个点 到这些点对之间的最短路径的 距离之和。枚举点对…

ZeRO:一种去除冗余的数据并行方案

ZeRO:一种去除冗余的数据并行方案 目前训练超大规模语言模型主要有两条技术路线:TPU + XLA + TensorFlow/JAX GPU + Pytorch + Megatron + DeepSpeed 前者由Google主导,由于TPU和自家云平台GCP深度绑定,对于非Googler来说并不友好 后者背后则有NVIDIA、Meta、MS等大厂加持,…

【攻防技术系列+权限维持】注册表运行键

在红队行动期间在网络中获得初步立足点是一项耗时的任务。因此,持久化是红队行动成功的关键,因为这将使团队能够专注于交战目标,而不会失去与指挥和控制服务器的通信。 创建将在 Windows 登录期间执行任意负载的注册表项是红队剧本中最古老的隐藏技巧之一。这种持久性技术需…

链表part02

今天是8月3日,学习了链表的第二部分。交换链表两个节点,考察对next的操作和tmp的灵活运用。 删除链表的倒数第N个节点,双指针减少遍历次数。 链表相交,移动链表尾对齐,其实就是动长链表的指针。 环形链表,记住方法。4. 24交换链表两个节点 题目:给你一个链表,两两交换其…

Qt-pyqt6与QTDesginers的相互使用技巧

1. 先在QT Designers Tools 设计器中画好框架,再保存为.ui文件导出 2. 再pycharm中创建一个main.py文件用来加载和使用这个.ui文件,通用的代码如下: main.py from PyQt6.QtGui import QIntValidator, QIcon from PyQt6.QtWidgets import QApplication, QLabel, QListWidgetI…

Go中使用Zap日志库与Lumberjack日志切割

Go中使用Zap日志库与Lumberjack日志切割Go中使用Zap日志库与Lumberjack日志切割 原创 何泽丰 ProgrammerHe2024年06月11日 20:15 广东 听全文Go中使用Zap日志库与Lumberjack日志切割 概述 在项目中使用日志记录有助于快速定位和修复问题,能帮助我们监控系统健康状态及时发现问…

[UnrealCircle]腾讯 罗谦 | UnLua-UE4下的Lua脚本插件

传送门:[UnrealCircle]腾讯 罗谦 | UnLua-UE4下的Lua脚本插件_哔哩哔哩_bilibili参考PPT:UnrealCircle921北京PPT_免费高速下载|百度网盘-分享无限制一. UnLua 基础 1.1 概念UnLua 是一个脚本插件 UnLua 不是蓝图的替代,而是一种补充没有 Asset 预览 不支持 nativization 无…

Zigzag :nested loop 的教科书

Zigzag 在 PE array-memory hierarchy level 上对 nested-loop based 算子数据部署设计策略进行详细分析。文章作者来自鲁汶 MICAS [1]实验室。 软硬件建模 软件上只涉及 MAC-based 的网络算子(Linear、Convolutional),沿用 time-loop [2] 方法使用 nested-loop 建模,从 op…

6、Qt-pyqt6常用基本控件 - 选择列表类控件

选择列表类控件主要以列表形式为童虎提供选择的项目,用户可以从中选择项 此选项在QTDesigner的:Input Widgets下ComboBox FontComBoBox ListWidget🎣 1.ComboBox 下拉框 常用的方法:方法 说明addItem() 添加一个下拉表选项addItems() 从列表中给添加下拉选项currentText()…

蒙特卡洛模拟(4)————书店买书问题(0-1规划)

目录一、问题提出二、模型建立1.符号建立2.规定约束3.获得目标函数三、代码求解1.预备知识(1)unique函数(2)randi函数2.变量设置与初始化3.输入循环进行模拟四、模型拓展 一、问题提出二、模型建立 1.符号建立 在图表上,我们可以看见有六家商店和五本书,在代码中我们往往…

KubeSphere 社区双周报| 2024.07.19-08.01

KubeSphere 社区双周报主要整理展示新增的贡献者名单和证书、新增的讲师证书以及两周内提交过 commit 的贡献者,并对近期重要的 PR 进行解析,同时还包含了线上/线下活动和布道推广等一系列社区动态。 本次双周报涵盖时间为:2024.07.19-08.01。 贡献者名单新晋 KubeSphere co…