原来Java生成二维码这么简单

article/2025/9/23 22:29:58

文章目录

    • 一、二维条码/二维码(2-dimensional bar code)的概念
    • 二、二维码的发展历史
    • 三、二维码的分类
    • 四、二维码的优缺点
    • 五、QR Code
    • 六、实例开发
      • 1、zxing生成二维码
      • 2、zxing进行二维码解析
      • 3、使用QR Code方式生成和解析二维码
      • 4、jquery-qrcode生成二维码

一、二维条码/二维码(2-dimensional bar code)的概念

用某种特定的几何图形按一定规律再平面(二维方向上)分布的黑白相间的图形记录数据符号信息的图形。

二、二维码的发展历史

在这里插入图片描述

一维码:只能存储数字、字母,
二维码:可以存储汉字、数字、字母、图片等。

三、二维码的分类

线性堆叠式二维码: 建立在一维条码基础之上,按需要堆积成两行或多行

矩阵式二维码: 在一个矩形空间通过黑、白像素在矩阵中的不同分布进行编码(在矩阵相应元素位置上,用点的出现表示二进制“1”,点的不出现表示二进制的“0”)

邮政码: 通过不同长度的条进行编码,主要用于邮件编码

四、二维码的优缺点

二维码优点: 高密度编码,信息容量大;编码范围广;容错能力强;译码可靠性高;可引入加密措施;成本低,易制作,持久耐用。

缺点: 二维码技术成为手机病毒,钓鱼网站传播的新渠道;信息泄露。

五、QR Code

三大国际标准:

PDF147-- DM --QR code

QR code: 日本Denso公司1994年研发的一种矩阵二维码符号码,Quick Response Code

纠错能力: L级(7%)-M(15%)-Q(25%)-H(30%)
纠错能力越高,承载信息越少

JSP生成二维码方法: 第三方Jar如zxing\qrcodejar,javascript如jquery\qrcode.js

六、实例开发

1、zxing生成二维码

Zxing:

网址: https://github.com/zxing/

特点: 开源 java编写

下载后为源代码,需要自己打成jar包(包含core中的 com和javase中的com)

而我因为用的是IDEA所以用的依赖pom.xml:

<dependency><groupId>com.google.zxing</groupId><artifactId>core</artifactId><version>3.3.0</version>
</dependency>
<dependency><groupId>com.google.zxing</groupId><artifactId>javase</artifactId><version>3.0.0</version>
</dependency>

代码实现:
CreateQRCode.java:

//生成二维码
public class CreateQRCode {public static void main(String[] args) {int width = 300;        //定义图片宽度int height = 300;       //定义图片高度String format = "png";      //定义图片格式String content = "https://blog.csdn.net/weixin_45537947";     //定义二维码内容//定义二维码的参数HashMap hashMap = new HashMap();hashMap.put(EncodeHintType.CHARACTER_SET, "utf-8");     //设置编码hashMap.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.M);       //设置容错等级,等级越高,容量越小hashMap.put(EncodeHintType.MARGIN, 2);          //设置边距//生成二维码try {//生成矩阵//                                                   内容              格式          宽       高BitMatrix bitMatrix = new MultiFormatWriter().encode(content, BarcodeFormat.QR_CODE, width, height, hashMap);Path file = new File("F:/img.png").toPath();        //设置路径MatrixToImageWriter.writeToPath(bitMatrix, format, file);       //输出图像} catch (Exception e) {e.printStackTrace();}}
}

前往该路径,查看生成的二维码:
在这里插入图片描述

2、zxing进行二维码解析

代码演示:

public class ReadQRCode {public static void main(String[] args) {try {/** MultiFormatReader 多格式读取* */MultiFormatReader formatReader = new MultiFormatReader();File file = new File("F:/img.png");//读取图片buffer中BufferedImage bufferedImage = ImageIO.read(file);/** BinaryBitmap			二进制位图* HybridBinarizer		混合二值化器* BufferedImageLuminanceSource   图像缓存区 亮度 资源* */BinaryBitmap binaryBitmap = new BinaryBitmap(new HybridBinarizer(new BufferedImageLuminanceSource(bufferedImage)));//定义二维码参数HashMap hashMap = new HashMap();hashMap.put(EncodeHintType.CHARACTER_SET, "utf-8");//编码方式//hashMap.put(DecodeHintType.TRY_HARDER, Boolean.TRUE);//优化精度//hashMap.put(DecodeHintType.PURE_BARCODE, Boolean.TRUE);//复杂模式,开启PURE_BARCODE模式Result result = formatReader.decode(binaryBitmap,hashMap);System.out.println("解析结果:"+result.toString());System.out.println("二维码格式类型:"+result.getBarcodeFormat());//BarcodeFormat   条形码格式System.out.println("二维码文本内容:"+result.getText());} catch (Exception e) {e.printStackTrace();}}
}

结果:
在这里插入图片描述

解析过程中出现了这个报错:com.google.zxing.NotFoundException
在这里插入图片描述
所以我进行了debug发现扫描二维码时,二维码所有bit都是0,然后分析了一下,发现我在生成二维码的时候白色像素填充使用的是透明色,这样在显示的时候因为背景是白色,所以看上去和用手机扫都没有问题,但是自己代码识别的时候就会把透明色识别为黑色,这样就导致整个二维码图片全是黑色像素,所以zxing抛出com.google.zxing.NotFoundException异常。
所以只需要把上面代码演示的代码中把优化精度、复杂模式的注释取消就可以解决。

倘若你把内容设置成中文后出现一堆问号,则需要:

二维码内容写成中文之后,调用读取的类,读出来的是一堆问号的解决方式:
在读取类中该为BitMatrix bitMatrix=new MultiFormatWriter().encode(new String(content.getBytes(“UTF-8”),“ISO-8859-1”), BarcodeFormat.QR_CODE, width, height,hints);
在读取类和创建类中,将编码都设为"ISO-8859-1"就能读取中文了
hints.put(EncodeHintType.CHARACTER_SET, “ISO-8859-1”);

3、使用QR Code方式生成和解析二维码

生成: http://www.swetake.com/qrcode/index-e.html

读取: https://osdn.jp/projects/qrcode/

生成二维码,代码实现:(请先导入对应的包)
CreateQRCode.java:

public class CreateQRCode {public static void main(String[] args) throws IOException {QRCode x = new QRCode();x.setQrCodeErrorCorrect('M');   //纠错等级x.setQrcodeEncodeMode('B');     //N代表数字,A代表a-Z,B代表其它字符x.setQrcodeVersion(7);  //版本String qrData = "https://blog.csdn.net/weixin_45537947";int width = 67 + 12 * (7-1);int height = 67 + 12 * (7-1);BufferedImage bufferedImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);Graphics2D gs = bufferedImage.createGraphics();gs.setBackground(Color.WHITE);gs.setColor(Color.BLACK);gs.clearRect(0, 0, width,height);int pixoff = 2;//偏移量byte[] d = qrData.getBytes("gb2312");if (d.length > 0 && d.length < 120) {boolean[][] booleans = x.calQrcode(d);for (int i = 0;i < booleans.length; i++) {for (int j = 0;j < booleans.length; j++) {if (booleans[j][i]) {gs.fillRect(j * 3 + pixoff, i * 3 + pixoff, 3, 3);}}}}gs.dispose();bufferedImage.flush();ImageIO.write(bufferedImage, "png",new File("F://qrcode.png"));}
}

4、jquery-qrcode生成二维码

jQuery-qrcode:

网址: https://github.com/jeromeetienne/jquery-qrcode

代码演示:
js的代码下载地址:
https://img.mukewang.com/down/5799a5440001040300000000.rar
qrcode.jsp:

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>生成二维码</title><script type="text/javascript" src ="<%=request.getContextPath() %>/js/jquery.min.js"></script><script type="text/javascript" src ="<%=request.getContextPath() %>/js/jquery.qrcode.min.js"></script>
</head>
<body>
生成的二维码如下:<br>
<div id = "qrcode"></div>
<script type="text/javascript">//二选一jQuery('#qrcode').qrcode("https://blog.csdn.net/weixin_45537947");// jQuery('#qrcode').qrcode({width: 250, height: 250,text: "https://blog.csdn.net/weixin_45537947"});
</script>
</body>
</html>

然后启动Tomcat, 访问:

在这里插入图片描述
关于二维码的简单学习就到这里ヾ(✿゚▽゚)ノ


http://chatgpt.dhexx.cn/article/ectqHSnj.shtml

相关文章

java生成二维码,跳转到指定页面

一、介绍&#xff1a;生成二维码有很多种方法&#xff0c;比如微信公众号的生成二维码&#xff0c;但是这个二维码只能用微信扫描且会&#xff08;可以带参数&#xff09;自动跳转到微信的公众号页面&#xff0c;不支持跳转到其他网页。这里说的二维码是扫描&#xff08;微信、…

Java生成二维码(附工具类)

后台Java生成二维码 这里用到了谷歌的zxing包&#xff0c;maven依赖如下&#xff1a; <!-- 二维码依赖开始--><dependency><groupId>com.google.zxing</groupId><artifactId>core</artifactId><version>3.4.0</version></…

java生成二维码最简单方法

昨天接到了一个需求是通过jave服务端动态生成二维码&#xff0c;提供给前端调用&#xff0c;这里就介绍一下生成的过程。 我这里是一个springboot服务&#xff0c;springboot服务的jar包就不贴了 这里只粘贴二维码用到的依赖。 1、pom依赖&#xff0c;这里只用到了两个依赖 &…

java生成二维码(链接生成二维码)

Java二维码如何生成&#xff1f; awt。image。BufferedImage; import java。io。File; import javax。imageio。ImageIO; import com。swetake。util。Qrcode; public class QRCodeEncoderTest { public static void main(String[] args) throws Exception { Qrcode qrco…

JAVA生成二维码QRcode

JAVA生成二维码QRcode 1 : 配置集成1.1、配置maven1.2、配置文件1.3、logo文件 2 : 代码集成2.1、加载配置文件2.2、工具类2.3、测试类 3 : 测试结果3.1、生成二维码3.2、扫描结果3.3、资源 1 : 配置集成 1.1、配置maven pom文件中添加一下配置 <!-- QR code --> <…

Java实现生成二维码

前言&#xff1a; 目前所分享的技术栈为Javaweb之后学运用到的 有喜欢我分享的一些demo可以多多交流 生成二维码前提&#xff1a; 1.需要引入谷歌所推荐使用的jar包 2.此jar包名称叫做zxing&#xff0c;目前我还没找到能所下载的jar包 3.我这里有自己制作好的jar包可以云盘下…

使用Java生成二维码图片(亲测)

下面我来分享两种生成二维码图片的方法。 第一种&#xff0c;填入你扫描二维码要跳转的网址直接生成二维码 第一步&#xff1a;导入相关的包 1 <dependency> 2 <groupId>com.google.zxing</groupId> 3 <artifactId>core</artifactId>…

Java生成二维码的几种实现方式(基于Spring Boot)

本文将基于Spring Boot介绍两种生成二维码的实现方式&#xff0c;一种是基于Google开发工具包&#xff0c;另一种是基于Hutool来实现&#xff1b; 为了方便理解二维码的实际应用场景&#xff0c;举一些例子&#xff01; &#xff08;1&#xff09;进销存系统 想必大家都听说过…

RK3562 camera调试:MIPI资源和配置

这篇文章给大家介绍一下RK新的一颗RK3562的camera资源以及MIPI的配置。 目录 &#xff08;1&#xff09;RK3562 camera资源 ①RK3562 camera硬件框图 ②MIPI-CSI资源 ③VICAP资源 ④ISP资源 ⑤最多支持camera数量 &#xff08;2&#xff09;dts配置 &#xff08;3&…

电子设计入门——单片机最小系统

写在前面 本文以STM32F401RCT6为例&#xff0c;讲解单片机最小系统的设计方法&#xff0c;以及一些相关的原理。 上图所示即为单片机最小系统电路&#xff0c;我们将其分为三个部分&#xff0c;即电源电路、复位电路、时钟电路。在了解最小电路之前&#xff0c;我们先看看下面…

LCD/HDMI OUT调试经验(4)------点亮LCD

本文以最近在QCM6490平台调试的一块FT8719为例&#xff0c;详细介绍点亮一块LCD屏幕的完整过程。 点亮屏幕的操作主要分两部分&#xff1a;上电和配置MIPI参数。上电保证屏幕可以有正常的背光&#xff0c;而MIPI参数保证有合适的清晰度&#xff0c;分辨率和画面。 一、上电 拿…

AVD那些事儿

启动了AVD却说找不到AVD 错误提示&#xff1a; No active compatible AVDs or devices found. Relaunch this configuration after connecting a device o 查看你的project版本是运行在哪个版本的&#xff08;AndroidManifest.xml中android:targetSdkVersion属性&#xff09…

AVD的安装和配置

一、创建配置AVD 运行Eclipse &#xff0c;选择“window->Android Virtual Device Manager”&#xff1b;或者运行C盘根目录下的android-sdk-windows文件夹中的文件AVD Manager.exe&#xff0c;弹出一个对话框&#xff0c; 点击“New...”按钮&#xff0c;在弹出的对话框中…

【原理图】电路中的VCC VDD VSS VEE GND含义 以及STM32电源

原理图中经常出现的VCC VDD VSS VEE GND是什么意思呢&#xff1f; 总的来说 VDD&#xff0c;是Virtual Device Driver的缩写 VCC&#xff0c;是Volt Current Condenser的简写 GND 接地 他们的命名来自于MOS管和晶体管的接法&#xff0c;这个以后再提。 VCC vcc一般表示通用芯…

RK3566调试GC2053

电路 RK3566主板外接了一个MIPI接口涉嫌头模组&#xff0c;I2C接口I2C2&#xff0c;模组Sensor为GC2053&#xff0c;模组的设备地址为0x37&#xff08;地址需和模组厂家确定&#xff09;&#xff0c;电路如下&#xff1a; 管脚连接关系如下&#xff1a; GPIO0_C1------>CA…

微雪树莓派PICO笔记——4. ADC(模拟数字转换器)

文章目录 什么是ADCRP2040 ADC技术参数ADC大致框架图【MicroPython】machine.ADC类函数详解代码实现 如果我们需要使用PWM精准的控制LED的亮度&#xff0c;就需要反馈但是LED的亮度是一个模拟变量&#xff0c;MCU不能直接处理模拟信号我们需要将其转换为数字信号才能进行处理 …

TFT-LCD电路设计之电源电路(Power IC)

POWER IC REVIEWS Power IC 利用经系统的输入电压生成5种工作电压&#xff0c;一般外界电压&#xff0c;NB为3.3V&#xff0c;Monitor为5V&#xff0c;TV一般为12V&#xff1b; ①VDD&#xff1a;各种逻辑IC电路工作电压&#xff0c;约3.3V左右&#xff0c;一般采用低压差线性…

MTK 安卓11 lcm AVDD及AVEE值修改

通常情况下lcm的avdd默认5.4v&#xff0c;某些屏幕对avdd要求不同&#xff0c;需要进行修改 驱动程序路径&#xff1a; kernel-4.14/drivers/misc/mediatek/lcm/lcm_pmic.c int display_bias_enable(void) {int ret 0;int retval 0;display_bias_regulator_init();/* set v…

LCD VGH -VGL

此电路可以输出AVDD电压&#xff1a;1.25*&#xff08;56.210&#xff09;/108.275V LX用于VGH 、 VGL&#xff1a;为了理解方便&#xff0c;下面将LX视为&#xff1a;0到10V&#xff0c;100khz&#xff0c;100%占空比的方波输出&#xff0c;二极管的压差视为VF1V VGL解析&…

TFT供电电路(VCOM/VGL/VGH/AVDD)设计原理

一般而言&#xff0c;一个 LCD 需要以下几种驱动电压&#xff1a; VCC – TFT 模组数字模块电源 AVDD – TFT 模组模拟模块电源 &#xff0c;电流要求可能会到20-30mA VGH – 门开启电压&#xff0c;一般为 VGH 12V~25V&#xff0c;IVGH<10mA VGL – 门关断电压&…