Java简单的生成/解析二维码(zxing qrcode)
Posted HackShendi
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java简单的生成/解析二维码(zxing qrcode)相关的知识,希望对你有一定的参考价值。
Hi I’m Shendi
在之前使用 qrcode.js 方式生成二维码,但在不同设备上难免会有一些兼容问题,于是改为后端(Java)生成二维码图片
这里使用 Google 的 zxing包
Jar包引入
Github:https://github.com/zxing/zxing
通过 Maven 引入
<dependency>
<groupId>com.google.zxing</groupId>
<artifactId>core</artifactId>
<version>3.5.1</version>
</dependency>
<dependency>
<groupId>com.google.zxing</groupId>
<artifactId>javase</artifactId>
<version>3.5.1</version>
</dependency>
也可以直接在 maven 仓库中下载 jar(javase和core两个)
例如阿里云maven仓库
https://developer.aliyun.com/mvn/search
或者微信搜一搜 “砷碲的学识仓库”,发送 “100001” 直接下载jar包
生成二维码
简单的三步就可以生成二维码
- 创建QRCodeWriter
- 创建二维码
- 输出二维码
例如将二维码输出到 H:/1.png,代码如下
import java.io.IOException;
import java.nio.file.FileSystems;
import java.nio.file.Path;
import com.google.zxing.BarcodeFormat;
import com.google.zxing.WriterException;
import com.google.zxing.client.j2se.MatrixToImageWriter;
import com.google.zxing.common.BitMatrix;
import com.google.zxing.qrcode.QRCodeWriter;
/** @author Shendi */
public class Test
public static void main(String[] args) throws Exception
QRCodeWriter qcWrite = new QRCodeWriter();
// encode函数的四个参数分别是 内容,格式,宽,高
BitMatrix bm = qcWrite.encode("https://sdpro.top", BarcodeFormat.QR_CODE, 500, 500);
// 输出到 H:/1.png, writeToPath有三个参数,(BitMatrix,格式,输出地址)
MatrixToImageWriter.writeToPath(bm, "PNG", Path.of("H:/1.png"));
代码运行后效果如下
如果要将二维码变成字节数组,可以使用MatrixToImageWriter的writeToStream,输出到流
二维码接口
例如传递一个字符串将此字符串变为二维码的形式输出(http),这里使用SpringBoot的形式写的接口,供直接复制使用,代码如下
/**
* 生成二维码.
* @param content 二维码内容
* @param req 请求
* @param resp 响应
*/
@GetMapping("/code")
public void create(String content, HttpServletRequest req, HttpServletResponse resp)
QRCodeWriter qcWrite = new QRCodeWriter();
try
BitMatrix bm = qcWrite.encode(content, BarcodeFormat.QR_CODE, 500, 500);
// 设置响应为图片数据
resp.setContentType("image/png");
MatrixToImageWriter.writeToStream(bm, "PNG", resp.getOutputStream());
catch (Exception e)
e.printStackTrace();
解析二维码
通过 QRCodeReader 解析二维码,例如解析刚刚生成的二维码,代码如下
import java.awt.image.BufferedImage;
import java.io.File;
import javax.imageio.ImageIO;
import com.google.zxing.BinaryBitmap;
import com.google.zxing.Result;
import com.google.zxing.client.j2se.BufferedImageLuminanceSource;
import com.google.zxing.common.HybridBinarizer;
import com.google.zxing.qrcode.QRCodeReader;
/** @author Shendi */
public class Test
public static void main(String[] args) throws Exception
QRCodeReader qcReader = new QRCodeReader();
// 这里的ImageIO也可以read输入流
BufferedImage img = ImageIO.read(new File("H:/1.png"));
BinaryBitmap bitmap = new BinaryBitmap(new HybridBinarizer(new BufferedImageLuminanceSource(img)));
Result result = qcReader.decode(bitmap);
System.out.println("二维码内容: " + result.getText());
运行效果如下
END
以上是关于Java简单的生成/解析二维码(zxing qrcode)的主要内容,如果未能解决你的问题,请参考以下文章
java zxing实现二维码生成和解析zxing实现二维码生成和解析