QRコード生成はgoogleAPIを使用する方法等ありますが、外部リンクを読み込む方法を採用するのはAPIの仕様変更やサービス停止を考慮すると危険です。
そこでPHPのライブラリ「endroid/qr-code」を使用したQRコード生成の方法を紹介します。
※ここではCakePHP3で実際に導入した方法を紹介します。
「endroid/qr-code」のインストール
Composerを使用して「endroid/qr-code」 のインストール を行います。
※Composerはインストール済みという想定で進めます。
composer.jsonのあるディレクトリで次のコマンドを実行
composer require endroid/qr-code
以上で「endroid/qr-code」 ライブラリの導入が完了です。
「endroid/qr-code」の使用方法
ライブラリの導入が完了したので、ここからは実際にQRコードを表示するまでの例を紹介します。
GitHubのREADMEに載っているコードを参考にしつつ、次のようなsample.phpを作成します。
<?php
require_once(__DIR__ . '/vendor/autoload.php');
use Endroid\QrCode\Builder\Builder;
use Endroid\QrCode\Encoding\Encoding;
use Endroid\QrCode\ErrorCorrectionLevel\ErrorCorrectionLevelHigh;
use Endroid\QrCode\Label\Alignment\LabelAlignmentCenter;
use Endroid\QrCode\Label\Font\NotoSans;
use Endroid\QrCode\RoundBlockSizeMode\RoundBlockSizeModeMargin;
use Endroid\QrCode\Writer\PngWriter;
// URLをセット
$url = 'https://www.qrcode-test.com/'
// QrCodeオブジェクトを生成して各種オプションを設定
$qrCode = QrCode::create($url)
->setEncoding(new Encoding('UTF-8'))
->setErrorCorrectionLevel(new ErrorCorrectionLevelLow())
->setSize(150)
->setMargin(25)
->setRoundBlockSizeMode(new RoundBlockSizeModeMargin())
->setForegroundColor(new Color(0, 0, 0));
// PngWriterオブジェクトを生成し、QrCodeオブジェクトの情報を書き込む
$writer = new PngWriter();
$result = $writer->write($qrCode);
// Base64でエンコード
$qrCodeBase64 = base64_encode($result->getString());
// QRコードのimgタグを生成してスタイル属性でサイズを設定
$qrCodeImg = '<img src="data:image/gif;base64,'.$qr_code_base64.'" alt="QR Code" style="width:200px;">';
// QRコードを画面に表示
echo $qrCodeImg;
?>
作成したsample.phpにブラウザでアクセスすると以下のようなQRコードが表示されます。
cakephp3で実際に導入したときには、wordpressのプラグインとcakeの内部APIでデータを行き来する必要があったため、Base64でエンコードしてからimgタグを生成しています。
※上記で紹介した方法の他にも出力の方法があるようなので、用途に合わせて変更してみてください。