QRコードについて
QRコードはスマホのバーコードリーダーで読み取ってWebサイトにアクセスしたり、電話番号などを入れておいて読み取ると連絡先に簡単に追加できたりと色々便利なバーコードです。
このブログの場合は以下です。
このQRコードについて簡単にメモしておきます。
URIスキーム
QRコード生成ツールには単純なテキスト以外にメールアドレスや電話番号を入力できるものがありますが、これらはURIスキームを使って認識します。
Webサイトでメールアドレスをクリックすると関連付けされたメーラー(Thunderbirdやoutlookなど)が起動しますが、これは以下のようなMAILTOスキームの形式で記載されているからです。
<a href="mailto:sample@sakue.com">メール</a>
QRコードも似たような仕組みで、以下の場合はメールアドレスとして認識します。
MAILTO:<メールアドレス>
このようにQRコード側での指定が可能ですが、QRコードリーダー側でも文字列がURLなのかメールアドレスかなどを自動で判定するものが多いため、通常のテキストとしてURLを記載した場合でも、大抵はURLとして認識し、対象のアプリ(ブラウザ)で起動してくれたりします。
QRコード生成ツールのテキスト欄とURLスキーム
QRコード生成ツールはメールアドレスへのリンクであれば、「宛先」や「題名」などが入力できるものがありますが、これは前述したURLスキームの表記にして生成しています。
このため、対象のURLスキームに対応していないQRコード生成ツールでも、形式にしたがってテキスト欄に記載すればOKです。
例えばメールアドレスを単にテキスト欄に記載しても、メールアドレスとして認識するかどうかはQRコードリーダーによりけりですが、以下のように記載することで明確にメールアドレスとして認識します。
メールアドレスが「test@example.com」の例です。
mailto:test@example.com
この文字列を書いたQRコードを読み取ると、「連絡先に追加」したり、「メールの送信」というボタンが表示されますが、メールアドレスとして認識しているためです。
件名も追加したい場合は「?subject=件名の文字列」というパラメータを末尾に追加します。
mailto:test@example.com?subject=件名
本文も追加する場合は、さらに末尾に「&body=本文の文字列」というパラメータを追加します。
mailto:test@example.com?subject=件名&body=本文
パラメータをつける際に最初に出てくる「?」は、以降はパラメータという意味で、それ以降に連続するパラメータは「&」で区切ります。
このため、件名が必要なく、本文だけ入れたい場合は以下のようにします。
mailto:test@example.com?body=本文
動的なQRコード生成
サーバー側で動作するスクリプトはPHPやPerlが多いと思いますが、言語ごとに便利なライブラリを提供しているサービスがあり、QRコード用ライブラリも非常に多いので好みのものが使えます。
PHPならPEARやPECL、PerlならCPANなどで探せます。
細かな説明は省きますが、例えばPerlのImager::QRCodeのexamplesは以下のようになっていました。
#!/usr/local/bin/perl use strict; use Encode; use Imager::QRCode qw(plot_qrcode); my %params = ( size => 2, margin => 2, version => 1, level => 'M', casesensitive => 1, lightcolor => Imager::Color->new(255, 255, 255), darkcolor => Imager::Color->new(0, 0, 0), ); my $qrcode = Imager::QRCode->new(%params); my $text = encode('cp932', decode('utf8', "QRコードは(株)デンソーウェーブの登録商標です。QR Code is registered trademarks of DENSO WAVE INCORPORATED in JAPAN and other countries.")); my $img1 = $qrcode->plot($text); $img1->write(file => "qrcode1.gif"); my $img2 = plot_qrcode($text, %params); $img2->write(file => "qrcode2.gif");
パラメータや出力先の指定はありますが、基本的に「$text =」の部分でQRコードに埋め込む文字列を指定すればOKと非常に使いやすくできています。
誤り訂正レベル
QRコードは汚れなどで読み取れない部分があっても読めるよう、生成時に誤り訂正レベルというオプションがあり、レベルをあげるほど汚れに強くなります。
しかし、Webサイトで使う分には汚れを気にする必要はなく、レベルを上げるほどQRコードも複雑になり、読み取りにくくなるためWebサイトで使う分には誤り訂正レベルは低い方が良いです。
以下は同じ文字列(https://sakue.com/wordpress/)で誤り訂正レベルのみを変更した例です。
誤り訂正レベルL(7%の復元が可能)
誤り訂正レベルH(30%の復元が可能)
上記のように、レベルを上げるとQRコードも複雑になり、大抵の場合はQRコードは小さく表示するでしょうから、よりシンプルな方が読み取りやすいと思います。
コメントフォーム