> 文章列表 > Java简单的生成/解析二维码(zxing qrcode)

Java简单的生成/解析二维码(zxing qrcode)

Java简单的生成/解析二维码(zxing qrcode)

Hi I’m Shendi


Java简单的生成/解析二维码(zxing qrcode)

在之前使用 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

Java简单的生成/解析二维码(zxing qrcode)

或者微信搜一搜 “砷碲的学识仓库”,发送 “100001” 直接下载jar包

生成二维码

简单的三步就可以生成二维码

  1. 创建QRCodeWriter
  2. 创建二维码
  3. 输出二维码

例如将二维码输出到 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"));}}

代码运行后效果如下

Java简单的生成/解析二维码(zxing qrcode)

如果要将二维码变成字节数组,可以使用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());}}

运行效果如下

Java简单的生成/解析二维码(zxing qrcode)

END