Генерация QR-кодов на Java: библиотека ZXing (подробное руководство)

Онлайн-тренажер Python для начинающих

Изучайте Python легко и без перегрузки теорией. Решайте практические задачи с автоматической проверкой, получайте подсказки на русском языке и пишите код прямо в браузере — без необходимости что-либо устанавливать.

Начать курс

Генерация QR-кодов на Java с помощью ZXing

QR-коды стали неотъемлемой частью современного веба и мобильных приложений. Они используются для быстрой передачи ссылок, контактных данных, текста и другой информации. В Java одной из самых популярных и стабильных библиотек для работы с QR-кодами является ZXing («Zebra Crossing»). В этой статье мы разберём, как подключить ZXing к проекту, сгенерировать QR-код и сохранить его в файл.

Что такое ZXing?

ZXing (Zebra Crossing) — это open-source библиотека для обработки одномерных и двумерных штрихкодов, написанная на Java. Она поддерживает чтение и запись QR-кодов, Data Matrix, PDF417 и многих других форматов. Библиотека активно поддерживается сообществом и используется в тысячах проектов.

Подключение библиотеки

Для работы с ZXing в проекте на Java (например, Maven или Gradle) необходимо добавить две основные зависимости:

  • core — содержит базовые классы для работы с кодами.
  • javase — содержит классы для генерации изображений (PNG, JPEG) и работы с AWT.

Пример для Maven (pom.xml):

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

Для Gradle добавьте в build.gradle:

implementation 'com.google.zxing:core:3.5.3'
implementation 'com.google.zxing:javase:3.5.3'

Базовый пример: генерация QR-кода

Создадим простой метод, который принимает текст и путь к файлу, а затем генерирует QR-код размером 300x300 пикселей.

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 {

    public static void generateQRCode(String text, String filePath)
            throws WriterException, IOException {
        QRCodeWriter qrCodeWriter = new QRCodeWriter();
        BitMatrix bitMatrix = qrCodeWriter.encode(text, BarcodeFormat.QR_CODE, 300, 300);

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

    public static void main(String[] args) {
        try {
            generateQRCode("https://pythonlib.ru", "qrcode.png");
            System.out.println("QR-код успешно создан!");
        } catch (WriterException | IOException e) {
            System.err.println("Ошибка генерации QR-кода: " + e.getMessage());
        }
    }
}

После запуска в корне проекта появится файл qrcode.png с QR-кодом, содержащим ссылку на https://pythonlib.ru.

Настройка цвета и размера

По умолчанию QR-код генерируется чёрно-белым. Вы можете изменить цвет переднего плана и фона, используя MatrixToImageConfig:

import com.google.zxing.client.j2se.MatrixToImageConfig;

public static void generateColoredQR(String text, String filePath)
        throws WriterException, IOException {
    QRCodeWriter writer = new QRCodeWriter();
    BitMatrix matrix = writer.encode(text, BarcodeFormat.QR_CODE, 400, 400);

    // Цвет переднего плана (синий), цвет фона (жёлтый)
    int foregroundColor = 0xFF3366FF; // ARGB
    int backgroundColor = 0xFFFFFF00;
    MatrixToImageConfig config = new MatrixToImageConfig(foregroundColor, backgroundColor);

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

Добавление логотипа в центр QR-кода

Часто требуется разместить логотип компании в центре QR-кода. Это делается путём наложения изображения поверх сгенерированного BitMatrix. Ниже приведён упрощённый пример с использованием Graphics2D:

import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.File;

public static BufferedImage addLogoToQR(BufferedImage qrImage, BufferedImage logo) {
    int qrWidth = qrImage.getWidth();
    int qrHeight = qrImage.getHeight();

    // Создаём копию QR-                    

Рекомендаций