网站首页 > java教程 正文
一、ZXing简介
ZXing是一个开源的,用Java实现的多种格式的1D/2D条码图像处理库。它包含了用于解析多种格式的1D/2D条形码的工具类,目标是能够对QR编码,Data Matrix, UPC的1D条形码进行解码。在二维码编制上,ZXing巧妙地利用构成计算机内部逻辑基础的“0”、“1”比特流的概念,使用若干个与二进制数相对应的黑白模块来表示数据。此外,ZXing支持各种条形码,二维码扫描,由多个模块组成,而且支持PC端和移动端。现在的版本已经优化了很多bug,并进行了诸多改进。因此,无论是在自己的项目中集成二维码功能,还是进行二维码生成和解析的相关开发工作,都可以考虑使用ZXing这个强大的工具库。
二、Spring Boot集成ZXing
1. 在SpringBoot项目中,我们可以通过Maven或者Gradle来引入ZXing的依赖。以Maven为例,只需要在pom.xml文件中添加如下依赖:
<dependency>
<groupId>com.google.zxing</groupId>
<artifactId>core</artifactId>
<version>3.4.1</version>
</dependency>
<dependency>
<groupId>com.google.zxing</groupId>
<artifactId>javase</artifactId>
<version>3.4.1</version>
</dependency>
2. 创建一个名为QRCodeUtil的工具类,用于生成二维码和条形码,以及解析二维码。代码如下:
import com.google.zxing.*;
import com.google.zxing.client.j2se.MatrixToImageWriter;
import com.google.zxing.common.BitMatrix;
import com.google.zxing.common.HybridBinarizer;
import com.google.zxing.qrcode.QRCodeWriter;
import org.springframework.stereotype.Component;
import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.*;
import java.util.HashMap;
import java.util.Map;
@Component
public class QRCodeUtil {
// 生成二维码或条形码的方法,参数分别为内容、类型、宽度、高度、图片格式(默认为PNG)和输出流(可选)
public static void generate(String content, BarcodeFormat format, int width, int height, String formatName, OutputStream outputStream) throws Exception {
Map<EncodeHintType, Object> hints = new HashMap<>();
hints.put(EncodeHintType.CHARACTER_SET, "UTF-8"); // 设置字符编码为UTF-8
BitMatrix bitMatrix = new QRCodeWriter().encode(content, format, width, height, hints); // 生成矩阵对象
BufferedImage image = toBufferedImage(bitMatrix); // 将矩阵对象转换为BufferedImage对象
if (outputStream != null) { // 如果输出流不为空,则将图片写入到输出流中
ImageIO.write(image, formatName, outputStream);
} else { // 如果输出流为空,则返回图片的字节数组形式(Base64编码)
ByteArrayOutputStream os = new ByteArrayOutputStream();
ImageIO.write(image, formatName, os);
return Base64.getEncoder().encodeToString(os.toByteArray());
}
}
// 解析二维码的方法,参数为二维码的图片数据(Base64编码)和解码方式(默认为自动判断)
public static String parse(String qrCodeData, DecodeHintType[] hints) throws Exception {
byte[] bytes = Base64.getDecoder().decode(qrCodeData); // 将Base64编码的图片数据解码为字节数组形式
ByteArrayInputStream inputStream = new ByteArrayInputStream(bytes); // 将字节数组转换为输入流对象
BufferedImage image = ImageIO.read(inputStream); // 读取输入流中的图片数据,并将其转换为BufferedImage对象
LuminanceSource source = new BufferedImageLuminanceSource(image); // 将BufferedImage对象转换为LuminanceSource对象,以便后续处理
BinaryBitmap binaryBitmap = new BinaryBitmap(new HybridBinarizer(source)); // 将LuminanceSource对象转换为BinaryBitmap对象,以便后续处理
Result result = new MultiFormatReader().decode(binaryBitmap, hints); // 使用多格式解码器对BinaryBitmap对象进行解码,得到结果对象Result,其中包含了解码后的内容等信息
return result.getText(); // 返回解码后的内容信息(即二维码中包含的文字等)
}
}
3. 测试代码生成二维码和条形码,并解析二维码的功能。代码如下:
@Test
public void testQRCode() throws Exception {
// 生成二维码并保存到文件系统中(路径为/tmp/qrcode.png)
QRCodeUtil.generate("Hello World!", BarcodeFormat.QR_CODE, 300, 300, "PNG", new FileOutputStream("/tmp/qrcode.png"));
// 生成条形码并保存到文件系统中(路径为/tmp/barcode.png)
QRCodeUtil.generate("123456789012", BarcodeFormat.EAN_13, 100, 50, "PNG", new FileOutputStream("/tmp/barcode.png"));
// 从文件系统中读取二维码的图片数据(Base64编码),并解析出其中的内容信息(即文字“Hello World!”)
String qrCodeContent = QRCodeUtil.parse(new File("/tmp/qrcode.png").toString(), null); // null表示使用默认的解码方式(自动判断)
System.out.println("QR Code Content: " + qrCodeContent); // 输出二维码中的内容信息(即文字“Hello World!”)
}
三、结语
通过以上介绍,我们可以看到,SpringBoot与ZXing的结合非常便捷。我们可以使用ZXing提供的API轻松地生成和解析各种类型的条形码,而无需关心底层的实现细节。同时,SpringBoot也为我们提供了丰富的功能,如自动配置、依赖注入等,使得我们可以更专注于业务逻辑的开发。
猜你喜欢
- 2024-09-27 运维干货来啦:Jenkins+gradlew自动构建android项目提供下载链接和二维码下载
- 2024-09-27 基于 Spring Boot 和 WxJava 实现网站接入微信扫码登录
- 2024-09-27 基于token的多平台身份认证架构设计
- 2024-09-27 在线二维码生成器有哪些?微信二维码转换成链接如何实现?
- 2024-09-27 扫二维码提货系统自己建,系统搭建与操作指南分享
- 2024-09-27 PDF文件添加二维码水印(pdf二维码怎么弄出来扫码)
- 2024-09-27 掏出手机,扫一扫,即刻登录——SpringBoot实现二维码扫码登录
- 2024-09-27 短连接生成器有哪些?制作二维码生成器有哪些?
- 2024-09-27 慕课网Java相关课程学习项目源码,以及源码地址
- 2024-09-27 二维码扫描优化(微信二维码优化)
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- java反编译工具 (77)
- java反射 (57)
- java接口 (61)
- java随机数 (63)
- java7下载 (59)
- java数据结构 (61)
- java 三目运算符 (65)
- java对象转map (63)
- Java继承 (69)
- java字符串替换 (60)
- 快速排序java (59)
- java并发编程 (58)
- java api文档 (60)
- centos安装java (57)
- java调用webservice接口 (61)
- java深拷贝 (61)
- 工厂模式java (59)
- java代理模式 (59)
- java.lang (57)
- java连接mysql数据库 (67)
- java重载 (68)
- java 循环语句 (66)
- java反序列化 (58)
- java时间函数 (60)
- java是值传递还是引用传递 (62)
本文暂时没有评论,来添加一个吧(●'◡'●)