个人想建个网站怎么弄,室内设计师联盟网站,微信自己怎么创建公众号,互联网站源码一、ZXing简介
ZXing是一个开源的#xff0c;用Java实现的多种格式的1D/2D条码图像处理库。它包含了用于解析多种格式的1D/2D条形码的工具类#xff0c;目标是能够对QR编码#xff0c;Data Matrix, UPC的1D条形码进行解码。在二维码编制上#xff0c;ZXing巧妙地利用构成计… 一、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文件中添加如下依赖 dependencygroupIdcom.google.zxing/groupIdartifactIdcore/artifactIdversion3.4.1/version
/dependency
dependencygroupIdcom.google.zxing/groupIdartifactIdjavase/artifactIdversion3.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 {MapEncodeHintType, Object hints new HashMap();hints.put(EncodeHintType.CHARACTER_SET, UTF-8); // 设置字符编码为UTF-8BitMatrix 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.pngQRCodeUtil.generate(Hello World!, BarcodeFormat.QR_CODE, 300, 300, PNG, new FileOutputStream(/tmp/qrcode.png));// 生成条形码并保存到文件系统中路径为/tmp/barcode.pngQRCodeUtil.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也为我们提供了丰富的功能如自动配置、依赖注入等使得我们可以更专注于业务逻辑的开发。