1000字范文,内容丰富有趣,学习的好帮手!
1000字范文 > 二维码生成(带文字)

二维码生成(带文字)

时间:2022-10-26 00:44:04

相关推荐

二维码生成(带文字)

话不多说 直接上代码

先在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("");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());}

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

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。