Perl で QRcode を作ってみる

業務の都合上、Perl で QRcode を作る必要があったのでそのやり方をメモしとく。

GD::Barcode::QRcode を使って QRcodeを作成する

おそらくこのやり方が、事実上のデファクトスタンダードだと思う。

#!/usr/bin/perl
use strict;
use warnings;
use GD::Barcode::QRcode;

my $url = 'http://www.google.com';
my $qr  = GD::Barcode::QRcode->new($url, {
    Ecc => 'M', Version => 3, ModuleSize => 2,
})->plot;

open my $fh, '>', "qr.gif" or die;
print {$fh} $qr->gif;
close $fh;


GD::Barcode::QRcode のオブジェクト生成時に指定するパラメータの説明です。

Ecc
エラー訂正レベル L(7%) M(15%) Q(25%) H(30%)
Version
QRcode のバージョン(1-40) バージョンが上がると使用可能な文字数等が増える
ModuleSize
ドットのサイズ(だと思う)

Imager::QRCode を使って QRcode を作成する

libqrencode というライブラリを入れるだけで動作します。GD を入れる必要はないです。

#!/usr/bin/perl
use strict;
use warnings;
use Imager::QRCode;

my $qrcode = Imager::QRCode->new(
    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 $img = $qrcode->plot("http://www.google.com");
$img->write(file => "qr2.gif");


QRcode の色を Imager::Color を使って自由に設定もできるみたいです。使い道があるかはわかりませんが、ちょっとうれしいかも。

QRcode::Barcode::QRcode と Imager::QRCode を取り上げてみたが、業務では前者を採用した。サーバの環境(ソフトウェアも含めて)が古いこともあったので、業務で導入実績のある、GD 系のモジュールを採用する方がいいと今回は判断した。いわゆる、モダンな環境なら後者でも全然ありだと思う。