Java 二维码内容样式

二维码(QR Code)是一种用于存储信息的矩阵条形码。它由黑白两种颜色的方块组成,可以被快速而准确地扫描和解码。在现代生活中,二维码被广泛应用于支付、商品标签、活动门票等各个领域。

Java 提供了多种库和工具来生成和解码二维码。在本文中,我们将重点介绍如何使用 zxing(Zebra Crossing)库来生成不同样式的二维码内容。

引入依赖

首先,我们需要在项目中引入 zxing 依赖。在 Maven 项目中,可以在 pom.xml 文件中添加以下依赖:

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

生成简单的文本二维码

首先,我们来生成一个包含简单文本信息的二维码。我们可以使用 zxing 提供的 QRCodeWriter 类来实现。

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

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

public class TextQRCodeGenerator {

    public static void main(String[] args) {
        String text = "Hello, World!";
        int width = 200;
        int height = 200;
        String format = "png";
        String filePath = "output.png";

        QRCodeWriter qrCodeWriter = new QRCodeWriter();
        BitMatrix bitMatrix;
        try {
            bitMatrix = qrCodeWriter.encode(text, BarcodeFormat.QR_CODE, width, height);
            Path path = FileSystems.getDefault().getPath(filePath);
            MatrixToImageWriter.writeToPath(bitMatrix, format, path);
            System.out.println("QR Code generated successfully!");
        } catch (Exception e) {
            System.out.println("Failed to generate QR Code: " + e.getMessage());
        }
    }
}

在此示例中,我们首先指定了要生成的文本信息,然后设置了二维码的宽度、高度、格式和输出文件路径。然后,我们使用 QRCodeWriterencode 方法将文本信息转换为 BitMatrix 对象。最后,我们将 BitMatrix 对象写入到指定的文件路径中。

运行该代码,将会在项目目录下生成一个名为 output.png 的二维码图片文件。使用手机扫描该图片,可以看到包含文本信息的二维码。

自定义二维码样式

除了简单的文本信息,我们还可以根据需求自定义二维码的样式。例如,我们可以更改二维码的颜色、添加中心图标等。

以下是一个示例代码,演示如何自定义二维码样式:

import com.google.zxing.*;
import com.google.zxing.common.BitMatrix;
import com.google.zxing.qrcode.QRCodeWriter;
import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel;
import com.google.zxing.client.j2se.MatrixToImageWriter;
import com.google.zxing.client.j2se.MatrixToImageConfig;

import java.awt.*;
import java.awt.geom.RoundRectangle2D;
import java.awt.image.BufferedImage;
import java.io.File;
import java.nio.file.FileSystems;
import java.nio.file.Path;

public class CustomQRCodeGenerator {

    public static void main(String[] args) {
        String text = "Hello, World!";
        int width = 300;
        int height = 300;
        String format = "png";
        String filePath = "output.png";
        String logoPath = "logo.png";

        try {
            QRCodeWriter qrCodeWriter = new QRCodeWriter();
            BitMatrix bitMatrix = qrCodeWriter.encode(text, BarcodeFormat.QR_CODE, width, height);

            BufferedImage qrCodeImage = MatrixToImageWriter.toBufferedImage(bitMatrix,
                    new MatrixToImageConfig(Color.BLACK.getRGB(), Color.WHITE.getRGB()));

            BufferedImage logoImage = ImageIO.read(new File(logoPath));

            int logoWidth = qrCodeImage.getWidth() / 4;
            int logoHeight = qrCodeImage.getHeight() / 4