Генерация 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