Создание QR кода электронной (цифровой) визитки
Дата: 14.08.2021 Просмотры: 5423
Цифровая визитка в виде QR кода позволяет закодировать контакты пользователя и сохранять в телефон при сканировании.
Чтобы телефон и приложения могли понимать данные как контакты пользователя, они должны быть закодированы в формате vCard, пример исходных данных:
BEGIN:VCARD VERSION:3.0 FN:к.м.н., пр. Кожокарь Денис Григорьевич N:Пупкин;Василий;; ORG:Рога и Копыта URL:http://ru.wikipedia.org/Денис_Кожокарь EMAIL;TYPE=INTERNET:Denis.Kojokar@example.com END:VCARD
Для удобства воспользуемся библиотекой VObject
Установка
composer require sabre/vobject "^4.0"
Код
<?php $vcard = new VObject\Component\VCard([ 'VERSION' => '3.0', 'FN' => 'к.м.н., пр. Кожокарь Денис Григорьевич', 'TEL' => '+7 921 221 12 31', 'N' => ['Пупкин', 'Василий', 'Иванович', 'пр.,к.м.н.'], 'ORG' => 'Рога и Копыта', 'URL' => 'http://ru.wikipedia.org/Денис_Кожокарь', 'EMAIL' => 'Denis.Kojokar@example.com', ]); $vcard->UID = null; $vcard->PRODID = null; $string = $vcard->serialize();
Полученную строку передаем в библиотеку генерации QR кода Endroid QR Code
Установка
composer require endroid/qr-code
$result = Builder::create() ->writer(new PngWriter()) ->writerOptions([]) ->data($string) ->encoding(new Encoding('UTF-8')) ->errorCorrectionLevel(new ErrorCorrectionLevelHigh()) ->size(480) ->margin(10) ->roundBlockSizeMode(new RoundBlockSizeModeMargin()) ->build(); $result->saveToFile('qrcode.png');
Полный исходный код получается такой:
<?php require 'vendor/autoload.php'; use Sabre\VObject; use Endroid\QrCode\Builder\Builder; use Endroid\QrCode\Encoding\Encoding; use Endroid\QrCode\ErrorCorrectionLevel\ErrorCorrectionLevelHigh; use Endroid\QrCode\RoundBlockSizeMode\RoundBlockSizeModeMargin; use Endroid\QrCode\Writer\PngWriter; $vcard = new VObject\Component\VCard([ 'VERSION' => '3.0', 'FN' => 'к.м.н., пр. Кожокарь Денис Григорьевич', 'TEL' => '+7 921 221 12 31', 'N' => ['Пупкин', 'Василий', 'Иванович', 'пр.,к.м.н.'], 'ORG' => 'Рога и Копыта', 'URL' => 'http://ru.wikipedia.org/Денис_Кожокарь', 'EMAIL' => 'Denis.Kojokar@example.com', ]); $vcard->UID = null; $vcard->PRODID = null; $string = $vcard->serialize(); $result = Builder::create() ->writer(new PngWriter()) ->writerOptions([]) ->data($string) ->encoding(new Encoding('UTF-8')) ->errorCorrectionLevel(new ErrorCorrectionLevelHigh()) ->size(480) ->margin(10) ->roundBlockSizeMode(new RoundBlockSizeModeMargin()) ->build(); $result->saveToFile('qrcode.png');