在 java 中使用 zxing 生成二维码

x33g5p2x  于2021-10-17 转载在 Java  
字(3.5k)|赞(0)|评价(0)|浏览(251)

最近预订了一张电影票并以二维码的形式拿到了票?

使用他的二维码向您朋友的手机钱包汇款?

好吧,如果您不是住在南极洲或珠穆朗玛峰,那么您很可能在生活中听说过或使用过二维码。

如果您想了解二维码的工作原理以及如何为下一个激动人心的项目生成二维码,那么这篇博文适合您。

什么是二维码?

QR CodeQuick Response Code 是一种二维条码,可以被现代智能手机和特殊的 QR 码扫描仪设备读取。

二维码由排列在白色背景上的方形网格中的黑色方块组成。 QR 码有多种变体,具体取决于它们的符号大小、布局、编码和结构。

以下是一个典型的二维码图片(我在这张二维码图片中编码了一些东西。从你的智能手机扫描它以检查里面的内容:-)-

二维码可用于对各种类型的数据进行编码,例如 - 简单文本、网址、电话号码、短信、地理位置、电子邮件地址等。

在下一节中,我们将学习如何对此类数据进行编码并在 Java 中生成二维码。

如何在 Java 中生成二维码?

我们将使用 Google 的 Zxing 库为我们的应用程序生成二维码。

Zxing,读作斑马线,是一个开源的、多格式的一维/二维条码图像处理库,用java实现。

1。添加 Zxing 依赖

如果你使用 maven,那么在你的 pom.xml 文件中添加以下依赖项以在你的项目中包含 zxing -

<dependencies>
    <dependency>
        <groupId>com.google.zxing</groupId>
        <artifactId>core</artifactId>
        <version>3.3.0</version>
    </dependency>
    <dependency>
        <groupId>com.google.zxing</groupId>
        <artifactId>javase</artifactId>
        <version>3.3.0</version>
    </dependency>
</dependencies>

Android 用户或其他 gradle 用户可以将以下内容添加到他们的 build.gradle 文件中 -

compile "com.google.zxing:core:3.3.0"
compile 'com.google.zxing:javase:3.3.0'

如果您没有使用任何构建系统,那么只需下载托管在 Maven release repository 上的以下 zxing jar 并将它们添加到类路径中 -

zxing core-3.3.0.jar
*
zxing javase-3.3.0.jar

2。生成二维码的程序

在下面的程序中,我编写了一个名为 generateQRCodeImage 的方法,它接受要编码的文本、二维码的宽度和高度以及将保存二维码的文件系统路径。

该函数生成并保存在指定路径中的二维码。

import com.google.zxing.BarcodeFormat;
import com.google.zxing.WriterException;
import com.google.zxing.client.j2se.MatrixToImageWriter;
import com.google.zxing.common.BitMatrix;
import com.google.zxing.qrcode.QRCodeWriter;

import java.io.IOException;
import java.nio.file.FileSystems;
import java.nio.file.Path;

public class QRCodeGenerator {
    private static final String QR_CODE_IMAGE_PATH = "./MyQRCode.png";

    private static void generateQRCodeImage(String text, int width, int height, String filePath)
            throws WriterException, IOException {
        QRCodeWriter qrCodeWriter = new QRCodeWriter();
        BitMatrix bitMatrix = qrCodeWriter.encode(text, BarcodeFormat.QR_CODE, width, height);

        Path path = FileSystems.getDefault().getPath(filePath);
        MatrixToImageWriter.writeToPath(bitMatrix, "PNG", path);
    }

    public static void main(String[] args) {
        try {
            generateQRCodeImage("This is my first QR Code", 350, 350, QR_CODE_IMAGE_PATH);
        } catch (WriterException e) {
            System.out.println("Could not generate QR Code, WriterException :: " + e.getMessage());
        } catch (IOException e) {
            System.out.println("Could not generate QR Code, IOException :: " + e.getMessage());
        }
    }
}

上面的程序会生成一个带有文本的二维码——“这是我的第一个二维码”,并将其保存在指定位置。这是生成的二维码 -

上面的 generateQRCode 方法将 QRCode 图像写入指定位置。如果不想保存二维码,想从函数中以字节数组的形式返回,那么可以使用zxing库提供的MatrixToImageWriter.writeToStream()方法——

/* This method takes the text to be encoded, the width and height of the QR Code, and returns the QR Code in the form of a byte array. */
private byte[] getQRCodeImage(String text, int width, int height) throws WriterException, IOException {
    QRCodeWriter qrCodeWriter = new QRCodeWriter();
    BitMatrix bitMatrix = qrCodeWriter.encode(text, BarcodeFormat.QR_CODE, width, height);
    
    ByteArrayOutputStream pngOutputStream = new ByteArrayOutputStream();
    MatrixToImageWriter.writeToStream(bitMatrix, "PNG", pngOutputStream);
    byte[] pngData = pngOutputStream.toByteArray(); 
    return pngData;
}

上面的方法非常有用——

如果您正在开发 Web 应用程序并希望返回 QR 码图像作为对 http 请求的响应。您可以在 http 响应的正文中返回字节数组。
*
如果您正在开发 Android 应用程序并希望在您的活动屏幕上显示二维码。您可以将字节数组转换为 BitMap 并在 ImageView 中显示图像。

保护您的二维码

任何智能手机和二维码扫描设备都可以读取和解释使用二维码编码的文本。但是,如果您不想让每个人都阅读二维码中编码的内容怎么办?

嗯,二维码本身不提供任何安全性。这是你可以做的 -

在生成包含任何文本的 QR 码之前,请使用任何加密算法对文本进行加密,并使用只有您的应用程序才能访问的机密。
*
生成带有加密文本的二维码。

现在,即使有人扫描您的 QR 码,他们也将获得无法解密的加密文本,除非他们知道用于加密它的秘密。

但是当您扫描应用程序中的二维码时,您可以使用密钥解密文本并获取存储在二维码中的实际数据。

结论

在这篇文章中,我们学习了如何使用 google 的 zxing 库在 java 中生成二维码。在下一篇文章中,我们将学习如何在 Java 中读取二维码图像。

您可以在 my github repository 中找到所有代码示例。

相关文章

微信公众号

最新文章

更多