java怎么生成qrCode
发表于:2025-02-04 作者:千家信息网编辑
千家信息网最后更新 2025年02月04日,本篇内容主要讲解"java怎么生成qrCode",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"java怎么生成qrCode"吧!参数类:import com
千家信息网最后更新 2025年02月04日java怎么生成qrCode
本篇内容主要讲解"java怎么生成qrCode",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"java怎么生成qrCode"吧!
参数类:
import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel;/** * */public class QRCodeParams { private String txt; // 二维码内容 private String qrCodeUrl; // 二维码网络路径 private String logoPath; // logo图片 private Integer width = 300; // 二维码宽度 private Integer height = 300; // 二维码高度 private Integer onColor = 0xFF000000; // 前景色 private Integer offColor = 0xFFFFFFFF; // 背景色 private Integer margin = 1; // 白边大小,取值范围0~4 private ErrorCorrectionLevel level = ErrorCorrectionLevel.L; // 二维码容错率 public String getTxt() { return txt; } public void setTxt(String txt) { this.txt = txt; } public Integer getWidth() { return width; } public void setWidth(Integer width) { this.width = width; } public Integer getHeight() { return height; } public void setHeight(Integer height) { this.height = height; } public String getQrCodeUrl() { return qrCodeUrl; } public void setQrCodeUrl(String qrCodeUrl) { this.qrCodeUrl = qrCodeUrl; } public String getLogoPath() { return logoPath; } public void setLogoPath(String logoPath) { this.logoPath = logoPath; } public Integer getOnColor() { return onColor; } public void setOnColor(Integer onColor) { this.onColor = onColor; } public Integer getOffColor() { return offColor; } public void setOffColor(Integer offColor) { this.offColor = offColor; } public ErrorCorrectionLevel getLevel() { return level; } public void setLevel(ErrorCorrectionLevel level) { this.level = level; } public Integer getMargin() { return margin; } public void setMargin(Integer margin) { this.margin = margin; }}
图标配置类:
import java.awt.BasicStroke;import java.awt.Color;import java.awt.Graphics2D;import java.awt.geom.RoundRectangle2D;import java.awt.image.BufferedImage;import java.io.IOException;import java.net.URL;import java.net.URLConnection;import javax.imageio.ImageIO;/** */public class QRLogoConfig { /** * 设置 logo * * @param matrixImage * 源二维码图片 * @return 返回带有logo的二维码图片 * @throws IOException * @author Administrator sangwenhao */ public BufferedImage LogoMatrix(BufferedImage matrixImage, String logoPath) throws IOException { /** * 读取二维码图片,并构建绘图对象 */ Graphics2D g2 = matrixImage.createGraphics(); int matrixWidth = matrixImage.getWidth(); int matrixHeigh = matrixImage.getHeight(); int num = logoPath.indexOf('/', 8); String u = logoPath.substring(0, num); URL url = new URL(logoPath); URLConnection connection = url.openConnection(); connection.setDoOutput(true); connection.setRequestProperty("referer", u); /** * 读取Logo图片 */ BufferedImage logo = ImageIO.read(connection.getInputStream()); // 开始绘制图片 g2.drawImage(logo, matrixWidth / 5 * 2, matrixHeigh / 5 * 2, matrixWidth / 5, matrixHeigh / 5, null);// 绘制 BasicStroke stroke = new BasicStroke(5, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND); g2.setStroke(stroke);// 设置笔画对象 // 指定弧度的圆角矩形 RoundRectangle2D.Float round = new RoundRectangle2D.Float( matrixWidth / 5 * 2, matrixHeigh / 5 * 2, matrixWidth / 5, matrixHeigh / 5, 20, 20); g2.setColor(Color.white); g2.draw(round);// 绘制圆弧矩形 // 设置logo 有一道灰色边框 BasicStroke stroke2 = new BasicStroke(1, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND); g2.setStroke(stroke2);// 设置笔画对象 RoundRectangle2D.Float round2 = new RoundRectangle2D.Float( matrixWidth / 5 * 2 + 2, matrixHeigh / 5 * 2 + 2, matrixWidth / 5 - 4, matrixHeigh / 5 - 4, 20, 20); g2.setColor(new Color(128, 128, 128)); g2.draw(round2);// 绘制圆弧矩形 g2.dispose(); matrixImage.flush(); return matrixImage; }}
异常类:
/** * */public class QRParamsException extends Exception { private static final long serialVersionUID = 8837582301762730656L; public QRParamsException() { } // 用来创建无参数对象 public QRParamsException(String message) { // 用来创建指定参数对象 super(message); // 调用超类构造器 }}
工具处理类:
import java.awt.Color;import java.awt.Graphics2D;import java.awt.Image;import java.awt.image.BufferedImage;import java.io.ByteArrayOutputStream;import java.io.File;import java.io.IOException;import java.util.Hashtable;import javax.imageio.ImageIO;import org.apache.commons.lang3.StringUtils;import com.google.zxing.BarcodeFormat;import com.google.zxing.EncodeHintType;import com.google.zxing.MultiFormatWriter;import com.google.zxing.common.BitMatrix;import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel;/** * */public class QRCodeUtil { private static int width = 500; // 二维码宽度 private static int height = 500; // 二维码高度 private static int onColor = 0xFF000000; // 前景色 private static int offColor = 0xFFFFFFFF; // 背景色 private static int margin = 1; // 白边大小,取值范围0~4 private static ErrorCorrectionLevel level = ErrorCorrectionLevel.L; // 二维码容错率 /** * 生成二维码 * * @param params * QRCodeParams属性:txt、fileName、filePath不得为空; * @throws QRParamsException */ public static ByteArrayOutputStream generateQRImage(QRCodeParams params) throws QRParamsException { if (params == null || params.getTxt() == null) { throw new QRParamsException("参数错误"); } try { initData(params); String txt = params.getTxt(); if (StringUtils.isNoneBlank(params.getLogoPath())) { return generateQRImage(txt, params.getLogoPath()); } else { return generateQRImage(txt); } } catch (Exception e) { e.printStackTrace(); } return null; } /** * 生成二维码 * * @param txt * //二维码内容 */ public static ByteArrayOutputStream generateQRImage(String txt) { Hashtablehints = new Hashtable (); // 指定纠错等级 hints.put(EncodeHintType.ERROR_CORRECTION, level); // 指定编码格式 hints.put(EncodeHintType.CHARACTER_SET, "UTF-8"); hints.put(EncodeHintType.MARGIN, margin); try { BitMatrix bitMatrix = new MultiFormatWriter().encode(txt, BarcodeFormat.QR_CODE, width, height, hints); BufferedImage image = toBufferedImage(bitMatrix); ByteArrayOutputStream out = new ByteArrayOutputStream(); try { ImageIO.write(image, "PNG", out); return out; } catch (IOException e) { e.printStackTrace(); } } catch (Exception e) { e.printStackTrace(); } return null; } /** * 生成带logo的二维码图片 * * @param txt * //二维码内容 * @param logoPath * //logo绝对物理路径 * @throws Exception */ public static ByteArrayOutputStream generateQRImage(String txt, String logoPath) throws Exception { Hashtable hints = new Hashtable (); // 指定纠错等级,纠错级别(L 7%、M 15%、Q 25%、H 30%) hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.H); hints.put(EncodeHintType.CHARACTER_SET, "utf-8"); hints.put(EncodeHintType.ERROR_CORRECTION, level); hints.put(EncodeHintType.MARGIN, margin); BitMatrix bitMatrix = new MultiFormatWriter().encode(txt, BarcodeFormat.QR_CODE, width, height, hints); return writeToFile(bitMatrix, logoPath); } /** * * @param matrix * 二维码矩阵相关 * @param format * 二维码图片格式 * @param file * 二维码图片文件 * @param logoPath * logo路径 * @throws IOException */ public static void writeToFile(BitMatrix matrix, String format, File file, String logoPath) throws IOException { BufferedImage image = toBufferedImage(matrix); Graphics2D gs = image.createGraphics(); int ratioWidth = image.getWidth() * 2 / 10; int ratioHeight = image.getHeight() * 2 / 10; // 载入logo Image img = ImageIO.read(new File(logoPath)); int logoWidth = img.getWidth(null) > ratioWidth ? ratioWidth : img .getWidth(null); int logoHeight = img.getHeight(null) > ratioHeight ? ratioHeight : img .getHeight(null); int x = (image.getWidth() - logoWidth) / 2; int y = (image.getHeight() - logoHeight) / 2; gs.drawImage(img, x, y, logoWidth, logoHeight, null); gs.setColor(Color.black); gs.setBackground(Color.WHITE); gs.dispose(); img.flush(); if (!ImageIO.write(image, format, file)) { throw new IOException("Could not write an image of format " + format + " to " + file); } } public static ByteArrayOutputStream writeToFile(BitMatrix matrix, String logoPath) throws IOException { BufferedImage image = toBufferedImage(matrix); // 设置logo图标 QRLogoConfig logoConfig = new QRLogoConfig(); image = logoConfig.LogoMatrix(image, logoPath); ByteArrayOutputStream out = new ByteArrayOutputStream(); try { ImageIO.write(image, "PNG", out); return out; } catch (IOException e) { e.printStackTrace(); } return null; } public static BufferedImage toBufferedImage(BitMatrix matrix) { int width = matrix.getWidth(); int height = matrix.getHeight(); BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); for (int x = 0; x < width; x++) { for (int y = 0; y < height; y++) { image.setRGB(x, y, matrix.get(x, y) ? onColor : offColor); } } return image; } public static BitMatrix deleteWhite(BitMatrix matrix) { int[] rec = matrix.getEnclosingRectangle(); int resWidth = rec[2] + 1; int resHeight = rec[3] + 1; BitMatrix resMatrix = new BitMatrix(resWidth, resHeight); resMatrix.clear(); for (int i = 0; i < resWidth; i++) { for (int j = 0; j < resHeight; j++) { if (matrix.get(i + rec[0], j + rec[1])) resMatrix.set(i, j); } } return resMatrix; } private static void initData(QRCodeParams params) { if (params.getWidth() != null) { width = params.getWidth(); } if (params.getHeight() != null) { height = params.getHeight(); } if (params.getOnColor() != null) { onColor = params.getOnColor(); } if (params.getOffColor() != null) { offColor = params.getOffColor(); } if (params.getLevel() != null) { level = params.getLevel(); } }}
调用:
QRCodeParams qrParams = new QRCodeParams();// url = "http://192.168.1.2:8086/business"; qrParams.setTxt(url); qrParams.setWidth(300); qrParams.setHeight(300); ByteArrayOutputStream out = QRCodeUtil.generateQRImage(qrParams); qrCode = this.uploadService.upload(out,IdUtils.id()+".png");
到此,相信大家对"java怎么生成qrCode"有了更深的了解,不妨来实际操作一番吧!这里是网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!
二维
二维码
图片
生成
内容
对象
参数
矩形
路径
图标
圆弧
大小
宽度
景色
格式
笔画
等级
背景
范围
高度
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
对网络安全进行监督 通报
手机网络安全软件排行
查看网络安全设备策略是否使用
教育信息化与网络安全知识
数据库防护安全
中关村在线服务器
和利时历史数据库
怎么从服务器找回微信的聊天记录
计算机网络技术论文目录
网络安全重要性的演讲稿
美国精准数据库
外国手机小游戏服务器
公众号软件开发服务商
2021网络安全宣传周齐鲁网
店铺主体状态不符合网络安全法
旅游景区信息网络技术员
svn项目管理服务器搭建
超聚变服务器内部配线
服务器6年了有安全隐患吗
折跃门服务器未准备好
sql数据库添加主键内容
石油领域标准文档数据库
可靠的软件开发培训
东莞酷吧网络技术有限公司
服务器域名注册
软件开发的引导页设计
数据库怎么写约束的代码
网络安全应急介绍
国内厂家服务器芯片是谁的
商业数据库硕士研究生