Создание QR кода электронной (цифровой) визитки
Дата: 14.08.2021 Просмотры: 7285
Цифровая визитка в виде 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');
