PHPでロゴ入りのQRコードを作成する方法

  • 2020.02.16
  • PHP
PHPでロゴ入りのQRコードを作成する方法

PHPでロゴ入りQRコードを作成する場合、調べたら「endroid/qr-code」ライブラリ有名で、簡単にできると書いてあったのですが、私のAndroidスマホに標準で付いているQRコードリーダーでは、ロゴ無しQRコードも読めなかったので、これでは意味がないと思い、やめました。
iPhoneは、問題なく読めました。

そこで「phpqrcode/qrlib」を使うことにしました。

ダウンロードは、公式サイトから行えます。サンプルもありました。
http://phpqrcode.sourceforge.net/

ソースと説明

仕組みは、「phpqrcode/qrlib」ライブラリでQRコード画像を作成し、PHPのimagecopyresampled()関数でロゴ画像を重ねております。

// ライブラリ読み込み
require_once "phpqrcode/qrlib.php";

// 画像の保存場所
$filepath = 'data/qrcode.png';

// ロゴの画像
$logopath = 'logo.png';

// QRコードに入れるテキスト
$codeContents = 'こんにちは!QRコードです。';

// QRコード画像を出力 ※詳しくは公式サイトのマニュアルを確認ください。
QRcode::png($codeContents, $filepath, QR_ECLEVEL_M, 6);

// ロゴ画像を読み込みます。
$qr = imagecreatefrompng($filepath);

// QRコード画像を読み込みます。
$logo = imagecreatefromstring(file_get_contents($logopath));

// QRコード画像のサイズを取得
$qr_width 	= imagesx($qr); // 横
$qr_height 	= imagesy($qr); // 縦

// ロゴ画像のサイズを取得
$logo_width 	= imagesx($logo); // 横
$logo_height 	= imagesy($logo); // 縦

// ロゴ画像のサイズを縮小
$logo_qr_width 	= $qr_width / 4;                // ロゴ画像の横サイズを縮小
$scale 		= $logo_width / $logo_qr_width; // 尺度
$logo_qr_height = $logo_height / $scale;        // ロゴ画像の縦サイズを縮小

// ロゴ画像の配置する座標
$logo_x = ($qr_width / 2) - ($logo_qr_width / 2);
$logo_y = ($qr_height / 2) - ($logo_qr_height / 2);

// QRコード画像とロゴ画像を重ねます。※PHPのマニュアルを参照
imagecopyresampled($qr, $logo, $logo_x, $logo_y, 0, 0, $logo_qr_width, $logo_qr_height, $logo_width, $logo_height);

// ロゴ入りのQRコード画像を出力
imagepng($qr, $filepath);

// ブラウザに出力
echo '<img src="'.$filepath.'" />';

ライブラリを読み込みます。

// ライブラリ読み込み
require_once "phpqrcode/qrlib.php";

QRコードを作成します。

// QRコード画像を出力 ※詳しくは公式サイトのマニュアルを確認ください。
QRcode::png($codeContents, $filepath, QR_ECLEVEL_M, 6);

このサンプルでは、QRコードのレベルをMにし、サイズを6にしてます。

QRコード画像とロゴ画像を結合します。

// QRコード画像とロゴ画像を重ねます。※PHPのマニュアルを参照
imagecopyresampled($qr, $logo, $logo_x, $logo_y, 0, 0, $logo_qr_width, $logo_qr_height, $logo_width, $logo_height);

このサンプルでは、ロゴ画像がQRコードの中央に表示されるようにしています。

結果

このように表示されます。

ロゴ画像は、大きすぎるとQRコードが読み込めませんでした。ほとんどのQRコードで読めるように微調整が必要です。
PHPで作成したQRコードが、問題なく読めるライブラリを探すのに苦労しました。

参考サイト

http://phpqrcode.sourceforge.net/
http://phpqrcode.sourceforge.net/examples/index.php?example=008
https://ourcodeworld.com/articles/read/225/how-to-generate-qr-code-with-logo-easily-in-php-automatically