つい先日 PHPでQRコードを生成する機会があったので少し調べてみました。実装は大変かと思っていましたが、ありがたいことに QRコードを生成する PHPライブラリはいくつも公開されていて、簡単に QRコードを生成することができそうです。そこで今回は、endroid/qr-code を使って PHPでQRコードを生成する方法をまとめてみました。
Composer のインストール
endroid/qr-code のインストールに Composer を使いますので、インストールしておきます。
公式サイトの Download Composer ページ に記載されてる以下のコマンドを実行して Composer をダウンロードします。
php -r "if (hash_file('sha384', 'composer-setup.php') === 'a5c698ffe4b8e849a443b120cd5ba38043260d5c4023dbf93e1558871f1f07f58274fc6f4c93bcfd858c6bd0775cd8d1') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
php composer-setup.php
php -r "unlink('composer-setup.php');"
「composer.phar」というファイルができますので、パスが通った適当な場所に移動して「composer」にリネームします。
実行権限をつけます。
composer が実行できることを確認します。
(下のような表示があればOKです)
Composer version 1.9.1 2019-11-01 17:20:17
endroid/qr-code のインストール
テスト用に適当なディレクトリを作成して、そこに移動しておきます。
cd qrtest/
composer で endroid/qr-code をインストールします。(「インストール」とは言っても endroid/qr-code と依存するライブラリがダウンロードされるだけです)
以下のファイルやディレクトリがダウンロードされます。
QRコードの生成
QRコードの生成用の PHPファイルを作成します。下の場合は文字列「Life is too short to be generating QR codes」を埋め込んだ QRコードが生成されます。
sample.php
<?php require_once(__DIR__ . '/vendor/autoload.php'); use Endroid\QrCode\QrCode; $qrCode = new QrCode('Life is too short to be generating QR codes'); header('Content-Type: '.$qrCode->getContentType()); echo $qrCode->writeString();
確認のため PHPのビルトインWebサーバーを起動します。(Ctrl-Cで終了できます)
ブラウザで http://localhost:8000/sample.php にアクセスすると生成された QRコードが表示されます。
表示された QRコードを読み取って「Life is too short to be generating QR codes」が表示されていればOKです。
おわりに
よく使いそうなオプションをまとめてみました。これ以外にもQRコードの誤り訂正レベルなども指定できます。詳しくは endroid/qr-code/README.md をご参照ください。
<?php require_once(__DIR__ . '/vendor/autoload.php'); use Endroid\QrCode\QrCode; // QRコードに埋め込む文字列の指定 $qrCode = new QrCode('https://blog.apar.jp/'); // QRコードのサイス(単位:ピクセル) $qrCode->setSize(100); // QRコードの周囲の余白(単位:ピクセル) $qrCode->setMargin(10); // QRコードの色(RGBAで指定) $qrCode->setForegroundColor(['r' => 239, 'g' => 239, 'b' => 239, 'a' => 0]); // 背景の色(RGBAで指定) $qrCode->setBackgroundColor(['r' => 52, 'g' => 81, 'b' => 163, 'a' => 0]); // QRコードの中央に配置するロゴファイルのパス $qrCode->setLogoPath('logo.png'); // ロゴサイズ(単位:ピクセル)大きくしすぎるとQRコードが読み取りできないので注意 $qrCode->setLogoSize(20, 20); header('Content-Type: '.$qrCode->getContentType()); echo $qrCode->writeString();
コメント