二维码生成

摘要:开发过程中遇到个需求,将指定的信息保存到二维码中,如何完成这一目的呢?下面记录下载SpringBoot项目中生成二维码的步骤

添加依赖

        首先,需要在项目pom.xml中引入依赖zxing;

<!-- ZXing 是一个开源的条码/二维码处理库,可以用于生成和解析各种格式的条码和二维码。
     javase模块是ZXing库的一个子模块,提供了在Java SE环境中使用 ZXing 的功能。 
-->
<dependency>
  <groupId>com.google.zxing</groupId>
  <artifactId>javase</artifactId>
  <version>3.3.0</version>
</dependency>

  二维码工具类

         然后,为二维码生成单独编写一个工具类QRCodeGenerator.java。QRCodeGenerator类包含一个静态方法generatorQRCodeImage,用于生成二维码图像。

  •  generatorQRCodeImage方法接受四个参数:要编码的文本、二维码的宽度和高度、二维码图像写入路径;
  • 在方法中,先创建了一个 QRCodeWriter 对象,用于将字符串编码为二维码图像;
  • 然后,通过 QRCodeWriter.encode() 方法将文本内容编码为 QRCode 的 BitMatrix 矩阵;
  • 接着,创建一个 Path 对象,用于指定二维码图片的保存路径;
  • 最后,通过MatrixToImageWriter.writeToPath()方法将BitMatrix矩阵写入到指定路径的PNG文件中。

        工具类中增加测试方法,测试代码直接运行会产生二维码图片,可使用网站在线生成 QR Code (oschina.net) ,解码二维码中信息是否为“Hello World”。具体实现过程如下

/**
 * 描述: 生成二维码工具
 */
public class QRCodeGenerator {
    public  static void generatorQRCodeImage(String text, int width, int height, String filePath) throws WriterException, IOException {
        // 实例化qrCodeWriter
        QRCodeWriter qrCodeWriter = new QRCodeWriter();
        // 调用encode方法生成编码后的结果为BitMatrix 矩阵
        BitMatrix bitMatrix = qrCodeWriter.encode(text, BarcodeFormat.QR_CODE, width, height);
        // 传入String拿到对应的地址
        Path path = FileSystems.getDefault().getPath(filePath);
        MatrixToImageWriter.writeToPath(bitMatrix, "PNG", path);
    }

    // 调试方法: 调用generatorQRCodeImage方法,生成一个包含文本"Hello World"的二维码图像,并将其保存在一个PNG文件中。
    public  static void main(String[] args) {
        try {
            // 测试类中未使用Spring的能力注入地址,直接写了本地的路径
            generatorQRCodeImage("Hello World", 350, 350, "/Users/cainiao/Desktop/Learn/imooc-mall-prepare-static/QRTesr.png");
        } catch (WriterException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

应用工具类生成二维码

        下面将完成一个方法,利用工具类QRCodeGenerator.java将目标字符串(此处payUrl)生成二维码,并返回二维码图片访问地址,具体过程

  • 首先,通过RequestContextHolder.getRequestAttributes()获取当前请求的属性。
  • 然后,将请求对象转换为ServletRequestAttributes对象,以便获取请求相关信息。
  • 通过ServletRequestAttributes.getRequest()获取HttpServletRequest对象,从中获取本地端口号和IP地址(需要单独配置)。
  • 构建一个包含IP地址和本地端口号的字符串,命名为address。
  • 根据传入的 orderNo 参数拼接出二维码的链接地址 payUrl,格式为 "http://address/pay?orderNo=xx"。
  • 调用QRCodeGenerator.generatorQRCodeImage()方法生成二维码图片,并保存到指定路径下的文件中。
  • 将生成的二维码图片的地址拼接为完整的URL地址,并命名为pngAddress。
  • 返回 pngAddress,即生成的二维码图片的地址。
@Value("${file.uplod.ip}")
String ip;

public String qrcode(String orderNo) {
    ServletRequestAttributes attributes = (ServletRequestAttributes)RequestContextHolder.getRequestAttributes();
    HttpServletRequest request = attributes.getRequest();
    // 此处,由于应用部署后IP进行多层,不能直接通过request获取,因此需要配置,并在此处导入即可
    String address = ip + ":" + request.getLocalPort();
//        try {
//            // 获取本机电脑的局域网IP,复杂网络环境下此方法获取的IP并不准确,调试使用,部署前删除
//            ip = InetAddress.getLocalHost().getHostAddress();
//        } catch (UnknownHostException e) {
//            e.printStackTrace();
//        }
    // 生成二维码的字符串
    String payUrl = "http://" + address + "/pay?orderNo=" + orderNo;
    try {
        QRCodeGenerator.generatorQRCodeImage(payUrl, 350, 350, Constant.FILE_UPLOAD_DIR + orderNo + ".png");
    } catch (WriterException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
    String pngAddress = "http://" + address + "/images/" + orderNo + ".png";
    return pngAddress;
}

        这样获取了二维码的地址后,就可以对二维码进一步进行处理,例如,将二维码展示,扫码访问后结合数据库操作,完成扫码支付等功能。

总结

        上述,二维码生成主要借助QRCodeWriter对象完成一系列编码和保存图片功能。但是有个遗留问题生成是生成二维码后,需要借助浏览器打开链接完成二维码访问,无法直接手机扫码有空再看看能否实现和前端调试一样,手机与电脑可局域网下直接手机扫码。

  • 38
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
二维码生成驱动C语言的过程如下: 首先,需要了解二维码的生成原理和格式。二维码是一种矩阵型的图形编码,可以存储大量信息。它的生成过程包括数据编码、纠错码计算和图形绘制三个主要步骤。 在C语言中,可以使用开源的二维码生成库,如ZXing或QRcode等。这些库提供了控制二维码生成的函数和接口,方便我们使用C语言进行二维码生成。 首先,需要初始化一个二维码生成器对象。然后,调用相关函数设置生成器的参数,如二维码版本、纠错级别、编码方式等。这些参数将影响生成的二维码的容量和可靠性。 接下来,需要将待编码的数据传递给生成器。生成器会根据设置的参数将数据编码成二维码格式。编码过程中,可以根据需要进行错误校正,以提高二维码的可靠性。 最后,调用绘制函数将生成的二维码图形绘制到指定的输出设备或文件中。绘制过程中,可以设置二维码的尺寸、颜色、间距等属性。 需要注意的是,二维码的生成需要依赖相应的驱动程序和库文件,因此在使用C语言进行二维码生成前,需要安装和配置相应的驱动和库。 总而言之,生成二维码的过程需要借助于C语言二维码生成库,通过设置参数、传递数据、进行编码和绘制等步骤来实现。通过合理的调用和配置,可以生成符合要求的二维码图形。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值