当前位置: 首页 > news >正文

使用JAVA代码实现生成二维码

系列文章目录

1.SpringBoot整合RabbitMQ并实现消息发送与接收
2. 解析JSON格式参数 & 修改对象的key
3. VUE整合Echarts实现简单的数据可视化
4. List<HashMap<String,String>>实现自定义字符串排序(key排序、Value排序)
5. Java实现发送邮件(定时自动发送邮件)

更多文章可看我主页哦~


文章目录

  • 系列文章目录
  • 前言
  • 一、什么是二维码?
    • 1.1 定义
    • 1.2 理解
  • 二、代码实现
    • 2.1 引入依赖
    • 2.2 编写工具类
    • 2.3 编写Api
    • 2.4 测试
  • 三、扩展
  • 总结


前言

    在我们日常生活中,随处可见的二维码。在我们点餐时、购物时或是加好友时都会出现二维码,我们只需扫描二维码,就可以直接跳转到对应的小程序或者支付窗口。这是如何实现的呢?对我们软件、计算专业的同学来说,如何使用编程去实现二维码是非常必要的!!!


一、什么是二维码?

1.1 定义

    二维码(2-dimensional bar code)是用某种特定的几何图形按一定规律在平面(二维方向上)分布的、黑白相间的、记录数据符号信息的图形;在代码编制上巧妙地利用构成计算机内部逻辑基础的“0”、“1”比特流的概念,使用若干个与二进制相对应的几何形体来表示文字数值信息,通过图象输入设备或光电扫描设备自动识读以实现信息自动处理:它具有条码技术的一些共性:每种码制有其特定的字符集;每个字符占有一定的宽度;具有一定的校验功能等。同时还具有对不同行的信息自动识别功能、及处理图形旋转变化点。

1.2 理解

    对于二维码,生成的过程是如定义里所说较为复杂,对我们开发人员来讲,如何能够使用代码实现二维码才是至关重要的。但在实现二维码之前先来想一下,二维码和什么相似? 对了,有同学肯定会想到:“链接”。它们一个是“”,一个是“”的方式,均可以使我们直接跳转到对应的页面。
     所以说大多数二维码里的内容,其实就是链接!。那么如何把通过JAVA代码把一个“http://xxx.com”的链接生成一个二维码图片并且扫描后可以跳转到对应的页面呢?这也是接下来我要带着大家一步步实现的!

二、代码实现

2.1 引入依赖

    Maven 项目中添加对 ZXing(Zebra Crossing)二维码生成和解析库的依赖。在pom.xml添加依赖并刷新maven仓库加载依赖内容。

<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.2 编写工具类

将公共方法封装起来,方法里有四个参数,分别代表的含义是:

  • text:二维码的内容,一般是链接,也可以使文本。
  • width:生成图片宽度
  • height:生成图片高度
  • filePath:图片存放路径

具体代码如下图所示:

package com.xintai.study.utils;
import com.google.zxing.BarcodeFormat;
import com.google.zxing.EncodeHintType;
import com.google.zxing.WriterException;
import com.google.zxing.common.BitMatrix;
import com.google.zxing.qrcode.QRCodeWriter;
import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel;
import com.google.zxing.BarcodeFormat;
import com.google.zxing.EncodeHintType;
import com.google.zxing.WriterException;
import com.google.zxing.common.BitMatrix;
import com.google.zxing.qrcode.QRCodeWriter;
import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel;import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.time.LocalDateTime;
import java.time.ZoneOffset;
import java.util.*;
import java.awt.Graphics2D;public class QRCodeGenerator {/*** 永久二维码* @param text* @param width* @param height* @param filePath*/public static void generateQRCodeImage(String text, int width, int height, String filePath) {try {QRCodeWriter qrCodeWriter = new QRCodeWriter();Map<EncodeHintType, Object> hints = new HashMap<>();hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.L);BitMatrix bitMatrix = qrCodeWriter.encode(text, BarcodeFormat.QR_CODE, width, height, hints);BufferedImage bufferedImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);bufferedImage.createGraphics();Graphics2D graphics = (Graphics2D) bufferedImage.getGraphics();graphics.setColor(java.awt.Color.WHITE);graphics.fillRect(0, 0, width, height);graphics.setColor(java.awt.Color.BLACK);for (int i = 0; i < width; i++) {for (int j = 0; j < height; j++) {if (bitMatrix.get(i, j)) {graphics.fillRect(i, j, 1, 1);}}}ImageIO.write(bufferedImage, "png", new File(filePath));} catch (WriterException | IOException e) {e.printStackTrace();}}
}

2.3 编写Api

    为验证工具类方法是否能生成二维码,这里我简单编写了一个接口,传入具体的参数去调用工具类方法。查看是否可以生成对应的二维码文件。这里我实现的是扫描二维码进入百度的链接:“https://baidu.com”。
具体代码如下图所示:

package com.xintai.study.controller;import com.xintai.study.common.R;
import com.xintai.study.utils.QRCodeGenerator;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.*;@Slf4j
@CrossOrigin
@RestController
@RequestMapping("/api/common")
public class CommonController {@Value("${backend.Path}")private String path;@GetMapping("/QRCode")public R<String> save(){try {String QR_CODE_IMAGE_PATH = path+"MyQRCode.png"; // 生成的二维码图片保存路径String QR_CODE_TEXT = "https://baidu.com"; // 二维码内容,可以是URL等任意文本QRCodeGenerator.generateQRCodeImage(QR_CODE_TEXT, 350, 350, QR_CODE_IMAGE_PATH);return R.success("创建成功");} catch (Exception e) {log.error(e.toString());return R.error("接口异常");}}
}

2.4 测试

    使用postman去调用对应的接口,查看是否执行成功。如下图所示:在调用接口后提示创建成功,说明接口正常执行。
在这里插入图片描述
然后去到对应的文件夹下看是否生成对应的二维码图片,在我的文件夹下,已经生成对应的二维码效果图,并且扫描后可以正常跳转到百度。如下图所示:
在这里插入图片描述
大家也可以通过手机扫描上述二维码查看是否跳转到百度页面哦~

三、扩展

    扩展部分是要自己去思考的,大家在日常生活中的二维码会发现都有时效性,在某个时间点过后就失效了。或者一个二维码只能被扫描一次的情况等等。这些都可以通过上述的依赖库方法进行实现,大家感兴趣可以自己查看依赖库中的方法,实现一个属于自己的小demo~


总结

    使用JAVA代码已经实现二维码,对于现在的开发,有大多数的基础依赖库我们可以使用,也是体验站在巨人的肩膀上进行开发。将复杂的二维码生成过程缩减为现在的只需调用依赖库中的几个方法,甚至不需要过多的去理解二维码的生成原理。令我们的开发变得更加简单便捷!!!我也很希望优秀的大家能够有此想法,实现一个个人的maven依赖~

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • windows网络应急排查
  • 以线程完成并发的UDP服务端
  • 使用kali对操作系统和网络服务类型进行探测
  • 列举excel中调整行高列宽的五种方法
  • Telegram曝零日漏洞,可伪装成视频攻击安卓用户
  • linux系统安装pytorch_中文地址命名实体识别案例
  • 使用Kafka Streams进行事件流处理
  • 实时视频流中的目标检测与跟踪:动态视觉的挑战与实现
  • 基于单片机控制的变压器油压油温故障检测
  • AI学习记录 - 激活函数的作用
  • 用51单片机或者stm32能否开发机器人呢?
  • 探索 ESP32 单片机:开启智能创新之旅
  • poi库简单使用(java如何实现动态替换模板Word内容)
  • 大语言模型-GPT-Generative Pre-Training
  • 通过 EMR Serverless Spark 提交 PySpark 流任务
  • 〔开发系列〕一次关于小程序开发的深度总结
  • Android单元测试 - 几个重要问题
  • CSS 专业技巧
  • CSS3 变换
  • css选择器
  • DataBase in Android
  • echarts的各种常用效果展示
  • javascript面向对象之创建对象
  • js作用域和this的理解
  • PHP那些事儿
  • spring学习第二天
  • 表单中readonly的input等标签,禁止光标进入(focus)的几种方式
  • 第三十一到第三十三天:我是精明的小卖家(一)
  • 分布式熔断降级平台aegis
  • 机器学习 vs. 深度学习
  • 开年巨制!千人千面回放技术让你“看到”Flutter用户侧问题
  • 前端
  • 数组大概知多少
  • 优秀架构师必须掌握的架构思维
  • k8s使用glusterfs实现动态持久化存储
  • puppet连载22:define用法
  • ​​​​​​​ubuntu16.04 fastreid训练过程
  • ​ubuntu下安装kvm虚拟机
  • # AI产品经理的自我修养:既懂用户,更懂技术!
  • ###51单片机学习(2)-----如何通过C语言运用延时函数设计LED流水灯
  • #Spring-boot高级
  • $L^p$ 调和函数恒为零
  • (C++哈希表01)
  • (MTK)java文件添加简单接口并配置相应的SELinux avc 权限笔记2
  • (NO.00004)iOS实现打砖块游戏(十二):伸缩自如,我是如意金箍棒(上)!
  • (pycharm)安装python库函数Matplotlib步骤
  • (python)数据结构---字典
  • (react踩过的坑)antd 如何同时获取一个select 的value和 label值
  • (二) 初入MySQL 【数据库管理】
  • (附源码)spring boot校园健康监测管理系统 毕业设计 151047
  • (紀錄)[ASP.NET MVC][jQuery]-2 純手工打造屬於自己的 jQuery GridView (含完整程式碼下載)...
  • (十一)图像的罗伯特梯度锐化
  • (一)插入排序
  • (转)菜鸟学数据库(三)——存储过程
  • (转)一些感悟