java使用Zxing生成二维码(封装)
程序员文章站
2022-06-04 16:17:55
...
使用zxing生成二维码,有很多例子。当然,为了使用方便,前来封装了一下~下面就是它生成的二维码:
目录结构如下:
使用jar包是这个【网上很多,下载并添加到工程里】:
不多说,直接贴码:
package com.lvfng.tool;
import java.awt.image.BufferedImage;
import java.io.File;
import java.nio.file.Path;
import java.util.HashMap;
import java.util.Map;
import javax.imageio.ImageIO;
import com.google.zxing.BarcodeFormat;
import com.google.zxing.BinaryBitmap;
import com.google.zxing.EncodeHintType;
import com.google.zxing.MultiFormatReader;
import com.google.zxing.MultiFormatWriter;
import com.google.zxing.Result;
import com.google.zxing.client.j2se.BufferedImageLuminanceSource;
import com.google.zxing.client.j2se.MatrixToImageWriter;
import com.google.zxing.common.BitMatrix;
import com.google.zxing.common.HybridBinarizer;
import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel;
/*
* 语言:java 工具jar:zxing 版本:3.2.1
* 使用前需要导入jar包或者依赖
* 生成和解码QR工具类
* 参考自:https://www.cnblogs.com/mr-wuxiansheng/p/7256507.html
*/
public class QR {
/*
* 生成QR图片
* IN:宽,高,图片格式,输出文件路径,内容
* OUT:生成状态
*/
public static String createQR(int width,int height,String format,String outPath,String content) {
HashMap ha = new HashMap();
ha.put(EncodeHintType.CHARACTER_SET, "utf-8"); //编码格式
ha.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.M); //纠错等级【L,M,Q,H】
ha.put(EncodeHintType.MARGIN, 2);
try {
BitMatrix bitMatrix = new MultiFormatWriter().encode(content,BarcodeFormat.QR_CODE, width, height, ha);
Path file = new File(outPath).toPath();
MatrixToImageWriter.writeToPath(bitMatrix, format, file);
} catch (Exception e) {
e.printStackTrace();
return "ERROR";
}
return "SUCCESS";
}
/*
* 解析QR码
* IN:被解析图片路径
* OUT:Map集合:
* key:RESULT 》》 总结果集,未被解析
* FORMAT 》》 被解析的二维码格式
* TEXT 》》 二维码中含有的文本内容
* STATE 》》 解析状态,成功或失败
*/
public static Map analysisQR(String path) {
Map resMap = new HashMap(); //返回出去的map集合
try {
MultiFormatReader formatReader = new MultiFormatReader();
File file = new File(path);
BufferedImage image = ImageIO.read(file); //读取文件
BinaryBitmap binaryBitmap = new BinaryBitmap(new HybridBinarizer(new BufferedImageLuminanceSource(image)));
HashMap hints = new HashMap();
hints.put(EncodeHintType.CHARACTER_SET, "utf-8"); // 字符集
Result result = formatReader.decode(binaryBitmap, hints);
resMap.put("RESULT", result); //总结果集
resMap.put("FORMAT", result.getBarcodeFormat()); //被解析的二维码格式
resMap.put("TEXT", result.getText()); //被解析的二维码含有的文本内容
resMap.put("STATE", "SUCCESS"); //解析状态
} catch (Exception e) {
e.printStackTrace();
resMap.put("STATE", "ERROR");
}
return resMap;
}
}
下面是测试类:
package com.lvfng.test;
import java.util.Map;
import com.lvfng.tool.QR;
public class CreateQR {
public static void main(String[] args) {
//生成QR
String cqr = QR.createQR(300, 300, "png", "E:/360/test.png", "我是一个QR码");
System.out.println("生成状态:" + cqr);
//解析QR
Map m = QR.analysisQR("E:/360/test.png");
System.out.println("解析状态:" + m.get("STATE"));
System.out.println("二维码内容:" + m.get("TEXT"));
}
}
嗯,就是这些。欢迎有不同观点或者更好办法的小伙伴留言。