通过后台生成二维码返回到前端,进行显示,二维码里面可以放内容、跳转链接等等
需要引入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>
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());
}
}
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);
}
}
执行后会在对应目录生成一个二维码
可以通过手机扫码,或者解析
PC端解析地址:https://cli.im/deqr
结果
网站: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==
前端: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>
结束
如果觉得不错,和作者交个朋友 请喝杯咖啡以示感谢
生活不可能像你想象得那么好,但也不会像你想象得那么糟。我觉得人的脆弱和坚强都超乎自己的想象。有时,我可能脆弱得一句话就泪流满面,有时,也发现自己咬着牙走了很长的路。
参考文章:https://blog.csdn.net/gisboygogogo/article/details/86036656
参考代码:https://gitee.com/y_project/RuoYi-Vue