【二维码的创建、底部添加文字以及文字乱码】

这篇具有很好参考价值的文章主要介绍了【二维码的创建、底部添加文字以及文字乱码】。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

首先引入maven依赖
依赖1
< dependency >
< groupId>com.google.zxing< /groupId>
< artifactId>javase< /artifactId>
< version>3.3.1< /version>
< /dependency> .
依赖2
< dependency>
< groupId>com.google.zxing< /groupId>
< artifactId>core< /artifactId>
< version>3.3.1< /version>
< /dependency>

上传fastDFS

public String creatQrCode(String path, String name) {
        String qrPath = "";
        try {
            //获取二维码图片字节流
            byte[] bytes = getQrCodeByte(path, name);
            InputStream inputStream = new ByteArrayInputStream(bytes);
            //通过fastDFS保存最终图片
            Map qrMap = fastDFSConfig.uploadFilePng(inputStream);
            qrPath = qrMap.get("filePath").toString();
            if (ObjectUtils.isEmpty(qrPath)) {
                throw BizException.warp(ResultCode.VALIDATE_FAILED.build("生成二维码失败"));
            }
        } catch (Exception e) {
            throw BizException.warp(ResultCode.VALIDATE_FAILED.build("生成二维码失败"));
        }
        return qrPath;
    }
    

获取二维码流

private byte[] getQrCodeByte(String path, String name) {
        byte[] bytes = null;
        try {
            BufferedImage image = createQrCode(path, 300);
            BufferedImage bufferedImage = addNote(image, name);
            ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
            ImageOutputStream imageOutputStream = ImageIO.createImageOutputStream(byteArrayOutputStream);
            ImageIO.write(bufferedImage, "jpg", imageOutputStream);
            bytes = byteArrayOutputStream.toByteArray();
        } catch (IOException e) {
            throw BizException.warp(ResultCode.VALIDATE_FAILED.build("生成二维码失败"));
        }
        return bytes;
    }

创建二维码

 private BufferedImage createQrCode(String content, int qrCodeSize) {
     try {
         //设置二维码纠错级别
         Hashtable<EncodeHintType, ErrorCorrectionLevel> hintMap = new Hashtable<>();
         hintMap.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.L);
         QrCodeWriter qrCodeWriter = new QRCodeWriter();
         BitMatrix bitMatrix = qrCodeWriter.encode(content, BarcodeFormat.QR_CODE, qrCodeSize, qrCodeSize, hintMap);
         int width = bitMatrix.getWidth();
         int height = bitMatrix.getHeight();
         BufferedImage image = new BufferedImage(width - 65, height - 65, BufferedImage.TYPE_INT_RGB);
         Graphics2D graphics2D = image.createGraphics();
         graphics2D.setColor(Color.white);
         graphics2D.fillRect(0, 0, width, height);
         graphics2D.setColor(Color.BLACK);
         //保存图像
         for (int i = 0; i < width; i++) {
             for (int j = 0; j < width; j++) {
                 if (bitMatrix.get(i, j)) {
                     graphics2D.fillRect(i - 33, j - 33, 2, 2);
                 }
             }
         }
         return image;
     } catch (Exception e) {
         e.printStackTrace();
         return null;
     }
 }

底部添加文字说明

 private BufferedImage addNote(BufferedImage image, String note) {
      int a = 0;
      String reg1 = "[\u4e00-\u9fa5]";
      String reg2 = "[A-Z]";
      String reg3 = "[a-z]";
      String reg4 = "[0-9]";
      char[] charArr = note.toCharArray();
      String[] strArr = new String[charArr.length];
      for (int i = 0; i < charArr.length; i++) {
          strArr[i] = String.valueOf(charArr[i]);
          if (strArr[i].matches(reg1)) {
              a = a + 19;
          } else if (strArr[i].matches(reg4)) {
              a = a + 11;
          } else if (strArr[i].matches(reg2) || strArr[i].matches(reg3)) {
              a = a + 9;
          } else {
              a = a + 5;
          }
      }
      Image src = image.getScaledInstance(300, 300, Image.SCALE_DEFAULT);
      BufferedImage tag;
      //最下层黑边
      if (a < 300) {
          tag = new BufferedImage(300, 322, BufferedImage.TYPE_INT_RGB);
      } else {
          tag = new BufferedImage(300, 345, BufferedImage.TYPE_INT_RGB);
      }
      Graphics g1 = tag.getGraphics();
      g1.setColor(Color.white);
      Graphics2D g2 = tag.createGraphics();//设置文字
      Font font = new Font("Default", Font.BOLD, 18);
      g2.setFont(font);
      g2.setColor(Color.BLACK);
      if (a < 300) {
          g1.fillRect(0, 300, 300, 22);
          g2.drawString(note, (300 - a) / 2 - 4 < 0 ? 0 : (300 - a) / 2 - 4, 300 + font.getSize());
      } else {
          g1.fillRect(0, 300, 300, 45);
          g2.drawString(note, (300 - a) / 2 - 4 < 0 ? 0 : (300 - a) / 2 - 4, 300 + font.getSize());
          g2.drawString(note.substring(16, note.length()), (300 - (a - 300)) / 2, 300 + font.getSize() * 2 + 4);
      }
      g1.drawImage(src, 0, 0, null);
      g1.dispose();
      g2.dispose();
      image = tag;
      image.flush();
      return image;
  }

底部文字中文乱码问题:
【二维码的创建、底部添加文字以及文字乱码】

解决思路:~~~~~~~~~~~~~~~~~~~
1.看一下代码
2.部署服务器的编码问题
(1)查看java是否存在 java -version
(2) which java
【二维码的创建、底部添加文字以及文字乱码】
进入到bin的目录下
cd /usr/bin
ll
【二维码的创建、底部添加文字以及文字乱码】
看jre下面是否有fonts文件夹,没有的话,新建一个
cd /etc/alternatives/jre/lib/fonts/fallback/simsun.ttc
将ttf文件导入到linux系统中,如上路径
simsun.ttc (文字包)↓
可在本地电脑C盘 Windows\Fonts中获取
这里是一个ttc文件,需要修改文件后缀,改为ttf,才可以扔到linux中文章来源地址https://www.toymoban.com/news/detail-402803.html

到了这里,关于【二维码的创建、底部添加文字以及文字乱码】的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Android实现生成二维码以及扫描二维码的功能(超级简单!)

    文章目录 ​​​​​​ 前言 二、实现生成二维码的功能 三、实现扫面二维码的功能 总结 提示:这里可以添加本文要记录的大概内容: 我是通过一个第三方库来实现二维码的生成,以及扫描二维码的功能,开源库如下: 一、布局文件如下 布局比较简单,就只有简单的一些

    2024年02月12日
    浏览(37)
  • HarmonyOS学习路之开发篇—AI功能开发(二维码生成及文字识别)

    为应用提供丰富的AI(Artificial Intelligence)能力,支持开箱即用。开发者可以灵活、便捷地选择AI能力,让应用变得更加智能。 已开放的AI能力如下表所示: 能力 简介 二维码生成 根据开发者给定的字符串信息和二维码图片尺寸,返回相应的二维码图片字节流。调用方可以通过

    2024年02月11日
    浏览(48)
  • Java 创建带参数小程序二维码

            生成小程序二维码有三个接口,根据自己的业务场景选择合适的接口,这里我选择的是接口B   注意 :所带参数的长度不得超过32字符。access_token是小程序的

    2024年02月16日
    浏览(27)
  • 微信小程序使用weapp-qrcode.js生成二维码以及“扫普通链接二维码打开小程序”动态传递参数实现以及遇到问题记录

    参考文章原文链接:微信小程序使用weapp-qrcode.js完成二维码的生成_fairy_404的博客-CSDN博客 首先给需要生成二维码的页面创建一个canvas 因为我这里实现的是弹窗展示二维码,所有就把 canvas移出页面,小伙伴们根据自己需求进行调整,weapp-qrcode.js内容参考链接中就有,我这里就

    2024年02月01日
    浏览(43)
  • 使用Stable Diffusion和PyTorch创建艺术二维码

    大家好,本文将介绍如何利用Stable Diffusion和PyTorch的能力来创建AI生成的QR码艺术。通过将这些技术相结合,可以生成独特的、具有视觉吸引力的艺术作品,其中包含QR码,为艺术作品增添了互动元素。 Stable Diffusion和PyTorch 稳定扩散(Stable Diffusion)是一种用于图像处理和计算机

    2024年02月16日
    浏览(36)
  • 微信小程序生成二维码(weapp-qrcode)可添加logo

    插件 npm 地址:https://www.npmjs.com/package/weapp-qrcode 插件 GitHub 地址:https://github.com/yingye/weapp-qrcode/tree/master 一、引入 1、根据 GitHub 指引将 weapp-qrcode 放到本地 uitl 文件夹下; 2、创建 canvas 3、在 js 文件中引入 weapp-qrcode 以及使用; 这里是添加了 logo 的二维码;相关参数请参考

    2024年02月15日
    浏览(26)
  • 如何为微信小程序添加扫码支付和二维码收款功能

    微信小程序是一种轻量级的应用程序,它可以在微信客户端内运行。微信小程序支持扫码支付和二维码收款功能,以方便用户进行支付和收款。 本文将针对微信小程序的扫码支付和二维码收款功能进行详细的讲解,并提供相应的代码案例,帮助开发者了解如何为微信小程序添

    2024年02月04日
    浏览(40)
  • 微信小程序使用weapp-qrcode.js生成二维码以及“扫普通链接二维码打开小程序”动态传递参数实现记录

    参考文章原文链接:微信小程序使用weapp-qrcode.js完成二维码的生成_fairy_404的博客-CSDN博客 首先给需要生成二维码的页面创建一个canvas 因为我这里实现的是弹窗展示二维码,所有就把 canvas移出页面,小伙伴们根据自己需求进行调整,weapp-qrcode.js内容参考链接中就有,我这里就

    2024年02月15日
    浏览(40)
  • Vue中使用qrcode实现渲染二维码中间添加自定义logo-demo

    我们首先创建一个新的 canvas 元素,用于容纳生成的二维码。然后,使用 QRCode.toCanvas 方法将二维码生成到新的 canvas 元素中。 接下来,在 logo.onload 事件处理程序中,我们创建一个 Image 对象来加载logo图像,并在二维码中间绘制logo。最后,将生成的二维码转换为数据URL,并将

    2024年02月10日
    浏览(33)
  • 03、SpringBoot + 微信支付 ---- 创建订单、保存二维码url、显示订单列表

    1-1:需求: 之前的下单,只是获取支付二维码,但是并没有将订单存到数据库 需求1:点击确认支付后,创建商品的订单存到数据库 需求2:每次确认支付之前,要判断这个人是否存在已下单未支付的订单,有的话就不用再创建订单了,把他的订单查询出来给他就行。 1-2:代

    2024年02月05日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包