Генератор QR-кодов на Kotlin: создание и настройка QR-кодов

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

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

Начать курс

Генератор QR-кодов на Kotlin: полное руководство

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

Почему Kotlin и ZXing?

Kotlin — это статически типизированный язык, работающий поверх JVM, который активно поддерживается Google для разработки Android. Его синтаксис чист и выразителен, что делает код более читаемым и менее подверженным ошибкам. Библиотека ZXing является де-факто стандартом для работы с QR-кодами и штрих-кодами в экосистеме Java/Kotlin. Она поддерживает множество форматов (QR Code, Data Matrix, Aztec и другие) и предоставляет гибкие возможности для кастомизации.

Установка и настройка

Для начала работы добавьте зависимость в ваш файл build.gradle.kts (если вы используете Gradle):

// Для JVM проекта
implementation("com.google.zxing:core:3.5.3")
implementation("com.google.zxing:javase:3.5.3")

// Для Android проекта (обычно достаточно core)
implementation("com.google.zxing:core:3.5.3")

Если вы работаете с Maven, добавьте соответствующие зависимости в pom.xml.

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

Давайте создадим простую функцию, которая генерирует QR-код из текстовой строки и сохраняет его в виде изображения PNG.

import com.google.zxing.BarcodeFormat
import com.google.zxing.qrcode.QRCodeWriter
import com.google.zxing.client.j2se.MatrixToImageWriter
import java.nio.file.Paths

fun generateQRCode(text: String, filePath: String, width: Int = 300, height: Int = 300) {
    val writer = QRCodeWriter()
    val bitMatrix = writer.encode(text, BarcodeFormat.QR_CODE, width, height)
    val path = Paths.get(filePath)
    MatrixToImageWriter.writeToPath(bitMatrix, "PNG", path)
    println("QR-код успешно сохранён в: $filePath")
}

fun main() {
    generateQRCode("https://pythonlib.ru", "qrcode_pythonlib.png")
}

Объяснение кода:

  • QRCodeWriter() — создаёт экземпляр writer для QR-кодов.
  • encode() — кодирует строку в битовую матрицу (черно-белое изображение).
  • MatrixToImageWriter.writeToPath() — удобный метод для сохранения матрицы в файл.

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

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

import com.google.zxing.client.j2se.MatrixToImageConfig
import java.awt.Color
import java.awt.image.BufferedImage

fun generateColoredQRCode(text: String, filePath: String, 
                           foregroundColor: Color = Color.BLACK, 
                           backgroundColor: Color = Color.WHITE) {
    val writer = QRCodeWriter()
    val bitMatrix = writer.encode(text, BarcodeFormat.QR_CODE, 300, 300)
    
    val config = MatrixToImageConfig(foregroundColor.rgb, backgroundColor.rgb)
    val bufferedImage = MatrixToImageWriter.toBufferedImage(bitMatrix, config)
    
    // Сохраняем BufferedImage в файл
    val outputFile = java.io.File(filePath)
    javax.imageio.ImageIO.write(bufferedImage, "PNG", outputFile)
    println("Цветной QR-код сохранён в: $filePath")
}

fun main() {
    generateColoredQRCode("Hello, Kotlin!", "colored_qr.png", 
                          foregroundColor = Color(0x00AA00), // Зелёный
                          backgroundColor = Color.WHITE)
}

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

Часто требуется разместить логотип компании в центре QR-кода. Это делается путём наложения изображения поверх сгенерированной матрицы. Важно помнить, что логотип не должен закрывать слишком много модулей (пикселей), иначе код может не считываться. Рекомендуется, чтобы логотип занимал не более 15-20% площади.

import java.awt.Graphics2D
import java.awt.image.BufferedImage
import javax.imageio.ImageIO

fun generateQRWithLogo(text: String,                    

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