Генератор QR-кодов на Swift (iOS/macOS): библиотека EFQRCode
QR-коды стали неотъемлемой частью современных приложений — от авторизации до передачи ссылок и контактов. Если вы разрабатываете под iOS или macOS на Swift, вам не нужно писать сложные алгоритмы кодирования с нуля. Готовая библиотека EFQRCode предоставляет удобный API для создания, чтения и кастомизации QR-кодов. В этой статье разберём её возможности, установку и примеры использования.
Что такое EFQRCode?
EFQRCode — это библиотека с открытым исходным кодом, написанная на Swift. Она поддерживает iOS (начиная с версии 9.0) и macOS (10.11+). Основные возможности:
- Генерация QR-кодов из строк, URL-адресов, контактов vCard и текста.
- Настройка цвета, фона, размера и уровня коррекции ошибок.
- Добавление водяных знаков (логотипов, картинок) в центр QR-кода.
- Создание анимированных QR-кодов (GIF).
- Декодирование QR-кодов из изображений.
Библиотека использует встроенный CIFilter из Core Image, но добавляет множество удобных обёрток и кастомизаций.
Установка через Swift Package Manager
Добавьте пакет EFQRCode в ваш проект Xcode:
// В Xcode: File → Add Packages...
// Вставьте URL репозитория:
https://github.com/EFPrefix/EFQRCode.git
// Выберите версию (рекомендуется "Up to Next Major")
Либо вручную добавьте зависимость в Package.swift:
dependencies: [
.package(url: "https://github.com/EFPrefix/EFQRCode.git", from: "6.0.0")
]
Базовый пример генерации QR-кода
Самый простой способ создать QR-код из строки:
import EFQRCode
// Создание QR-кода из текста
if let image = EFQRCode.generate(
content: "https://pythonlib.ru",
size: EFIntSize(width: 300, height: 300)
) {
// Используйте image (CGImage) для отображения
// Например, в UIImageView на iOS:
let uiImage = UIImage(cgImage: image)
imageView.image = uiImage
}
Результат — стандартный чёрно-белый QR-код размером 300x300 пикселей.
Кастомизация цвета и фона
Вы можете задать произвольный цвет переднего плана и фона:
import EFQRCode
let qrImage = EFQRCode.generate(
content: "Hello, Swift!",
size: EFIntSize(width: 400, height: 400),
backgroundColor: UIColor.yellow.cgColor,
foregroundColor: UIColor.blue.cgColor,
inputCorrectionLevel: .h // максимальная коррекция ошибок
)
Параметр inputCorrectionLevel принимает значения .l (7%), .m (15%), .q (25%), .h (30%). Чем выше уровень, тем больше данных можно восстановить при повреждении.
Добавление логотипа (водяного знака)
Чтобы поместить логотип в центр QR-кода, используйте метод generateWithWatermark:
import EFQRCode
let watermarkImage = UIImage(named: "logo")?.cgImage
let qrWithLogo = EFQRCode.generateWithWatermark(
content: "https://pythonlib.ru",
size: EFIntSize(width: 500, height: 500),
watermark: watermarkImage,
watermarkMode: .center
)
Важно: логотип не должен занимать больше 30% площади, иначе код может не читаться.
Создание анимированного QR-кода (GIF)
EFQRCode поддерживает генерацию анимированных QR-кодов. Например, можно создать GIF с изменяющимися цветами:
import EFQRCode
let qrCodeGIF = EFQRCode.generateGIF(
content: "Animated QR",
size: EFIntSize(width: 200, height: 200),
data: [someData] // массив кадров
)
Для простой анимации можно использовать готовые цвета. Подробнее — в документации библиотеки.
Декодирование QR-кода из изображения
Чтобы прочитать QR-код с фотографии или скриншота:
import EFQRCode
let image = UIImage(named: "qrcode")?.cgImage
if let result = EFQRCode.recognize(image: image) {
print("Распознано: \(result)")
} else {
print("QR-код не найден")
}
Метод возвращает массив строк