代码生成二维码

2023-11-20


前言

Zxing Zxing 是一个开源的 Java 二维码扫描和生成库,由美国 Google 公司的一位开发者 Sean Owen 在 2006 年开发并发布,它是用 Java 语言编写的,可以方便地集成到各种应用中。
项目地址为:https://github.com/zxing/zxing


使用步骤

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>

生成二维码

在进行二维码生成前,需要先创建一个 MultiFormatWriter 对象,并使用 encode() 方法将文本信息转换为二维码矩阵。然后再使用 MatrixToImageWriter 类的 writeToStream() 方法将矩阵对应的二维码图片写入输出流中。

代码实现如下:

    //config中包含的一些二维码信息
    Map<EncodeHintType, Object> config = new HashMap<>();
    config.put(EncodeHintType.CHARACTER_SET, "UTF-8");
    config.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.M);
    config.put(EncodeHintType.MARGIN, 0);
    //核心代码(高度、宽度就不说了)
    BitMatrix bitMatrix = new MultiFormatWriter().encode(content, BarcodeFormat.QR_CODE, width, height, config);

解释一下里面config中的信息

  • CHARACTER_SET: 指定编码格式,默认值为 UTF-8。
  • ERROR_CORRECTION: 指定纠错等级,包括四个等级:L(约可纠错 7% 的数据码字)、M(约可纠错 15% 的数据码字)、Q(约可纠错 25% 的数据码字)和 H(约可纠错 30% 的数据码字),默认值为 M。
  • MARGIN: 指定二维码图片的边距,默认值为 0,即不留白边。

二维码转url

因为生成的二维码是以图片的形式输出,而如果想要用户看到二维码就需要我们将二维码转换为url给到前端进行渲染,可以参考图床搭建文章,进行图片上传。

那么新的问题又来了,生成的二维码需要存储在哪里?

  • 在之前我让他指定了一个路径进行输出,如下代码:
  Path path = Paths.get("qrcode.png");
  MatrixToImageWriter.writeToPath(bitMatrix, "PNG", path);

path是我指定的在这个当前项目中的位置去生成图片qrcode.png,那么在调用writeToPath中,指定生成的路径path的位置

然后我们将这个位置的图片在传到生成url地址的api中,最后生成网络url地址去返回给前端

qrCodeUrl = uploadFileMinio(qrCodeLocalityUrl);

  • 那么这样操作虽然解决了问题,那么如果我们每次都要去将二维码保存在本地,是否造成了资源的浪费,这个时候我又想到了使用内存去将二维码生成的直接放在内存中上传。代码实现如下:
    //            转化对象为BufferedImage
               BufferedImage image = MatrixToImageWriter.toBufferedImage(bitMatrix);
    //           将image对象写入到ByteArrayOutputStream中
               ByteArrayOutputStream os = new ByteArrayOutputStream();
               ImageIO.write(image, "png",os);
    //            讲写入内存的对象写出到ByteArrayInputStream中
               ByteArrayInputStream is = new ByteArrayInputStream(os.toByteArray());
    //            最后调用上传图片的方法上传文件
               Boolean upload = minioUtil.upload(is, "fineName", minioConfig.getBucketName());
               if (upload) {
                   qrCodeUrl =  minioConfig.getUrl() + "/" + minioConfig.getBucketName() + "/" + "fineName";
               }
    

总结

以上就是使用 Zxing 进行二维码扫描和生成的基本步骤。当然,针对不同场景,可能还需要设置一些参数和处理一些异常等操作。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

代码生成二维码 的相关文章

  • Android NumberPicker 带字符串

    I have customised the NumberPicker to show text The output is this 当我按 确定 时 我想将 e x 鼠标添加到我的列表 文章 中 我得到的是索引值 int 它由 array
  • V8 如何管理它的堆?

    我知道V8的垃圾收集在工作时 会从GC的root开始追踪 这样无法到达的对象就会被标记然后被清除 我的问题是GC是如何遍历那些对象的 必须有一个数据结构来存储所有可达或不可达的对象 位图 链接表 顺便说一句 JVM 也做同样的事情吗 艾伦秀
  • Java Swing:清除JList而不触发监听器

    我的情况如下 我有一个 JList 只要在列表中进行选择 它就会触发搜索 使用 ListSelectionListener 我正在尝试使用以下命令重置列表上的选择list clearSelection 这样做的问题是使用clearSelec
  • Spring webflow 应用程序:HTTP 302 暂时移动

    我的 java 应用程序中的每个请求都会生成另外 2 个带有 HTTP 302 错误的请求 例如 如果请求查看名为板 html 这个请求是从首页 html 我收到按以下顺序生成的 3 个请求 POST home html 302 Moved
  • Java/JAXB:将具有相同名称但不同属性值的 XML 元素解组到不同的类成员

    我正在尝试根据其属性之一将具有多个 Fields 元素的 XML 解析为不同的类成员 这是 XML
  • 使用 Java 编程式 HTML 文档生成

    有谁知道如何在 Java 中以编程方式生成 HTMLDocument 对象 而不需要在外部生成字符串 然后使用 HTMLEditorKit read 来解析它 我问的两个原因 首先 我的 HTML 生成例程需要非常快 并且我认为将字符串解析
  • JUnit 使用 Mockito 测试异步方法

    我已经使用 Spring Framework 版本 5 0 5 RELEASE 在 Java 1 8 类中实现了异步方法 public class ClassToBeTested Autowired private MyComponent
  • java“void”和“非void”构造函数

    我用 java 编写了这个简单的类 只是为了测试它的一些功能 public class class1 public static Integer value 0 public class1 da public int da class1 v
  • 从 eclipse 运行时 java.io.FileNotFoundException: (没有这样的文件或目录)

    我正在写入文件并想要控制台输出 TODO Create a game engine and call the runGame method public static void main String args throws Excepti
  • 删除 servlet 中的 cookie 时出现问题

    我尝试使用以下代码删除 servlet 中的 cookie Cookie minIdCookie null for Cookie c req getCookies if c getName equals iPlanetDirectoryPr
  • 如何在 OpenAPI 3.0 中定义字节数组

    我正在将 API 从 Swagger 2 0 迁移到 OpenAPI 3 0 在 DTO 中 我有一个指定为字节数组的字段 Swagger 对 DTO 的定义 Job type object properties body type str
  • firestore快照监听器生命周期和定价之间有什么关系?

    在我的活动中 我有一个字符串列表 这些字符串表示我想要附加快照侦听器的 Firestore 文档 我使用 Acivity ModelView 存储库结构 在活动的 onCreate 中 我向 ViewModelProvider 询问适当的
  • 如何模拟一个方面

    我目前正在使用aspectj 开发一些监控工具 因为这个工具应该是技术独立的 尽可能 所以我没有使用 Spring 进行注入 但我希望我的方面能够经过单元测试 方面示例 Aspect public class ClassLoadAspect
  • Java 的 QP 求解器 [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 嵌入式 tomcat 7 servlet 3.0 注释不起作用

    我有一个精简的测试项目 其中包含 Servlet 版本 3 0 用注释声明 如下所示 WebServlet test public class TestServlet extends HttpServlet private static f
  • 字节码和位码有什么区别[重复]

    这个问题在这里已经有答案了 可能的重复 LLVM 和 java 字节码有什么区别 https stackoverflow com questions 454720 what are the differences between llvm
  • 使用 Maven 3 时 Cobertura 代码覆盖率为 0%

    读完这篇文章后 将 Cobertura 与 Maven 3 0 2 一起使用的正确方法是什么 https stackoverflow com questions 6931360 what is the proper way to use c
  • 防止 Firebase 中的待处理写入事务不起作用

    我的目标是在单击按钮时将名称插入 Cloud Firestore 中 但如果用户未连接到互联网 我不希望保存处于挂起状态 我不喜欢 Firebase 保存待处理写入的行为 即使互联网连接已恢复 我研究发现Firebase 开发人员建议使用事
  • JDK 7 的快速调试/调试构建

    我正在寻找 JDK 的调试 或者我猜他们称之为快速调试构建 以启用在运行时生成的打印程序集以及查找性能问题时所需的其他诊断 就目前情况而言 我似乎找不到可以直接使用的 现成的 快速调试构建二进制包 有人可以帮我提供下载链接 或者至少提供有关
  • 日期时间解析异常

    解析日期时 我的代码中不断出现异常错误 日期看起来像这样 Wed May 21 00 00 00 EDT 2008 这是尝试读取它的代码 DateTimeFormatter formatter DateTimeFormatter ofPat

随机推荐

  • 2015物联网产业群雄逐鹿 推进产业健康发展

    本文转载至 http www 50cnnet com show 34 84566 1 html 核心提示 自2010 年 国务院关于加快培育和发展战略性新兴产业的决定 首次将物联网产业列为国家发展战略后 国家及各省市又陆续出台了针对涉及物联
  • # flutter、rn、uni-app比较

    flutter rn uni app比较 更新 DCloud已推出强大的uts 虽然第一个版本还不适于开发ui 但会陆续升级 这将是最佳的跨平台解决方案 详见 前言 每当我们评估新技术时要问的第一个问题就是 它会给我们的业务和客户带来哪些价
  • 闯关游戏 xss-lab

    level 1 直接测试 我们看到参数是name 那就吧payload带进去 发现直接就注入了 没有任何的过滤 其实我们可以先构造一串敏感字符 用作测试 看看程序是如何过滤的 比如
  • 基于SSM的校园二手交易平台

    一 源码获取 链接点击直达 下载链接 二 系统架构 使用技术 Spring SpringMVC Mybatis 三 系统需求分析 在如今的大学校园中 伴随着学生的购买能力的提高和每年的升学和毕业 存在许多各种类型的二手商品 目前 二手商品交
  • 安全顶刊论文阅读总结1

    论文阅读总结 An Explainable AI Based Intrusion Detection System for DNS Over HTTPS DoH Attacks 论文介绍 本文2022年发表在IEEE Transaction
  • Java 比较器 -- 对象比较

    基本数据类型比较大小时 我们可以用比较运算符 当两个对象比较大小时 我们就可以用比较器了 实现的方式有两种 如下 方式一 自然排序 实现接口Comparable 创建一个自定义类Students 实现接口Comparable 并重写comp
  • TensorFlow在Win10上的安装教程和简单示例

    安装说明 平台 目前可在Ubuntu Mac OS Windows上安装 版本 提供gpu版本 cpu版本 安装方式 pip方式 Anaconda方式 Tips 在Windows上目前支持python3 5 x gpu版本需要cuda8 c
  • Linux下gdb调试生成core文件并调试core文件

    1 什么是core文件 有问题的程序运行后 产生 段错误 核心已转储 时生成的具有堆栈信息和调试信息的文件 编译时需要加 g 选项使程序生成调试信息 gcc g core test c o core test 2 怎样配置生成 core 文
  • React核心概念:状态提升

    上一节 表单 下一节 组合vs继承 React核心概念 状态提升 引言 添加第二个输入框 编写转换函数 状态提升 经验总结 引言 很多情况下我们使用的多个组件需要对同一个数据做出对应的反应 在这里我们推荐把这个共享的状态提升到距离这些组件最
  • 迅为-iMX6ULL开发板-Python移植-运行测试2

    迅为 iMX6ULL开发板 Python移植 运行测试2 92 3 1 库功能文件测试 进入 install bin 目录下使用命令 python 然后使用 import 加载各模块如图 92 3 1 1 所示则 python移植成功 按
  • opencv学习记录【5】(背景差分算法

    8 26 9 2 背景差分算法 一 帧间差分 最简单的背景提取方法 一帧减去另一帧 函数实现 Void cv absdiff frameTime1 frameTime2 frameForeground 为了去除噪音波动等 常常忽略帧间微小的
  • Vue组件报错For recursive components, make sure to provide the “name“ option.

    在Vue的组件component学习中报错 Vue warn Unknown custom element
  • Fedora 10網卡消失的問題

    http itgroup blueshop com tw towns hc n convew i 6000 今天看到肉鬆Selinux的問題 想說來測試處理一下 將以備份出來的Fedora 10 VM拿出來用 啟動系統後 出現了一個怪問題
  • Python中的itertools.permutations(关键词:itertools/permutations)

    通俗地讲 就是返回可迭代对象的所有数学全排列方式 Python 2 7 12 default Nov 20 2017 18 23 56 GCC 5 4 0 20160609 on linux2 Type help copyright cre
  • python-测试代码

    目录 介绍 测试函数 单元测试和测试用例 可通过的测试 不能通过的测试 测试未通过时怎么办 添加新测试 测试类 各种断言方法 一个要测试的类 测试AnonymousSurvey类 方法setUp 介绍 在本章中你会学习如何使用Python模
  • jvm垃圾回收之Eden、S0、S1、Old的关系

    jvm垃圾回收之Eden S0 S1 Old的关系 https blog csdn net u012799221 article details 73180509
  • 解决win10系统 3dMax只能渲染一次的问题

    是不是很多人疑问为什么自己的电脑配置明明足够 但在3dMax正常运行过程中 渲染一次过后 3dMax便卡住不动了 只能重启解决 无形之中浪费了很多时间 近日 我在使用3dMax时也遇到了此问题 发现是因为win10的微软输入法与3dMax不
  • 解决request.getServletContext()方法报红问题

    getServletContext 方法是Servlet3 0添加的 所以需要引入3 0以上的jar包
  • Tomcat的context path

    本文章转载自 https www cnblogs com yanan7890 p 8329163 html tomcat server xml context path配置需要注意的事情 在tomcat下放个war包 假如我是这样配置ser
  • 代码生成二维码

    使用java生成二维码 前言 使用步骤 xml 生成二维码 二维码转url 总结 前言 Zxing Zxing 是一个开源的 Java 二维码扫描和生成库 由美国 Google 公司的一位开发者 Sean Owen 在 2006 年开发并发