欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

java使用Zxing生成二维码(封装)

程序员文章站 2022-06-04 16:17:55
...

使用zxing生成二维码,有很多例子。当然,为了使用方便,前来封装了一下~下面就是它生成的二维码:

java使用Zxing生成二维码(封装)

目录结构如下:

java使用Zxing生成二维码(封装)

使用jar包是这个【网上很多,下载并添加到工程里】:

java使用Zxing生成二维码(封装)

不多说,直接贴码:

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"));
	}
}
嗯,就是这些。欢迎有不同观点或者更好办法的小伙伴留言。