二维码生成(带文字)

news/2025/1/15 23:03:42/

话不多说 直接上代码

先在pom文件引入zxing包

   <!--二维码--><dependency><groupId>com.google.zxing</groupId><artifactId>core</artifactId><version>3.2.1</version></dependency><dependency><groupId>com.google.zxing</groupId><artifactId>javase</artifactId><version>3.2.1</version></dependency>

接下来是工具类

private static final Log log = LogFactory.getLog(QrCodeUtil2.class);private static String voucherPath = "http://aaa.aaaaaaa.aa:8080/#/voucherDetail?id=";// 设置默认参数,可以根据需要进行修改
private static final int QRCOLOR = 0xFF000000; // 默认是黑色
private static final int BGWHITE = 0xFFFFFFFF; // 背景颜色
private static final int WIDTH = 123; // 二维码宽
private static final int STARTWIDTH = 135; // 二维码宽
private static final int HEIGHT = 123; // 二维码高private static Map<EncodeHintType, Object> hints = new HashMap<EncodeHintType, Object>() {private static final long serialVersionUID = 1L;{put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.H);// 设置QR二维码的纠错级别(H为最高级别)具体级别信息put(EncodeHintType.CHARACTER_SET, "utf-8");// 设置编码方式put(EncodeHintType.MARGIN, 0);}
};public static BufferedImage createQrText(TahVoucher voucher, Font font1, Font font2) throws WriterException{MultiFormatWriter multiFormatWriter = new MultiFormatWriter();BitMatrix bm = multiFormatWriter.encode(voucherPath+voucher.getId(), BarcodeFormat.QR_CODE, 130, 130, hints);BitMatrix bmw = deleteWhite(bm);// 创建一个图片缓冲区存放二维码图片BufferedImage image = new BufferedImage(WIDTH, HEIGHT, BufferedImage.TYPE_INT_RGB);// 开始利用二维码数据创建Bitmap图片,分别设为黑(0xFFFFFFFF)白(0xFF000000)两色for (int x = 0; x < bmw.getWidth(); x++) {for (int y = 0; y< bmw.getHeight(); y++) {image.setRGB(x, y, bmw.get(x, y) ? QRCOLOR : BGWHITE);}}if (voucher!=null) {// 1、在内存创建图片缓冲区 这里设置画板的宽高和类型BufferedImage outImage = new BufferedImage(380, HEIGHT, BufferedImage.TYPE_4BYTE_ABGR);// 2、创建画布,获取图像对象Graphics2D outg = outImage.createGraphics();// 3、抗锯齿,防止模糊RenderingHints rh = new RenderingHints(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);rh.put(RenderingHints.KEY_COLOR_RENDERING, RenderingHints.VALUE_COLOR_RENDER_QUALITY);rh.put(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_LCD_HRGB);outg.setRenderingHints(rh);// 4、在画布上画上二维码 X轴Y轴,宽度高度(X轴贴最左侧)outg.drawImage(image, 0, 0, image.getWidth(), image.getHeight(), null);// 设置文字颜色为黑色outg.setColor(Color.BLACK);// 字体、字型、字号outg.setFont(font1);// drawString(文字信息、x轴、y轴)方法根据参数设置文字的坐标轴 ,根据需要来进行调整outg.drawString(voucher.getCompanyName(), STARTWIDTH, 20);// 字体、字型、字号outg.setFont(font2);outg.drawString("日期: " + voucher.getYear() + "-" + (!StringUtils.isEmpty(voucher.getRemark()) ? "("+ voucher.getRemark() +")":voucher.getMonth()), STARTWIDTH, 50);outg.drawString("册数: " + voucher.getSortNumber() + "/" + voucher.getTotalNumber(), STARTWIDTH, 80);outg.drawString("起始号: " + voucher.getVoucherNumber(), STARTWIDTH, 110);outg.dispose();outImage.flush();image = outImage;}image.flush();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;
}public static void drawLogoQRCode(TahVoucher voucher) {FileOutputStream fileOutputStream = null;try {voucher = new TahVoucher();voucher.setCompanyName("测试上海分公司");voucher.setVoucherNumber("1-23  1-34");voucher.setTotalNumber("22");voucher.setSortNumber("14");voucher.setMonth("12");voucher.setYear("2021");voucher.setId(1);// 保存路径输出流,将图片输出到指定路径fileOutputStream = new FileOutputStream("C:\\Users\\Admin\\Desktop\\二维码图片\\" + voucher.getCompanyName()+voucher.getYear()+"-"+voucher.getMonth()+"_"+voucher.getSortNumber() + ".png");Font font1 = new Font("黑体", Font.PLAIN, voucher.getCompanyName().length()>=19 ? 13:14);Font font2 = new Font("黑体", Font.PLAIN, 14);BufferedImage image = createQrText(voucher, font1, font2);ImageIO.write(image, "png", fileOutputStream);} catch (WriterException | IOException e) {log.error("二维码写入IO流异常", e);} finally {try {if (null != fileOutputStream){fileOutputStream.flush();fileOutputStream.close();}} catch (IOException ioe){log.error("二维码关流异常", ioe);}}
}public static void main(String[] args){drawLogoQRCode(new TahVoucher());
}

可酌情根据自己需要更改二维码长度和宽度


http://www.ppmy.cn/news/418715.html

相关文章

二维码生成器怎么在线制作?制作二维码其实很简单

二维码生成器怎么在线制作&#xff1f;在互联网快速发展的今天&#xff0c;相信男男女女老少都知晓二维码了&#xff0c;二维码和我们的日常生活息息相关。无论是我们扫码看新闻&#xff0c;还是我们扫码进行支付&#xff0c;可以说我们的生活离不开二维码。那么我们除了保存系…

tp5 QRcode生成带参数二维码

当时为了这个生成二维码&#xff0c;踩了各种坑&#xff0c;搞了一晚上才搞出来&#xff0c;综合网上各位大神&#xff0c;写下笔记以备下次使用 头部use use qrcode\qrcode; header(content-type:image/png); //设置gif Image ob_clean(); $url urldecode("您的链接…

有什么办法可以让微信群二维码永久有效?这类的二维码生成器怎么制作?

微信群在引流时经常会受到7天有效期和200人入群限制&#xff0c;因为这类二维码通常是一个静态的二维码&#xff0c;如果想要让微信群二维码长久有效的话&#xff0c;那么就需要做一个与之相反的二维码&#xff0c;我们称为“动态二维码”&#xff0c;也就是“活码”。 活码可…

用草料二维码生成器制作二维码

用草料二维码生成器制作二维码 打开网页&#xff0c;http://cli.im/,弹出草料二维码生成器。 在“网址”选项输入网址。 点“生成二维码”按钮。 点“转成活码”按钮。 按要求输入账号、密码。 注册成功后&#xff0c;登录。…

生成二维码之后,给二维码 上方添加文字(二)

生完二维码之后,获取因为需求 我们需要 给二位吗上方添加 一些文字之类的提示信息: 如果 座位号什么的; int fontStyle 1; //字体风格int font 24; //字体大小//用来存放带有logo文字的二维码图片String realPath2 url"/new/"shopName"/";String newIma…

微信二维码生成字

http://rd.wechat.com/qrcode/confirm?block_type101&content我的中国心&langzh_CN&scene4 改中文字 然后生成二维码 微信扫一扫&#xff0c;就出来了

二维码生成使用规则

&#xff11;、QR码可用尺寸知识普及 QR码设有1到40的不同版本(种类)&#xff0c;每个版本都具备固有的码元结构(码元数)。(码元是指构成QR码的方形黑白点。) “码元结构”是指二维码中的码元数。从版本1(21码元21码元)开始&#xff0c;在纵向和横向各自以4码元为单位递增&…

生成二维码附带文字信息

生成二维码写入PDF文件 目录 生成二维码写入PDF文件前言一、引入依赖二、生成二维码1.创建实体类2.创建QRCodeUtil3.生成单条二维码4.批量生产二维码 三、生成二维码写入PDF文件1.引入依赖2.替换工具类中的drawLogoQRCode方法3.PDF中文乱码解决 前言 1. 生成二维码图片 2. 附带…