代码生成二维码

使用java生成二维码

  • 前言
  • 使用步骤
    • xml
    • 生成二维码
    • 二维码转url
  • 总结


前言

Zxing Zxing 是一个开源的 Java 二维码扫描和生成库,由美国 Google 公司的一位开发者 Sean Owen 在 2006 年开发并发布,它是用 Java 语言编写的,可以方便地集成到各种应用中。
项目地址为:https://github.com/zxing/zxing


使用步骤

xml

<dependency>
    <groupId>com.google.zxinggroupId>
    <artifactId>coreartifactId>
    <version>3.4.1version>
dependency>

<dependency>
    <groupId>com.google.zxinggroupId>
    <artifactId>javaseartifactId>
    <version>3.4.1version>
dependency>

生成二维码

在进行二维码生成前,需要先创建一个 MultiFormatWriter 对象,并使用 encode() 方法将文本信息转换为二维码矩阵。然后再使用 MatrixToImageWriter 类的 writeToStream() 方法将矩阵对应的二维码图片写入输出流中。

代码实现如下:

    //config中包含的一些二维码信息
    Map<EncodeHintType, Object> config = new HashMap<>();
    config.put(EncodeHintType.CHARACTER_SET, "UTF-8");
    config.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.M);
    config.put(EncodeHintType.MARGIN, 0);
    //核心代码(高度、宽度就不说了)
    BitMatrix bitMatrix = new MultiFormatWriter().encode(content, BarcodeFormat.QR_CODE, width, height, config);

解释一下里面config中的信息

  • CHARACTER_SET: 指定编码格式,默认值为 UTF-8。
  • ERROR_CORRECTION: 指定纠错等级,包括四个等级:L(约可纠错 7% 的数据码字)、M(约可纠错 15% 的数据码字)、Q(约可纠错 25% 的数据码字)和 H(约可纠错 30% 的数据码字),默认值为 M。
  • MARGIN: 指定二维码图片的边距,默认值为 0,即不留白边。

二维码转url

因为生成的二维码是以图片的形式输出,而如果想要用户看到二维码就需要我们将二维码转换为url给到前端进行渲染,可以参考图床搭建文章,进行图片上传。

那么新的问题又来了,生成的二维码需要存储在哪里?

  • 在之前我让他指定了一个路径进行输出,如下代码:
  Path path = Paths.get("qrcode.png");
  MatrixToImageWriter.writeToPath(bitMatrix, "PNG", path);

path是我指定的在这个当前项目中的位置去生成图片qrcode.png,那么在调用writeToPath中,指定生成的路径path的位置

然后我们将这个位置的图片在传到生成url地址的api中,最后生成网络url地址去返回给前端

qrCodeUrl = uploadFileMinio(qrCodeLocalityUrl);

  • 那么这样操作虽然解决了问题,那么如果我们每次都要去将二维码保存在本地,是否造成了资源的浪费,这个时候我又想到了使用内存去将二维码生成的直接放在内存中上传。代码实现如下:
    //            转化对象为BufferedImage
               BufferedImage image = MatrixToImageWriter.toBufferedImage(bitMatrix);
    //           将image对象写入到ByteArrayOutputStream中
               ByteArrayOutputStream os = new ByteArrayOutputStream();
               ImageIO.write(image, "png",os);
    //            讲写入内存的对象写出到ByteArrayInputStream中
               ByteArrayInputStream is = new ByteArrayInputStream(os.toByteArray());
    //            最后调用上传图片的方法上传文件
               Boolean upload = minioUtil.upload(is, "fineName", minioConfig.getBucketName());
               if (upload) {
                   qrCodeUrl =  minioConfig.getUrl() + "/" + minioConfig.getBucketName() + "/" + "fineName";
               }
    

总结

以上就是使用 Zxing 进行二维码扫描和生成的基本步骤。当然,针对不同场景,可能还需要设置一些参数和处理一些异常等操作。

你可能感兴趣的:(java,开发语言,扩展屏应用开发)