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


在这里插入图片描述


或者微信搜一搜 “砷碲的学识仓库”,发送 “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"));
	}
	
}

代码运行后效果如下

在这里插入图片描述



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

猜你喜欢

转载自blog.csdn.net/qq_41806966/article/details/129264363
今日推荐