■2004-07-25
* [Perl][CGI] QRコードの生成
仕事場でQRコードの話になり、試しにCPANのGD::Barcode::QRcodeをいじってみました。
さて、このモジュールはGDライブラリを使って画像を生成するわけですが、レンタルサーバなどではGDを使うのが困難やもしれません。でもよく考えると、どうせ白黒二色だけなのですから、xbm形式で吐き出せばGDも必要ありません。そこでImage::Xbmの登場です。xbm形式なのでブラウザによっては標準で画像を表示できるでしょう。あとは何とか別のフォーマットに直すなりそのまま印刷するなりして下さい。印刷したQRコードは、おでこに貼り付けたり、背広の裏地にするなど使い道は色々。夢が膨らみます。
というわけで、実際の完成物→QR生成CGI。QRcodeモジュールのデータが大きかった(約10M)ので、データ量を減らすため、このサイトでは誤り訂正レベルはLかMだけにしてあります。
#!/usr/bin/perl use strict; use CGI; use GD::Barcode::QRcode; use Image::Xbm; # Image::Baseが必要 main(); sub main{ my $q = new CGI; my $data = $q->param('content'); my $ecc = $q->param('ecc') || 'L'; my $size = $q->param('size') || 1; print $q->header(-type=>'image/x-xbitmap'); my $qr = GD::Barcode::QRcode->new($data, {Ecc=>$ecc,Version=>0,ModuleSize=>$size} ); Image::Xbm->set(-setch=>'1',-unsetch=>'0'); Image::Xbm->new_from_string( $qr->barcode ) ->save('-'); }
GD::Barcode::QRcode(0.01)ソース40行目'$oSelf->{Version} = $rhPrm->{Version} || 1'
の'|| 1'
をとらないと、上のサンプルソースは正しく動作しません。
[]