Spring Boot整合ZXing实现二维码和条形码生成

1. 添加ZXing依赖到Spring Boot项目

场景描述: 在需要快速、高效地生成二维码或条形码的应用中,如电子票务、产品追踪、个人身份验证等,集成ZXing库至Spring Boot项目是至关重要的一步。

在项目的pom.xml文件中添加以下依赖以引入ZXing库:

xmlCopy code<dependencies><!-- 添加ZXing库依赖 --><dependency><groupId>com.google.zxing</groupId><artifactId>core</artifactId><version>3.5.2</version> <!-- 使用最新版本以确保最佳性能和功能 --></dependency>
</dependencies>

使用最新版本的ZXing库可以确保你的应用具备最新的二维码和条形码生成能力,包括更好的性能和支持更多格式。

2. 创建二维码生成服务

场景描述: 此服务类适用于需要将URL、文本信息或其他数据快速转换为二维码图像的场合,如商业广告、社交媒体共享、安全验证等。

代码示例与注释:

import com.google.zxing.BarcodeFormat;
import com.google.zxing.EncodeHintType;
import com.google.zxing.MultiFormatWriter;
import com.google.zxing.common.BitMatrix;import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.File;
import java.util.HashMap;
import java.util.Map;/*** 生成二维码图像类** @author songzixian*/
public class QRCodeService {/*** 生成二维码图像** @param text   要编码的文本* @param width  二维码图像宽度* @param height 二维码图像高度* @param filePath 文件存储路径* @return 生成的二维码图像的字节数组*/public void generateQRCode(String text, int width, int height, String filePath) {try {// 定义二维码参数Map<EncodeHintType, Object> hints = new HashMap<>();// 设置字符编码hints.put(EncodeHintType.CHARACTER_SET, "UTF-8");// 错误纠正级别hints.put(EncodeHintType.ERROR_CORRECTION, com.google.zxing.qrcode.decoder.ErrorCorrectionLevel.H);// 二维码边距hints.put(EncodeHintType.MARGIN, 1);// 使用QRCodeWriter生成二维码矩阵信息MultiFormatWriter writer = new MultiFormatWriter();BitMatrix bitMatrix = writer.encode(text, BarcodeFormat.QR_CODE, width, height, hints);// 将二维码矩阵信息转换为图像BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);for (int x = 0; x < width; x++) {for (int y = 0; y < height; y++) {image.setRGB(x, y, bitMatrix.get(x, y) ? Color.BLACK.getRGB() : Color.WHITE.getRGB());}}// 江二维码保存成文件File qrCodeFile = new File(filePath);ImageIO.write(image, "png", qrCodeFile);System.out.println("二维码生成成功: " + filePath);} catch (Exception e) {e.printStackTrace();}}/*** 测试*/public static void main(String[] args) {QRCodeService qrCodeGenerator = new QRCodeService();// 要存储在二维码中的文本数据String text = "https://songzixian.com";// 二维码的宽度int width = 300;// 二维码的高度int height = 300;// 二维码存储路径String filePath = "D:\\data\\qrcode.png";qrCodeGenerator.generateQRCode(text, width, height, filePath);}
}

此服务类提供了一个generateQRCode方法,该方法可以将任意文本(如URL或文本信息)转换为指定大小的二维码图像,并保存至指定路径。

3. 创建条形码生成服务

场景描述: 适用于零售、库存管理、物流追踪等需要快速生成条形码的业务场景。

代码示例与注释:

import com.google.zxing.BarcodeFormat;
import com.google.zxing.EncodeHintType;
import com.google.zxing.MultiFormatWriter;
import com.google.zxing.common.BitMatrix;import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;/*** 生成条形图像类** @author songzixian*/
public class barCodeService {/*** 生成条形码图像** @param text     要编码的数据* @param width    条形码图像宽度* @param height   条形码图像高度* @param filePath 文件存储路径* @return 生成的条形码图像的字节数组* @throws IOException 当图像写入过程中出现问题时抛出*/public void generateBarcode(String text, int width, int height, String filePath) {try {// 定义二维码参数Map<EncodeHintType, Object> hints = new HashMap<>();// 设置字符编码hints.put(EncodeHintType.CHARACTER_SET, "UTF-8");// 使用QRCodeWriter生成条形码码矩阵信息MultiFormatWriter writer = new MultiFormatWriter();BitMatrix bitMatrix = writer.encode(text, BarcodeFormat.CODE_128, width, height, hints);// 创建BufferedImage对象来表示条形码BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);for (int x = 0; x < width; x++) {for (int y = 0; y < height; y++) {// 生成黑色条和白色背景的条形码image.setRGB(x, y, bitMatrix.get(x, y) ? 0 : 0xFFFFFF);}}// 将条形码保存到文件File barcodeFile = new File(filePath);ImageIO.write(image, "png", barcodeFile);System.out.println("条形码已生成并保存到: " + filePath);} catch (Exception e) {e.printStackTrace();}}/*** 测试*/public static void main(String[] args) {barCodeService barcodeGenerator = new barCodeService();// 要存储在条形码中的数据String text = "1234567890";// 条形码的宽度int width = 200;// 条形码的高度int height = 30;String filePath = "D:\\data\\barCode.png";barcodeGenerator.generateBarcode(text, width, height, filePath);}
}

此服务类通过generateBarcode方法生成条形码,支持将数字或文本信息转换为条形码,非常适合产品编码和库存管理系统。

把上面的代码复制到你的Spring Boot的Service代码中,就成功地在Spring Boot应用中整合了ZXing库,可以生成二维码和条形码了。

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

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

相关文章

Appium APP测试学习

1、安装client编程库(客户端) (1)如果遇到以下问题可以使用全路径安装 (2)安装后导致selenium升级&#xff0c;导致某些方法失效&#xff1a;如find_element_by_id。解决方法&#xff1a;卸载两个安装包&#xff0c;后面重新安装 2、安装appium Server:&#xff08;服务端&…

【码银送书第二十一期】《大数据智能风控:模型、平台与业务实践》

人行印发的《金融科技&#xff08;FinTech&#xff09;发展规划&#xff08;2022一2025年&#xff09;》明确指出金融科技成为防范化解金融风险的利器&#xff0c;运用大数据、人工智能等技术建立金融风控模型&#xff0c;有效甄别高风险交易&#xff0c;智能感知异常交易&…

每日热榜资源

获取更多资源&#xff0c;请关注公众号&#xff1a;阿宇的编程之旅&#xff0c;回复‘书签’获取 划水摸鱼官网 网站名称&#xff1a;划水摸鱼官网网址&#xff1a;划水摸鱼官网介绍&#xff1a;提供休闲放松的内容&#xff0c;让你在忙碌之余享受片刻的宁静。 鱼塘热榜 网…

【深度揭秘】AI 幻觉背后的技术真相与应对策略,探索人工智能的未来

写在前面 AI真的能分辨真实与虚构吗&#xff1f; 如果你的 AI 助手在关键会议中搬出了一个虚构的法律先例&#xff0c;你会不会想钻地洞&#xff1f; 我们准备好为 AI 的错误买单了吗&#xff1f; 当AI的“诊断”可能让医生瞬间变成“杀手”&#xff0c;你还敢信它的建议吗&am…

uniapp/vue中实现方框的移动、缩放,旋转操作(手指操作)

效果&#xff1a; <template><view class"container"><view class"rotatable" ref"view" :style"{ left: dragLeft px, top: dragTop px, transform: scale(${scale}) rotate(${currentRotation}deg), }"src"…

Lipowerline5.0 雷达电力应用软件下载使用

1.配网数据处理分析 针对配网线路点云数据&#xff0c;优化了分类算法&#xff0c;支持杆塔、导线、交跨线、建筑物、地面点和其他线路的自动分类&#xff1b;一键生成危险点报告和交跨报告&#xff1b;还能生成点云数据采集航线和自主巡检航线。 获取软件安装包联系邮箱:289…

Selenium CSS 选择器详细讲解

详细介绍 CSS 选择器 By.CSS_SELECTOR 在 Selenium 中&#xff0c;By.CSS_SELECTOR 是一种强大且灵活的定位方式。它使用 CSS 选择器语法来查找页面上的元素。CSS 选择器支持复杂的查询语法&#xff0c;可以根据元素的标签、类名、ID、属性等进行组合定位。 示例 HTML <!…

解决Java中的AssertionError异常的常用方法

解决Java中的AssertionError异常的常用方法 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01;今天我们将讨论在Java开发中常见的AssertionError异常&#xff0c;并…

递归的艺术:Python中5个递归函数经典问题与解析

递归&#xff0c;这门编程艺术中的魔法&#xff0c;它让复杂的问题变得简单&#xff0c;但初学者往往觉得它神秘莫测。别怕&#xff0c;今天我们就一起揭开递归的面纱&#xff0c;通过5个生动有趣的Python案例&#xff0c;让你轻松掌握递归的奥秘&#xff01; 1. 经典的阶乘问…

常用MQ消息中间件Kafka、ZeroMQ和RabbitMQ对比及RabbitMQ详解

1、概述 在现代的分布式系统和实时数据处理领域&#xff0c;消息中间件扮演着关键的角色&#xff0c;用于解决应用程序之间的通信和数据传递的挑战。在众多的消息中间件解决方案中&#xff0c;Kafka、ZeroMQ和RabbitMQ 是备受关注和广泛应用的代表性系统。它们各自具有独特的特…

CST电磁仿真软件的参数类型和含义【电磁仿真入门教程】

如果你是一位工程师或设计师&#xff0c;那你对电磁仿真软件CST Studio Suite一定不会感到陌生。CST软件可以帮助你模拟电磁场和电路行为&#xff0c;从而优化产品设计。本文将带你了解CST电磁仿真软件的一些关键参数&#xff0c;并解释其含义。CST电磁仿真软件的参数是指在使用…

安规管理:PLM安规管理、PLM安规管理新策略

安规管理&#xff1a;PLM安规管理、PLM安规管理新策略 随着科技的飞速发展&#xff0c;电子产品已经成为我们生活中不可或缺的一部分。然而&#xff0c;这些产品在给人们带来便利的同时&#xff0c;也可能带来触电、火灾、有害辐射等安全隐患。为了保护消费者的生命财产安全&am…

JavaScript全屏,监听页面是否全屏

在JavaScript中&#xff0c;直接监听浏览器是否进入全屏模式并不直接支持&#xff0c;因为全屏API主要是关于请求和退出全屏模式的&#xff0c;而没有直接的监听器可以告知页面何时进入或退出全屏模式。但是&#xff0c;你可以通过在你的代码中跟踪全屏状态的改变来模拟这个功能…

性能测试学习-执行测试脚本,监控性能指标

1、关于使用pymatlab库实现对数据表的增加&#xff0c;获取指定列操作&#xff0c;并在另一个py文件中调用 cursor游标的使用 """ 实现数据连接&#xff0c;并操作数据库&#xff0c;生成随机的用户数据 使用游标 """ import randomimport pym…

超越云端:Octopus v2端侧部署实现高效能语言模型

在人工智能领域&#xff0c;大型语言模型虽然在云端环境中展现出卓越的性能&#xff0c;但它们在隐私保护、成本控制以及对网络连接的依赖性方面存在不足。这些问题限制了AI技术在移动设备和边缘计算场景中的应用潜力。为了克服这些限制&#xff0c;研究者们一直在探索如何在设…

机器学习补充

一、数据抽样 数据预处理阶段&#xff1a;对数据集进行抽样可以帮助减少数据量&#xff0c;加快模型训练的速度/减少计算资源的消耗&#xff0c;特别是当数据集非常庞大时&#xff0c;比如设置sample_rate0.8.平衡数据集&#xff1a;通过抽样平衡正负样本&#xff0c;提升模型…

揭秘shopee、Lazada爆单秘诀:自养号补单策略大公开

在东南亚的电商跨境领域&#xff0c;Shopee和Lazada无疑占据了举足轻重的地位&#xff0c;为印地、马来、台湾、菲律宾、新加坡、泰国和越南等地的消费者提供了丰富的在线购物选择。随着电商竞争的日益激烈&#xff0c;许多商家开始探索各种有效的推广策略&#xff0c;其中&…

没有SSL证书,会造成哪些影响?

没有SSL证书&#xff0c;网站及其用户将会面临多种安全隐患和负面影响&#xff0c;主要包括但不限于以下几点&#xff1a; 1、安全警告&#xff1a;现代浏览器如谷歌Chrome会在用户尝试访问没有SSL证书的网站时显示明显的警告信息&#xff0c;如“不安全”标签&#xff0c;这会…

F407核心板小板快速入门000

1、现在实验室用的F407核心板有两个类型。都是用反客科技的板子。 一个是STM32F407ZGT6型号的FM板卡。一个是stm32F407VET6的板子FK板卡。前者是我们做工程训练大赛用到的。后者是做其他没有那么复杂的项目比如大创、电赛、机器人大赛等使用&#xff0c;板卡尺寸更小。 前者的参…

C++ 结构体对齐详解

目录 前言 一、为什么要对结构体进行对齐操作&#xff1f; 二、基本概念 三、 对齐规则 四、示例讲解 1.简单的变量对齐 2.结构体包含有结构体的对齐 结构体成员详细解析 五、使用指令改变对齐方式 __attribute__((packed)) #pragma pack(push, n) #pragma pack(pop) …