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));
	}

}

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

相关推荐
子兮曰2 天前
jev-ultrafast 深度解析:7 秒订机票的浏览器 Agent 是如何炼成的
前端·后端·agent
小羊没烦恼!2 天前
微服务化的基石——持续集成
java·大数据·word·powerpoint·.net
子兮曰2 天前
Jev 爆发一周:7 秒 Agent 背后的 System One 生态与三场争议
前端·后端·ai编程
默_笙2 天前
🍙 给每个请求过安检:FastAPI 是怎么把校验写进类型注解的
python
俊昭喜喜里2 天前
java中的继承和多态的区别
java
小羊没烦恼!2 天前
初探性能优化——2个月到4小时的性能提升
java·开发语言·windows·算法·c#
前端小万2 天前
写公众号赚了 3000 块后,我做了一款叫 "一键成稿" 的软件
前端·微信小程序
爱勇宝2 天前
ZCode 开源 24 小时:一份没有历史的账本,回答不了"有没有偷代码"
前端·后端·chatglm (智谱)
qq_426003962 天前
启动playwright录制codegen生成自动化测试脚本
python·自动化
譕痕2 天前
JSONObject与JSONArray封装数据格式区别
java·json