java基于zxing生成二维码的工具类

java生成指定内容二维码工具类及其用法:

首先导入zxing相关pom依赖
XML 复制代码
        <!--二维码生成识别组件-->
        <dependency>
            <groupId>com.google.zxing</groupId>
            <artifactId>core</artifactId>
            <version>3.3.3</version>
        </dependency>
        <dependency>
            <groupId>com.google.zxing</groupId>
            <artifactId>javase</artifactId>
            <version>3.3.3</version>
        </dependency>
工具了如下:
java 复制代码
import com.google.zxing.BarcodeFormat;
import com.google.zxing.EncodeHintType;
import com.google.zxing.client.j2se.MatrixToImageWriter;
import com.google.zxing.common.BitMatrix;
import com.google.zxing.qrcode.QRCodeWriter;
import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel;
import com.shanjupay.common.domain.BusinessException;
import com.shanjupay.common.domain.CommonErrorCode;
import org.apache.commons.lang.StringUtils;

import javax.imageio.ImageIO;
import javax.servlet.ServletOutputStream;
import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.util.HashMap;

/**
 * <P>
 * 二维码工具类
 * </p>
 */
public class QRCodeUtil {
	/**
	 * 生成二维码
	 * @param content
	 * @param width
	 * @param height
	 * @return
	 */
	public String createQRCode(String content, int width, int height) throws IOException {
		String resultImage = "";
		//除了尺寸,传入内容不能为空
		if (!StringUtils.isEmpty(content)) {
			ServletOutputStream stream = null;
			ByteArrayOutputStream os = new ByteArrayOutputStream();
			//二维码参数
			@SuppressWarnings("rawtypes")
			HashMap<EncodeHintType, Comparable> hints = new HashMap<>();
			//指定字符编码为"utf-8"
			hints.put(EncodeHintType.CHARACTER_SET, "utf-8");
			//L M Q H四个纠错等级从低到高,指定二维码的纠错等级为M
			//纠错级别越高,可以修正的错误就越多,需要的纠错码的数量也变多,相应的二维吗可储存的数据就会减少
			hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.M);
			//设置图片的边距
			hints.put(EncodeHintType.MARGIN, 1);

			try {
				//zxing生成二维码核心类
				QRCodeWriter writer = new QRCodeWriter();
				//把输入文本按照指定规则转成二维吗
				BitMatrix bitMatrix = writer.encode(content, BarcodeFormat.QR_CODE, width, height, hints);
				//生成二维码图片流
				BufferedImage bufferedImage = MatrixToImageWriter.toBufferedImage(bitMatrix);
				//输出流
				ImageIO.write(bufferedImage, "png", os);
				/**
				 * 原生转码前面没有 data:image/png;base64 这些字段,返回给前端是无法被解析,所以加上前缀
				 */
				resultImage = new String("data:image/png;base64," + EncryptUtil.encodeBase64(os.toByteArray()));
				return resultImage;
			} catch (Exception e) {
				e.printStackTrace();
				throw new BusinessException(CommonErrorCode.E_200007);
			} finally {
				if (stream != null) {
					stream.flush();
					stream.close();
				}
			}
		}
		return null;
	}


	public static void main(String[] args) throws IOException {
		QRCodeUtil qrCodeUtil = new QRCodeUtil();
		//生成一个指向百度搜索的二维码。(将返回结果复制到浏览器地址框即可出现二维码图片)
		System.out.println(qrCodeUtil.createQRCode("https://www.baidu.com/", 200, 200));
	}

}

点个关注呀,持续更新有用的知识................

相关推荐
m0dw13 小时前
vue懒加载
前端·javascript·vue.js·typescript
_w_z_j_13 小时前
C++11----列表初始化和initializer_list
开发语言·c++
国家不保护废物13 小时前
手写 Vue Router,揭秘路由背后的魔法!🔮
前端·vue.js
闲人编程13 小时前
深入浅出Transformer:使用Hugging Face库快速上手NLP
python·深度学习·自然语言处理·nlp·transformer·hugging face·codecapsule
冬天的雪200813 小时前
java内存性能优化工具Mat
java·开发语言
风雨同舟的代码笔记13 小时前
AI上下文工程:智能体系统的核心竞争力——超越Prompt Engineering的新范式
后端
Le1Yu13 小时前
消息队列以及RabbitMQ的使用
java·开发语言
程序新视界13 小时前
什么是MySQL JOIN查询的驱动表和被驱动表?
数据库·后端·mysql
linweidong13 小时前
理想汽车Java后台开发面试题及参考答案(下)
jvm·spring boot·spring cloud·rpc·虚拟机·feign·二叉树排序