さわだのノート

書籍のお仕事に役立つかもしれない思いつきを記録しています。

RSS: 記事の更新情報 Rss Feed

WindowsでもMacでもLinuxでもOK! PerlでさくっとQRコードを作ろうぜ

昔、Android関連の書籍でQRコードをひとつずつ手作業で作っていたことがあります。
刺身にタンポポをのせるのと同じような、なんだかむなしい感覚に襲われました。

結局その後はPowerShellコマンドラインで使えるQRコード作成アプリを組み合わせて何とかしのぎました。Windowsはこうした細かなアプリが充実しているのが本当にすばらしい。

それで今回、またQRコードを作る必要が出てきました。しかし現在の作業環境はMacなので、Windows用のソフトウェアは利用できません。

というわけで、PerlQRコードが作れる方法を探ってみました。
「Imager::QRCode」というのが結構よさそうなモジュールもあるようなのですが、

Imager API version incorrect loaded 5 vs expected 4

こんなエラーが出てきて動いてくれる気配がなかったので、今回は却下としました。

再度ググってみると、GoogleさんがQRコードを自動生成するAPIを提供してくれているみたいです。GETリクエストでPNG形式の画像を作ってくれるみたいですね。
Google Chart Tools: Infographics - Infographics (Deprecated) — Google Developers

ベースのURLはこちら。

https://chart.googleapis.com/chart

パラメーターの設定は下記のようになっております。

パラメータ 必須? 説明
cht=qr 必須 QR codeを指定
chs=x 必須 画像のサイズ。幅と高さは同じに
chl= 必須 QRコードに変換する情報。URLエンコードしとく
choe= 自由 デフォルトがutf-8なので放っておく
chld= 自由 エラーレベルとマージン。エラーレベルはMに

あとはGETリクエストを送って取得したデータを保存すればOKですね。
できあがったコードがこちら。

#!/usr/bin/perl
use strict;
use warnings;
use utf8;
use open IO => qw/:utf8 :std/;
use autodie qw/open close/;
use URI;
use LWP::Simple qw/get/;

my $uri = URI->new('https://chart.googleapis.com/chart');
my $qr_info = 'https://play.google.com/store/apps/details?id=com.intsig.camscanner';

$uri->query_form(
  cht  => 'qr',
  chs  => '500x500',
  chl  => $qr_info,
  chld => 'M|2',
);
my $data = get($uri);
open my $out, '>:raw', 'sample.png';
print $out $data;

インターネットに接続しないと使えないし、やり過ぎると制限されるかもしれないし、そもそもローカルでやるより絶対遅いしで、いろいろと微妙な感のあるコードですが、手作業でひとつずつ作っていくよりはまあましかな。

Imager::QRCodeが普通に使えるのがいちばんなんですけどね。