Java实现生成二维码并解析 Google-Zxing

Java实现生成二维码并解析 Google-Zxing

1、需求概述

通过后台生成二维码返回到前端,进行显示,二维码里面可以放内容、跳转链接等等

1.1 引入依赖

需要引入Google的zxing
至于为什么要引入,请自行百度,或参考该文章:https://www.oschina.net/p/zxing?hmsr=aladdin1e1

        <dependency>
        	<groupId>com.google.zxinggroupId>
        	<artifactId>coreartifactId>
        	<version>3.3.0version>
    	dependency>
    	<dependency>
        	<groupId>com.google.zxinggroupId>
        	<artifactId>javaseartifactId>
        	<version>3.3.0version>
    	dependency>

1.2 编写工具类

先实现功能,根据需求更改Code即可

Base64 工具类 这里用的也是 ruoyi 开源的代码
https://gitee.com/y_project/RuoYi-Vue/blob/master/ruoyi-common/src/main/java/com/ruoyi/common/utils/sign/Base64.java
复制代码到项目中即可

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;

import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.nio.file.FileSystems;
import java.nio.file.Path;

/**
 * 二维码生成工具类
 * @author gcq
 * @Create 2021-06-01
 */
public class QRCodeGeneratorUtils {


    /**
     * 二维码生成为位置
     */
    private static final String QR_CODE_IMAGE_PATH = "C:/Users/lpc17/Desktop/数字平台/二维码工具类/mycode.png";

    /**
     * 生成图片二维码
     * @param text 二维码扫描后内容 可以是链接 文字
     * @param width 宽度
     * @param height 高度
     * @param filePath 二维码生成地址
     * @throws WriterException
     * @throws IOException
     */
    public static void generateQRCodeImage(String text, int width, int height, String filePath) throws WriterException, IOException {
        QRCodeWriter qrCodeWriter = new QRCodeWriter();

        BitMatrix bitMatrix = qrCodeWriter.encode(text, BarcodeFormat.QR_CODE, width, height);

        Path path = FileSystems.getDefault().getPath(filePath);

        MatrixToImageWriter.writeToPath(bitMatrix, "PNG", path);
    }

    /**
     * 生成字节数组
     * @param text 二维码扫描后内容 可以是链接 文字
     * @param width 宽度
     * @param height 高度
     * @return
     * @throws WriterException
     * @throws IOException
     */
    public static byte[] getQRCodeImage(String text, int width, int height) throws WriterException, IOException {
        QRCodeWriter qrCodeWriter = new QRCodeWriter();
        BitMatrix bitMatrix = qrCodeWriter.encode(text, BarcodeFormat.QR_CODE, width, height);
        ByteArrayOutputStream pngOutputStream = new ByteArrayOutputStream();
        MatrixToImageWriter.writeToStream(bitMatrix, "PNG", pngOutputStream);
        byte[] pngData = pngOutputStream.toByteArray();
        return pngData;
    }

    /**
     * 生成base64编码
     * @param text 二维码扫描后内容 可以是链接 文字
     * @param width 宽度
     * @param height 高度
     * @return base64的二维码
     * @throws WriterException
     * @throws IOException
     */
    public static String getQRCodeBase64(String text, int width, int height) throws WriterException, IOException {
        QRCodeWriter qrCodeWriter = new QRCodeWriter();
        BitMatrix bitMatrix = qrCodeWriter.encode(text, BarcodeFormat.QR_CODE, width, height);
        ByteArrayOutputStream pngOutputStream = new ByteArrayOutputStream();
        MatrixToImageWriter.writeToStream(bitMatrix, "PNG", pngOutputStream);
        // 将byte转换成base64编码
        return Base64.encode(pngOutputStream.toByteArray());
    }
}

1.3、测试类

import com.google.zxing.WriterException;
import org.junit.Test;

import java.io.IOException;

public class ZxingKit {
    /**
     * 二维码生成地址,需改成本机地址 目录需要提前创建好,图片不需要提前创建,会自动生成
     */
    private static final String QR_CODE_IMAGE_PATH = "C:/Users/lpc17/Pictures/test/mycode.png";

    /**
     * 功能一:生成二维码图片
     */
    @Test
    public void generateQRcodeImage() throws IOException, WriterException {
        QRCodeGeneratorUtils.generateQRCodeImage("Talk is cheap,showme the code", 350, 350, QR_CODE_IMAGE_PATH);
        System.out.println("生成成功");
    }
    /**
     *  功能二:生成二维码 以byte数组形式进行返回
     */
    @Test
    public void generateQRcodeByte() throws IOException, WriterException {
        byte[] qrCodeImage = QRCodeGeneratorUtils.getQRCodeImage("Talk is cheap,showme the code", 350, 350);
        System.out.println("二维码生成成功,byte= " + qrCodeImage);
    }
    /**
     * 功能三:生成二维码 以base64编码形式进行返回
     */
    @Test
    public void generateQRcodeBase64() throws IOException, WriterException {
        String qrCodeBase64 = QRCodeGeneratorUtils.getQRCodeBase64("Talk is cheap,showme the code", 350, 350);
        System.out.println("二维码生成成功,base64= " + qrCodeBase64);
    }
}

1.3.1 生成二维码图片

执行后会在对应目录生成一个二维码
Java实现生成二维码并解析 Google-Zxing_第1张图片
可以通过手机扫码,或者解析
PC端解析地址:https://cli.im/deqr
Java实现生成二维码并解析 Google-Zxing_第2张图片

1.3.2 返回字节数组

不多概述…
有需要可进行更改
在这里插入图片描述

1.3.3 返回Base64编码,可在页面上显示

结果
Java实现生成二维码并解析 Google-Zxing_第3张图片
网站:http://www.jsons.cn/img2base64/html
代码:
复制到网站文本框中即可显示

data:image/jpeg;base64,iVBORw0KGgoAAAANSUhEUgAAAV4AAAFeAQAAAADlUEq3AAABaUlEQVR42u3aUbKDIAyF4cywAJfk1l1SF3BnqBCC2HLbPh5mfh6cKl+fIjFBLf8+/gwMBoPBYDBYEB/WRs6P83BsOdt+zraxgeVxP62ujn0yC9bFJbRbweEcl1PwUrgs2Ig0eEU8ZNsNvBLuKdfS+eOR8k/5GSyDe9lzeMzb4UuNBJbB1yjhrms1yKc+BSyDK+nFTgS55d3zGlgfm1+LcjX5tUqmqxushWvTXyf2+uuR+qOy9JLgJfDpUsxaGtzrggULYm84POZtAydugXmVCxbDnll7ovXZuAXeC1ewHPat095wDCt0SL5gYXylXC92gni4/83PYBnsLWNfq9fbjLGNBAvj1/bfYpm2rhKsjt+24G4Z+Nt+HVgAD6ftoemk/jdnsD7uLxNjC67dAttkExWsjHt8W8zNDLwUrjVrHjYCUv709h8sg8fPom6v8WcLFqyHh7Ln3onYZAMHrIf5/hkMBoPBYPCC+Al3upF/ixdMtAAAAABJRU5ErkJggg==

Java实现生成二维码并解析 Google-Zxing_第4张图片

Java实现生成二维码并解析 Google-Zxing_第5张图片

1.4 前端显示二维码

前端:Vue + Element-ui
后端:SpringBoot

后端代码

基本上都是引用了之前定义的工具类
1、返回Vo 这里使用的是 ruoyi 开源的框架
https://gitee.com/y_project/RuoYi-Vue/blob/master/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/AjaxResult.java
2、也可以自行进行更改

    @GetMapping("/generateQRcodeBase64/{uuid}")
    public AjaxResult generateQRcodeBase64(@PathVariable("uuid") String uuid)
    {
        String info = "https://www.baidu.com/?uuid=" + uuid;
        String encode = null;
        try {
            // base64编码后的图片
            encode = QRCodeGeneratorUtils.getQRCodeBase64(info, 360, 360);
        } catch (WriterException e) {
            System.out.println("Could not generate QR Code, WriterException :: " + e.getMessage());
            e.printStackTrace();
        } catch (IOException e) {
            System.out.println("Could not generate QR Code, IOException :: " + e.getMessage());
        }
        return AjaxResult.success(encode);
    }

前端代码
1、发送请求至后端,拿到返回的结果【base64编码】 在页面上拼接进行显示即可
具体请求过程,在此不概述,如有需要加我联系方式进行沟通即可,WX java6565 备注CSDN

              <el-image
                style="width: 200px; height: 200px"
                :src="'data:image/jpeg;base64,' + qrcodeimg"
                fit="fill"
              ></el-image>

页面结果:
Java实现生成二维码并解析 Google-Zxing_第6张图片

结束
如果觉得不错,和作者交个朋友 请喝杯咖啡以示感谢
Java实现生成二维码并解析 Google-Zxing_第7张图片
生活不可能像你想象得那么好,但也不会像你想象得那么糟。我觉得人的脆弱和坚强都超乎自己的想象。有时,我可能脆弱得一句话就泪流满面,有时,也发现自己咬着牙走了很长的路。

参考文章:https://blog.csdn.net/gisboygogogo/article/details/86036656
参考代码:https://gitee.com/y_project/RuoYi-Vue

你可能感兴趣的:(第三方工具,java)