【PHP】endroid/qr-codeを使ってQRコードを生成してみる


環境はWindows10。
WebサーバーはApache(XAMPP)です。

GitHub:https://github.com/endroid/qr-code
Packagist:https://packagist.org/packages/endroid/qr-code

インストール

Composerを使ってインストールします。

C:\xampp\htdocs\qrcode>composer require endroid/qr-code
Using version ^3.5 for endroid/qr-code
./composer.json has been created
Loading composer repositories with package information
Updating dependencies (including require-dev)
Package operations: 10 installs, 0 updates, 0 removals
  - Installing endroid/installer (1.1.5): Downloading (100%)
  - Installing symfony/polyfill-ctype (v1.11.0): Loading from cache
  - Installing symfony/inflector (v4.2.5): Downloading (100%)
  - Installing symfony/property-access (v4.2.5): Downloading (100%)
  - Installing symfony/options-resolver (v4.2.5): Downloading (100%)
  - Installing myclabs/php-enum (1.6.6): Downloading (100%)
  - Installing khanamiryan/qrcode-detector-decoder (1.0.2): Downloading (100%)
  - Installing dasprid/enum (1.0.0): Downloading (100%)
  - Installing bacon/bacon-qr-code (2.0.0): Downloading (100%)
  - Installing endroid/qr-code (3.5.8): Downloading (100%)
symfony/property-access suggests installing psr/cache-implementation (To cache access methods.)
bacon/bacon-qr-code suggests installing ext-imagick (to generate QR code images)
endroid/qr-code suggests installing symfony/http-foundation (Install if you want to use QrCodeResponse)
Writing lock file
Generating autoload files
Endroid Installer detected project type "all"

テスト実行

GitHubに載っているサンプルコードを実行してみます。

index.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();

ちゃんとiPhoneのカメラで認識します。

色々試す

index.php
<?php
require_once __DIR__ . '/vendor/autoload.php';

use Endroid\QrCode\QrCode;

// QRコードオブジェクトの生成
// 引数にQRコードにしたい情報の文字列を渡す。
$qrCode = new QrCode('https://qiita.com/danishi/items/fd8038ee373c04b94bf6');

// サイズ設定(ピクセル)
$qrCode->setSize(400);

// 余白の設定(ピクセル)
$qrCode->setMargin(10);

// 前景色の設定(RGBA)
$qrCode->setForegroundColor(['r' => 0, 'g' => 128, 'b' => 0, 'a' => 0]);

// 背景色の設定(RGBA)
$qrCode->setBackgroundColor(['r' => 255, 'g' => 255, 'b' => 255, 'a' => 0]);

// ロゴを設定
$qrCode->setLogoPath('qiita.png');

// ロゴのサイズ設定
$qrCode->setLogoSize(50, 50);

// ファイルに出力
$qrCode->writeFile(__DIR__.'/qrcode.png');

// ブラウザにQRコードを返す。
//header('Content-Type: '.$qrCode->getContentType());
//echo $qrCode->writeString();

// imgタグに表示
$img = base64_encode($qrCode->writeString());

?>
<html>
    <body>
        <img src="data:image/gif;base64,<?= $img ?>">
    </body>
</html>