PHPでQRコードをシンプルに(Composerを使わずに)作成する。
2022年01月21日 12時00分 月齢:18.7[寝待月] 潮汐:中潮
(最終更新日:2024年07月12日)
3年前に投稿 | ウェブ・IT関係 | コメントはありません
6分ぐらいで読めます。
NEM Walletから煤のBinanceにNEMを送るQRコードやNEM Walletから煤のZaifにNEMを送るQRコードで、値からQRコードを作る仕組みを数年前に作りましたが、これらはGoogleのAPIを使っています。(参考:QRコードを簡単に作成する方法(googleを利用します))
- Google Chart API
https://chart.apis.google.com/chart?
?以降にパラメーターを設定する。
cht (チャートタイプ)・chs (チャートサイズ)・chl (エンコードするデータ)パラメーターが必須。- QR code generator
https://api.qrserver.com/v1/create-qr-code/?
?以降にパラメーターを設定する。
data(エンコードするデータ)パラメーター必須、size (QRコードのサイズ)・color(QR コードの色)などが指定できる。
ところが「Google ChartでQRコードを作成するのって非推奨」なんていうハナシもその当時からちらほらあって、なんとか自前でQRコードの生成ができないかなとずっと思っていました。
なぜこのタイミング? っていうのはさておき、ずっと悶々していたこの課題をどうにかしたくなったので、できるだけシンプルにPHPで作れるか試してみます。(実際はGDライブラリも必要だけど、今使っているエックスサーバーではもともとGDライブラリはインストールされているので、とくに何かをする必要はないみたいです。)
めっちゃ参考にしたのはこのサイト。感謝ですよー。Composerが何かわからず悪戦苦闘したけれど結局よくわからないでいるときに降り注いだ一条の光。
QRコードを生成するライブラリはここから。
というわけで、さっそくやってみましょう。
まずはpublic_htmlの直下にqrcodeというディレクトリを作りました。そこにPHP QR Code Create QR Codes in PHPからダウンロードしたファイルを展開して丸ごとアップロードします。結構なファイル数ですね。
次に3つのファイルを用意します。
index.php
このフォームに入力した文字をQRコードにするってわけですね。
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>QRcode generator</title>
</head><body>
<form method="GET" action="result.php">
<p><input type="text" name="data"></p>
<p><input type="submit" value="QRコードを表示する"></p>
</form>
</body></html>
create_qr.php
フォームのデータを受けてQRコードを作るのですが、とりあえず誤り訂正レベルはQ(25%)にしています。誤り訂正レベルは、レベルL:復元能力7%、レベルM:復元能力15%、レベルQ:復元能力25%、レベルH:復元能力30%とあるので、QRコードを使う環境によって変えてくださいネ。
<?php
// ライブラリ読み込み
require_once "phpqrcode/qrlib.php";// 画像の保存場所
$filepath = 'qr.png';// QRコードに入れるテキスト
$contents = $_GET['data'];
if(empty($_GET['data'])){
$contents = "hoge";
}else{
$contents = $_GET['data'];
}// QRコード画像を出力
QRcode::png($contents, $filepath, QR_ECLEVEL_Q, 6);//このファイルを画像ファイルとして扱う宣言
header('Content-Type: image/png');
readfile('qr.png');?>
ほかにも設定ができるのかもしれないけれど、このままでいきましょう。何も文字が入ってない状態で送信したときは、「hoge」を入れておきました。
「QRcode::png($contents, $filepath, QR_ECLEVEL_Q, 6);」のパラメーター部分ですが、調べてみると…
- QRコードのサイズ
生成するQRコードのサイズを指定できます。 デフォルト値は3で、その他の値を指定することができます。- QRコードのマージン
QRコードの周囲に設定する余白の幅を指定できます。 デフォルト値は4で、その他の値を指定することができます。
ということで、この設定だとサイズ6、マージン4(デフォルト)となるようですね。
result.php
結果を表示します。
<?php
// ライブラリを読み込む
require_once "phpqrcode/qrlib.php";// PHPファイルを画像のURLとして読み込む
$url = 'create_qr.php?data='.$_GET['data'];
?><!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>QRcode generator</title>
</head><body>
<p><img src="<?php echo $url ?>" /></p>
<p><a href="index.php">トップに戻る</a></p>
</body></html>
これら3つのファイルも同じディレクトリにアップロードしたら、準備はOKです。あとはCSSで味付けをしてあげましょう。
いろんな文字を入れて試してみると、無事にQRコードが表示されましたー。
UTF-8の4バイト文字もきちんと扱えましたー。
2024-04-05追記。以下の記事はぜひ目を通してほしいなー。きっと役に立つはず。
古い記事・新しい記事
- 古い記事 [2021年12月06日]
- ← NASが壊れて涙出そう。
- 新しい記事 [2022年02月09日]
- → いまだにHTML形式のメールが嫌い。っていうかこの世からなくなってもいい。
他にも「ウェブ・IT関係」カテゴリの記事はいかがですか。
- 電子書籍、ePUBかPDFか。
- EC-CUBE デフォルトテンプレートのセンタリングのズレを直す。
- Eee PC 1005HAを使うためにEMOBILE D26HWを購入。
- iPadの使い道がなくて余ってる。困ってる。
- Mebius MURAMASA MT1-H1Sのメモリ増設
- Nemgraphがつまらない。たぶんInstagramもつまらないんだろう。
- スレッドフロート型掲示板スクリプト(PHP・UTF-8・スマホ対応)
- 水中でも使えるカメラNicon COOLPIX S33が無遠慮に使えておもしろい。
- html lintがなんだかいろいろ変わってきている。
- EC-CUBE 2.12をいじってみる。