Как генерировать qr код на php?
Ответ
Первый способ генерации QR-кода: с помощью Google Chart.
Пример:
1 |
<img src="http://chart.apis.google.com/chart?cht=qr&chs=300x300&chl=itmathrepetitor"> |
Результат:
Как видим, генерация происходит онлайн с параметрами, переданными в виде GET-запроса. Обязательных параметра три: cht=qr (постоянное значение), chs=300x300 (ширина и высота изображения) и chl=itmathrepetitor (данные для кодирования). Заметим, что длина строки запроса не должна превышать 2 Kb, иначе придется формировать POST-запрос.
За кодировку отвечает необязательный параметр choe, который по умолчанию равен UTF-8. Для изменения кодировки можно добавить &choe=ISO-8859-1 или
Shift_JIS (кодировка японского языка), что редкость.
Так же можно управлять уровнем коррекции ошибок. За это отвечает параметр chld, равны L по умолчанию (восстановление 7% ошибок). Доступны еще уровни M (15%), Q (25%), H (30%). К параметру chld через символ | может быть дополнительно указана ширина белой границы вокруг фрагментов qr-кода. Например, chld=L|8. Это ширина измеряется в строках (rows) и по умолчанию равна 4. А сама характеристика таких фрагментов qr-кода называется версией, которая варьируется от 1 (21 строка) до 40 (177 строк). Мобильные устройства могут читают qr-код до версии 4. Самые лучшие qr-ридеры способны прочитать и версию 40.
Второй способ генерации QR-кода: с помощью php-библиотеки QrCode.
Скачать можно здесь. Для использования необходима библиотека GD2 (и это не проблема).
Пример:
Файл gen_qr.php:
1 2 3 |
include('phpqrcode/qrlib.php'); $param = $_GET['url']; // здесь не хватает защиты от вредоносного кода QRcode::png($param); // генерируем qr-код и выводим напрямую как png-поток |
Файл index.php:
1 |
<img src="gen_qr.php?url=itmathrepetitor" width="300" height="300"> |
Как и в первом способе, возможна настройка параметров генерации qr-кода. Описание функции генерации:
1 2 3 4 5 6 7 |
static png ($text, $outfile=false, $level=QR_ECLEVEL_L, $size=3, $margin=4, $saveandprint=false ) |
$text - строка для кодирования, $outfile - имя файла для сохранения png-изображения (если false, то вывод в браузер с необходимыми заголовками), $level - уровень коррекции ошибок (QR_ECLEVEL_L, QR_ECLEVEL_M, QR_ECLEVEL_Q or QR_ECLEVEL_H), $size - размер пикселя (множитель для каждого виртуального пикселя, следует увеличить, если изображение получается нечетким), $margin - ширина белой границы, $saveandprint - если true, то происходит и вывод в браузер, и сохранение в файл, иначе только сохранение в файл (полезно только при использовании в паре с $outfile).
Пример сохранения в файл из официальной документации
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
include('../lib/full/qrlib.php'); include('config.php'); // директория для сохранения $tempDir = EXAMPLE_TMP_SERVERPATH; $codeContents = 'This Goes From File'; // генерируем имя файла (через md5) $fileName = '005_file_'.md5($codeContents).'.png'; $pngAbsoluteFilePath = $tempDir.$fileName; $urlRelativeFilePath = EXAMPLE_TMP_URLRELPATH.$fileName; // генерация if (!file_exists($pngAbsoluteFilePath)) { QRcode::png($codeContents, $pngAbsoluteFilePath); echo 'Файл создан'; echo '<hr />'; } else { echo 'Файл уже существует.'; echo '<hr />'; } echo 'Файл PNG на сервере: '.$pngAbsoluteFilePath; echo '<hr />'; // показываем в браузере echo '<img src="'.$urlRelativeFilePath.'" />'; |
Третий способ генерации qr-кода: использование QRCode-Generator-PHP-Class.
Класс использует Google Chart и требует PHP 5.2.4 или выше.