Главная->Уроки по php->Генерация QR кода в приложениях на PHP
Генерация QR кода в приложениях на PHP
Популярность QR кодов постепенно набирает высоту благодаря возможности включать большой объем данных в единичное изображение и распространению смартфонов, которые обеспечивают быстрое сканирование и декодирование информации. Двумерный полосовой код был изобретен в Японии. На него имеется патент, но изобретатель, Denso Wave, решил сделать QR код доступным для всех. В данном уроке мы научимся быстро генерировать QR код в приложении PHP. Для решения задачи будем использовать библиотеку PHP QR Code, которая не зависит от других библиотек. Генерируем ваш первый QR код Сначала нужно загрузить библиотеку PHP QR Code с GitHub. Затем распаковать архив в место, где тестируются ваши разработки, например http://localhost/phpqrcode, для запуска демонстрации. Страница проекта будет иметь вид, изображенный на рисунке ниже. Набиваем текст в поле ввода и получаем изображение соответствующего QR кода. Для работы приложения требуется PHP с расширением GD2. Демонстрационная страница бибилиотеки PHP QR code Использовать библиотеку в своих приложениях очень просто: 1 <?php 2 include "phpqrcode/qrlib.php"; 3 4 // Создаем и выводим QR код с текстом 5 QRcode::png("My First QR Code"); Две строчки кода позволяют получить готовое изображение QR кода в вашем приложении. Но библиотека предоставляет больше возможностей. Возможности библиотеки Полный вызов функции выглядит следующим образом: 1 <?php 2 QRcode::png("http://www.ruseller.com", "test.png", "L", 4, 4); Первый параметр определяет текст или данные, которые будут кодированы в изображении. Второй параметр определяет имя файла, который будет содержать генерированное изображение. По умолчанию здесь располагается логическое значение false, и изображение будет отправляться в браузер. Третий параметр указывает уровень коррекции ошибок для генерируемого полосового кода, переданного в виде одной строки. Здесь определяется сколько кодовых слов (8-бит на кодовое слово) может быть восстановлено в поврежденном изображении QR кода с помощью алгоритма коррекции ошибок Рида-Соломона. Более высокий уровень коррекции ошибок приводит к меньшей плотности данных в коде заданного размера. Ниже приводится таблица соответствия процента восстановления ошибок и строковых констант для метода QRcode::png(). Уровень Процент восстановления Константа Низкий 7% L Средний 15% M Четверть 25% Q Высокий 30% H Четвертый параметр определяет размер каждого квадрата в коде (в px). Каждый квадрат в коде (также называется “пиксель” или “модуль”) имеет размер 4×4px по умолчанию. Пятый параметр указывает размер белой рамки вокруг кода, измеренной в размерах "модуля" (для нашего случая - 16px с каждой стороны для модуля 4×4px). Библиотека поддерживает экспорт изображений в формате PNG, SVG, и EPS. Для генерации изображения в нужном формате нужно использовать метод с соответствующим именем png(), svg() или eps(). Также можно изменять цвет фона и кода с помощью дополнительных параметров: 1 <?php 2 $backColor = 0xFFFF00; 3 $foreColor = 0xFF00FF; 4 5 // Создаем QR код в формате SVG 6 QRcode::svg("http://phpmaster.com", "test-me.svg", "L", 4, 4, false, $backColor, $foreColor); Шестой параметр (в примере имеет значение false) при проверке оказался бесполезным. В соответствии с документацией, если он имеет значение true метод должен сохранять изображение и передавать его в браузер. Но описанного результата получить не удалось. Библиотека также имеет другие возможности, например, кэширование и определение скорости генерации изображения. Но для работы они не имеют большого значения. Вычисление размера изображения кода Для определения размера изображения кода можно использовать простую формулу: 1 Размер изображения (px) = (Пикселей в одном модуле) × (Размер модуля + 8) Количество пикселей в модуле определяется в четвертом параметре при вызове метода. Размер модуля выбирается из таблицы размеров кода по следующим правилам: Выбираем столбец типа данных (data bits, numeric, alphanumeric, binary, или Kanji). Здесь определяется максимальная длина данных определенного типа, которые могут быть закодированы. В нашем примере использовался тип alphanumeric, но если будет кодироваться строка UTF-8, то следует использовать тип binary. Kanji применяется для Японского языка. Определяем нужный уровень коррекции ошибок. Находим для заданной длины строки минимальный номер версии, которая может хранить данные такой длины. В примере используется 24 символа с уровнем L, поэтому значение будет из первой строки. Получаем размер модуля (для примера будет 21×21). Библиотека PHP QR Code использует следующий номер для обеспечения запаса. Если вычислить размер модуля для примера, то можно определить размер генерируемого изображения: 1 Размер изобаржения = 4 × (21 + 8) = 116×116px Но библиотека PHP QR Code использует модуль следующего размера: 1 Размер изображения = 4 × (25 + 8) = 132×132px Использование QR кодов Наиболее популярное применение QR кодов - кодирование адресов URL веб сайтов, например, страниц фан-клубов в социальных сетях, онлайн описания продуктов и так далее. Ниже приводится пример визитной карточки, на которой QR кодом указан адрес профиля в LinkedIn. Пример использования QR кода Однако сфера применения QR кодов не имеет границ. В них можно хранить телефонные номера, адреса e-mail, краткие описания товаров и прочее. А использование специальных программ на смартфонах для чтения QR кодов существенно облегчает их использование в практической жизни человека. Когда встает вопрос об использовании QR кода, реальные ограничения заключаются только в размере данных и пространстве для размещения .