Генератор QR-кодов на Java: библиотека ZXing (Zebra Crossing)

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

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

Начать курс

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

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

В этой статье мы подробно разберём, как подключить ZXing к вашему проекту, создать простой QR-код, настроить его внешний вид и сохранить в файл. Материал будет полезен как новичкам, так и опытным разработчикам, которые хотят добавить функционал генерации QR-кодов в свои Java-приложения.

Что такое ZXing?

ZXing (произносится как "zebra crossing") — это open-source библиотека для обработки одномерных и двумерных штрих-кодов. Она написана на Java и поддерживает множество форматов: QR-код, Data Matrix, Aztec, PDF417 и другие. Основные возможности:

  • Генерация (создание) QR-кодов из текста, URL, контактов и т.д.
  • Считывание (декодирование) QR-кодов из изображений.
  • Настройка цвета, размера, уровня коррекции ошибок.
  • Вывод в различные графические форматы (PNG, JPEG, SVG).
  • Поддержка Java SE, Android, а также других JVM-языков (Kotlin, Scala).

Библиотека активно поддерживается сообществом и используется в тысячах проектов по всему миру.

Подключение ZXing к проекту

Самый простой способ добавить ZXing в ваш проект — использовать систему сборки Maven или Gradle. Если вы используете 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'

Модуль core содержит основные классы для работы с кодами, а javase — вспомогательные утилиты для Java SE (например, для работы с изображениями).

Создание простого QR-кода

Рассмотрим базовый пример: генерация QR-кода, содержащего текстовую строку "Hello, PythonLib!".

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

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

public class QRCodeGenerator {
    public static void main(String[] args) {
        String text = "Hello, PythonLib!";
        int width = 300;
        int height = 300;

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

            BufferedImage qrImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
            for (int x = 0; x < width; x++) {
                for (int y = 0; y < height; y++) {
                    qrImage.setRGB(x, y, bitMatrix.get(x, y) ? 0xFF000000 : 0xFFFFFFFF);
                }
            }

            File outputFile = new File("qrcode.png");
            ImageIO.write(qrImage, "png", outputFile);
            System.out.println("QR-код сохранён в файл: " + outputFile.getAbsolutePath());

        } catch (WriterException | IOException e) {
            e.printStackTrace();
        }
    }
}

Этот код создаёт чёрно-белый QR-код размером 300x300 пикселей и сохраняет его в файл qrcode.png.

Настройка внешнего вида QR-кода

ZXing позволяет гибко настраивать параметры генерации. Вы можете изменить цвет модулей (квадратиков) и фона, добавить отступы (padding) или изменить уровень коррекции ошибок.

Изменение цвета и фона

В примере выше мы использовали чёрный (0xFF000000) и белый (0xFFFFFFFF) цвета. Вы можете заменить их на любые другие, например, синий и жёлтый:

qrImage.setRGB(x, y, bitMatrix.get(x, y) ? 0xFF0000FF                    

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