Как автоматически генерировать QR-код с логотипом в PHP

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:

Наш код мира пример QR-кода

Не забудьте установить правильный путь для логотипа с прозрачностью, как вы можете видеть, 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 для объединенной версии (только один файл, но более медленный и менее точный код, потому что настроен отключенный кеш и более быстрое маскирование).

Повеселись !

Ссылка на основную публикацию
Adblock
detector