java生成二维码(idea)
1. 环境需求
-
idea开发软件
-
maven
-
tomacat
-
maven
环境搭建
-
创建java项目
-
导入maven包
-
后添加web程序
-
对pomxml(maven文件进行导入包,之后导入servlet依赖)
<packaging>war</packaging> <dependencies> <!-- https://mvnrepository.com/artifact/jakarta.servlet/jakarta.servlet-api --> <dependency> <groupId>jakarta.servlet</groupId> <artifactId>jakarta.servlet-api</artifactId> <version>6.0.0</version> <scope>provided</scope> </dependency> </dependencies>
-
后添加tomcat的具体配置
-
导入Google的zxing开源库
<dependency> <groupId>com.google.zxing</groupId> <artifactId>core</artifactId> <version>3.1.0</version> </dependency> <dependency> <groupId>com.google.zxing</groupId> <artifactId>javase</artifactId> <version>3.1.0</version> </dependency> <dependency> <groupId>commons-lang</groupId> <artifactId>commons-lang</artifactId> <version>2.6</version> </dependency>
-
-
2.敲码
1.对前端xml的文件进行编写
<head>
<title>java生成二维码第一版</title>
<style>
#div1{
margin-left: 50px;
}
</style>
</head>
<body>
<div id="div1">
<h1 >运用谷歌开源zxing开源库生成普通二维码</h1>
<hr/>
请输入你要输入的信息<br>
输入账户名称<input type="text" id="url"><br>
<button onclick="generateQRcode()">生成二维码</button>
<hr/>
<img id="qrcodeImg"/>
<script>
function generateQRcode(){
let irl=document.getElementById("url").value
let qrcodeImg =document.getElementById("qrcodeImg")
// 设置img的标签标签的src属性
qrcodeImg.src="/myqrcode_war_exploded/generate?url="+url
// 请求服务器所发送的图片
}
2.对后端java进行编写进行
二维码参数
首先需要一个Map集合 来储存二维码的基础参数,创建一个储存参数的map对象
Map map =new HashMap();
所储存的数据如下
-
设置二维码的误差校正级别
map.put(EncodeHintType.ERROR_CORRECTION,value);/*ERROR_CORRECTION,错误校正*/
-
设置二维码的字符集
map.put(EncodeHintType.CHARACTER_SET,value);/*设置其字符集,从前端input中国获得字符串,转换成字符集*/
-
设置二维码周围的留白
map.put(EncodeHintType.MARGIN,value);/*margin用来决定留白边框*/
其中value用来填充参数,后期修改
-
-
误差校正级别:对于黑白二维码,可选值为’L’(7%),‘M’(15%),‘Q’(25%),‘H’(30%),表示二维码允许破损的最大容错率,根据设计的设置的级别,可以尝试修复二维码的相关数据,
-
在二维码生成过程中,可能会出现损坏或缺失的情况,例如打印时墨水缺失(在此系统中无问题),图像压缩,摄像头拍摄角度不对等,误差校正嘛就是为了解决该问题。
-
map.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.H);/*ERROR_CORRECTION,错误校正*/
//ErrorCorrectionLevel.H来表示其误差校正的级别代码
创建二维码对象
- MultiFormatWriter(多格式写入程序)是一个便捷的生成二维码类
MultiFormatWriter writer =new MultiFormatWriter();
-
writer.encode(url, BarcodeFormat.QR_CODE,300,300,map);
BarcodeFormat(码格式):
BarcodeFormat是一个枚举类,通过它来指定二维码的格式
QR code:生活中最常见的二维码
AZTEC:Aztec的矩阵大小在15 X 15和151 X 151之间变化。每个最小单位非黑即白。它独特的位于正中的模式识别标志和安置算法使Aztec看起来像个旋涡一样。(通常用于机票和其他旅行文档以及汽车登记文档。还可以用于医院的患者识别,或识别药物、样本以及与特定患者相关的其他物品。)
Codabar:(广泛用于需要序列号的领域,如血库、门到门交货服务订单以及会员卡片管理。)
CODE 39:
EAN码:所有在市场流通的商品
int width= BitMatrix.getWidth();
int height = BitMatrix.getHeight();
//获取矩阵的宽和高
BufferedImage image =new BufferedImage(width,height,BufferedImage.TYPE_INT_ARGB);
for (int x = 0; x < width; x++) {
for (int y = 0; y < height; y++) {
image.setRGB(x,y,BitMatrix.get(x,y) ? 0xFF000000 : 0xFFFFFFFF);
}
}
ServletOutputStream out = response.getOutputStream();
ImageIO.write(image,"png",out);
out.flush();
out.close();
要获取BitMatrix的对象的长宽高,用于图像进行for循环的便利,
image.setRGB(x,y,BitMatrix.get(x,y) ? 0xFF000000 : 0xFFFFFFFF);
上方代码代码是用户BitMatrix的矩阵 true为白色(0xFF000000)false为(0xFFFFFFFF)