这个案例是利用随机字符生成一个网站url的二维码,也可以生成指定网址的二维码,非常方便
话不多说,首先源码给各位看官奉上!
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 com.google.zxing.qrcode.encoder.QRCode;
import org.junit.Test;
import java.io.*;
import java.nio.file.FileSystems;
import java.nio.file.Path;
/**
* @Author: Administrator
* Date: 2021/12/16 15:18
* @Version:
* @Description:
*/
public class TwoDimensionalCode {
@Test
public void test() throws IOException, WriterException {
FileReader reader = new FileReader("D://CSDN/CSDNProject/ZxingProject/DimensionCode.txt");
StringBuilder sb = new StringBuilder();
int c;
while ((c = reader.read()) != -1) {
sb.append((char) c);
}
String s = new String(sb);
String[] split = s.split("\r\n");
for (String a:split) {
String fileName = "D:/CSDN/CSDNProject/ZxingProject/" + a + ".png";
File file = new File(fileName);
file.createNewFile();
generateCode(a, 600, 600, "D://CSDN/CSDNProject/ZxingProject/" + a + ".png");
}
}
/**
* @param text:二维码中表示的文本 https://item.csdn.com/xxx.html
* @param width:二维码宽度
* @param height:二维码高度
* @param filePath:保存二维码图片的位置
*/
public void generateCode(String text, int width, int height, String filePath) throws WriterException, IOException {
text = "https://item.csdn.com/"+text+".html";
/*
* 创建QRCodeWriter类对象,此类中包含一个encode方法返回值为BitMatrix类型,BitMatrix类表示一个封装的二维矩阵。
* 其参数为text二维码表示文本,BarcodeFormat Enum类,以及宽度width,高度height。
*/
QRCodeWriter qrCodeWriter = new QRCodeWriter();
BitMatrix bitMatrix = qrCodeWriter.encode(text, BarcodeFormat.QR_CODE, width, height);
Path path = FileSystems.getDefault().getPath(filePath); //获取path对象,将
/**
* 获取getPath对象源码,getPath接口位于FileSystem中,public abstract Path getPath(String first, String... more);
* 其中getPath方法被WindowsFileSystemProvider方法实现,下面是其实现代码
* @Override
* public final Path getPath(String first, String... more) {
* String path;
* if (more.length == 0) {
* path = first;
* } else {
* StringBuilder sb = new StringBuilder();
* sb.append(first);
* for (String segment: more) {
* if (segment.length() > 0) {
* if (sb.length() > 0)
* sb.append('\\');
* sb.append(segment);
* }
* }
* path = sb.toString();
* }
* return WindowsPath.parse(this, path);
* }
*/
// 最后一步调用MatrixToImageWriter将二维码按照png的形式写入文件中。
MatrixToImageWriter.writeToPath(bitMatrix, "png", path);
}
}
之后开始逐层分析,首先我们采用的是谷歌的zxing包用来生成二维码。com.google.zxing
导包的方法我使用的是Maven导包工具,下面是依赖。
<dependency>
<groupId>com.google.zxing</groupId>
<artifactId>core</artifactId>
<version>3.3.0</version>
</dependency>
<dependency>
<groupId>com.google.zxing</groupId>
<artifactId>javase</artifactId>
<version>3.3.0</version>
</dependency>
如果你不会用Maven导包的话,有两种解决办法第一种就是学习如何使用Maven导包,Maven是非常重要且高效的包管理软件,是开发中必不可少的。还有一种方法可以手动下载所需要的包到资源文件下面也可以!
导包完成后进入下面的环节,编写生成二维码方法的代码:
其中参数有四个分别为:text:二维码中表示的文本,width:二维码宽度,height:二维码高度,filePath:保存二维码图片的位置。
因为我们的目的是扫描二维码后访问根据字符随机生成的网站,所以需要首先对字符串进行更改,将其与url结合。
text = "https://item.csdn.com/"+text+".html";
之后我们创建QRCodeWriter类对象,生成一个二维矩阵用来存放二维码生成信息。
QRCodeWriter qrCodeWriter = new QRCodeWriter();
BitMatrix bitMatrix = qrCodeWriter.encode(text, BarcodeFormat.QR_CODE, width, height);
之后调用FileSystems.getDefault().getPath(filePath);
方法获得path对象,这里使用的是NIO如果对NIO不了解的可以看我上一篇博客。
最后一步调用MatrixToImageWriter将二维码按照png的形式写入文件中。
MatrixToImageWriter.writeToPath(bitMatrix, "png", path);
下面是方法调用部分:
首先使用字符输入流读取txt文件,将文件存入StringBuilder类对象中,之后再将其转换为String类型,调用split()方法将其分成String数组,创建三个图片文件之后调用generateCode方法完成图片生成。
public void test() throws IOException, WriterException {
FileReader reader = new FileReader("D://CSDN/CSDNProject/ZxingProject/DimensionCode.txt");
StringBuilder sb = new StringBuilder();
int c;
while ((c = reader.read()) != -1) {
sb.append((char) c);
}
String s = new String(sb);
String[] split = s.split("\r\n");
for (String a:split) {
String fileName = "D:/CSDN/CSDNProject/ZxingProject/" + a + ".png";
File file = new File(fileName);
file.createNewFile();
generateCode(a, 600, 600, "D://CSDN/CSDNProject/ZxingProject/" + a + ".png");
}
下面是效果图:
感谢您的阅读,如果本篇文章对您有帮助,欢迎点赞,关注,您的阅读是我莫大的鼓励!