■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'
をとらないと、上のサンプルソースは正しく動作しません。
QRコードの内容、大変参考になりました。<br>ところで、xbm形式からから、gif形式に画像を変更したいのですが、一番簡単な方法は何になるのでしょうか?
一番簡単な方法はImageMagicを使うことでしょうか。もっとも、それが使えるぐらいなら最初からGD::Barcode::QRcodeからgifやpngで吐き出せてしまいますね。<br>xbmに対応した画像ビューワから別画像に保存。あるいはPrintScreenしてペイントブラシに貼り付けとかとか……。<br>う〜ん、それぐらいしか思いつきません。あとは"xbm gif 変換"あたりで検索してみてください。
GD::Barcodeでググってたどり着きました。<br>$rhPrm->{Version} || 1;のところ、僕もハマリました。w<br>_calcVersion()でif (!$oSelf->{Version})となっているので<br>明らかなコーディングミスですよね・・・(汗。