Содержание
QR-коды являются популярным типом двумерного штрих-кода. Они также известны как жесткие ссылки или гиперссылки физического мира. QR-коды хранят до 4296 буквенно-цифровых символов произвольного текста. Этот текст может быть чем угодно, например, URL, контактная информация, номер телефона, даже стихотворение! QR-коды могут быть считаны оптическим устройством с соответствующим программным обеспечением. Такие устройства варьируются от специальных считывателей QR-кодов до мобильных телефонов.
Как бы то ни было, все знают, что такое QR-код, но что может быть круче, чем пользовательский QR-код с вашим собственным логотипом? С помощью PHP эту задачу не так легко выполнить, однако не невозможно.
Есть 2 способа достижения вашей цели, либо вы используете библиотека, которая генерирует QR-коды и позволяют настроить его (возможна настройка логотипа) или Вы можете реализовать это самостоятельно с помощью PHP, Вы можете отобразить изображение на другом изображении, это означает, что мы собираемся отобразить логотип поверх уже созданного изображения QR-кода.
1. Используйте библиотеку
Библиотеки делают вашу жизнь проще, в этом случае для реализации собственного логотипа в QR-коде вы можете использовать Пакет Endroid QRCode. Эта библиотека основана на QRcode Perl CGI PHP скрипты от Y. Swetake, и это помогает вам генерировать изображения, содержащие QR-код.
Предпочтительный способ установки этой библиотеки — через composer, для установки выполните следующую команду composer:
composer require endroid/qrcode
Или отредактируйте свой composer.json
вручную и выполните установку composer:
{
"require": {
"endroid/qrcode": "^1.7",
}
}
Теперь, после установки, включите класс с оператором использования в ваш класс:
use Endroid\QrCode\QrCode;
И создайте свой первый QR-код с логотипом, используя следующий код:
Вернуть QR-код с логотипом в качестве ответа
// Include the QRCode generator library
use Endroid\QrCode\QrCode;
$qrCode = new QrCode();
$qrCode->setText('http://site.com')
->setSize(300)
->setPadding(10)
->setErrorCorrection('high')
->setForegroundColor(array('r' => 0, 'g' => 0, 'b' => 0, 'a' => 0))
->setBackgroundColor(array('r' => 255, 'g' => 255, 'b' => 255, 'a' => 0))
// Path to your logo with transparency
->setLogo("logo.png")
// Set the size of your logo, default is 48
->setLogoSize(98)
->setImageType(QrCode::IMAGE_TYPE_PNG)
;
// Send output of the QRCode directly
header('Content-Type: '.$qrCode->getContentType());
$qrCode->render();
Сохранить QR-код с логотипом на сервере
// Include the QRCode generator library
use Endroid\QrCode\QrCode;
$qrCode = new QrCode();
$qrCode->setText('http://site.com')
->setSize(300)
->setPadding(10)
->setErrorCorrection('high')
->setForegroundColor(array('r' => 0, 'g' => 0, 'b' => 0, 'a' => 0))
->setBackgroundColor(array('r' => 255, 'g' => 255, 'b' => 255, 'a' => 0))
// Path to your logo with transparency
->setLogo("logo.png")
// Set the size of your logo, default is 48
->setLogoSize(98)
->setImageType(QrCode::IMAGE_TYPE_PNG)
;
$qrCode->save('qrcode.png');
Выполнение любого из предыдущих методов должно генерировать следующий QRCode:
Не забудьте установить правильный путь для логотипа с прозрачностью, как вы можете видеть, Endroid QRCode предлагает множество полезных методов в качестве пользовательских меток, которые могут быть полезны для вас, пожалуйста, посетите хранилище для получения дополнительной информации.
2. Ручная реализация
Эта функция надежна, так как QR-код будет по-прежнему читаемым, даже если в центре будет небольшое изображение.
Быстрый пример
В этом случае мы будем использовать простой фрагмент, который будет извлекать QR-код из API Chart из Google, который возвращает сгенерированный QR-код.
Благодаря своей простоте является (в моем случае) самым простым решением.
Замечания: предыдущий фрагмент сгенерирует тот же QR-код, что и изображение этой статьи, вы можете протестировать его в PHPFiddle или локально в своей среде. Если вы хотите, вы можете уточнить метод, чтобы использовать более сложный метод для создания запроса на сайт Google вместо file_get_contents
,
Основное устранение неполадок
Логотип полностью прозрачный и покрывает QR-код
Эта проблема иногда возникает, когда существует прозрачность, но она удаляет область, где находится QR-код, например:
Чтобы решить это, нам нужно использовать следующие строки
// START TO DRAW THE IMAGE ON THE QR CODE
$logo = imagecreatefromstring(file_get_contents($logopath));
/**
* Fix for the transparent background
*/
imagecolortransparent($logo , imagecolorallocatealpha($logo , 0, 0, 0, 127));
imagealphablending($logo , false);
imagesavealpha($logo , true);
Эти строки будут препятствовать тому, чтобы прозрачность покрывала QR-код, Однако это будет по-прежнему с прозрачностью, как нам нужно.
Наконец наш фиксированный фрагмент будет выглядеть так:
';
Хотя есть библиотека с открытым исходным кодом, которая поможет вам, вы все равно можете добиться этого с помощью простого PHP-кода.
рекомендации
Как вы можете видеть во втором методе, мы не используем какую-либо библиотеку. Мы просто загружаем ответ QR-изображения из API Google Charts и наносим на него наш логотип. Однако вы можете не захотеть зависеть от сервера Google, так как этот API устарел в соответствии с домашняя страница здесь и они рекомендуют вам использовать активно поддерживаемый API Google Charts (который не поддерживает QR-коды).
Мы рекомендуем использовать библиотеку QR-кода с открытым исходным кодом в качестве TCPDF (который также генерирует PDF) или самый распространенный и известный PHP QR-код.
PHP QR-код библиотека с открытым исходным кодом (LGPL) для создания QR-кода, двумерного штрих-кода. На основе библиотеки libqrencode C предоставляет API для создания изображений штрих-кода QR Code (PNG, JPEG благодаря GD2). Реализовано исключительно на PHP, без внешних зависимостей (кроме GD2, если необходимо).
Некоторые из функций библиотеки включают в себя:
- Поддерживает версии QR Code (размер) 1-40.
- Числовое, буквенно-цифровое, 8-битное и кандзи-кодирование.
- Реализовано чисто на PHP, никаких внешних зависимостей кроме GD2.
- Экспортирует в PNG, JPEG изображения, также экспортирует как битовую таблицу.
- TCPDF 2-D интеграция штрих-кода API.
- Прост в настройке.
- Кэш данных для ускорения расчета.
- Предоставленный инструмент слияния помогает развернуть библиотеку в виде одного большого файла без зависимостей, который легко «включать и не запоминать».
- Отладка дампа данных, ведение журнала ошибок, сравнение времени.
- API документация.
- Подробные примеры.
- 100% с открытым исходным кодом, лицензия LGPL.
Следующий фрагмент демонстрирует работающее решение с PHP QR Code:
';
?>
Замечания: включите qrlib.php для полной версии (также вы должны предоставить все библиотечные файлы формы пакета плюс dir кэша) или phpqrcode.php для объединенной версии (только один файл, но более медленный и менее точный код, потому что настроен отключенный кеш и более быстрое маскирование).
Повеселись !