java:一键生成二维码工具类
前言:本工具选择了Zxing,他是一个开源的,使用java实现多种格式的1D/2D条码图像处理库,
1.pom添加依赖
<!-- 二维码生成&识别组件 --> <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> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-lang3</artifactId> </dependency>
2.二维码生成工具类
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 org.apache.commons.lang3.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; public class QRCodeUtil { /** * 生成二维码 * * @param content 二维码对应的URL * @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 RuntimeException("生成二维码出错"); } finally { if (stream != null) { stream.flush(); stream.close(); } } } return null; } }
3.附加解码工具类内方法
public static String encodeBase64(byte[] bytes){ String encoded = Base64.getEncoder().encodeToString(bytes); return encoded; }
4.调用工具类
QRCodeUtil qrCodeUtil = new QRCodeUtil(); System.out.println(qrCodeUtil.createQRCode("http://address:port/url", 200, 200));
5.结果分析:
最后一行黑字复制下来直接贴在浏览器,扫码后即可跳转到上述具体路径
6.小tips:前端直接用img标签接收即可展示效果
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端