« Update済み RedHat 7.3 インストールCDの作成 | メイン | 大きさ可変QRコードつけてみた。 »

QRコードをswfとして生成するスクリプト

QRコードを生成して、FlashのSWFとしてはき出すスクリプトを書いてみた。
書き出したSWFのサンプルはこちら
生成時の負荷が大きいので動作サンプルの公開は控えておきます。

スクリプトは非常に簡単。
QRコードの生成は、GD::Barcode::QRcodeでできます。
barcode()メソッドを使うと、QRコードの黒いところは「1」、白いところは「0」のテキストデータして出力してくれます。
SWFの生成は、SWF::Builderモジュールで行います。

このスクリプトができたあと、PDF版を作ろうと思って、PDFJをみていたら、ほぼ同じサンプルが入っていた。
でも、WebでQRコードを生成して、PDFで落とせたら、印刷用とかで需要があるかなぁ。

スクリプトは追記へ

#!/usr/bin/perl

use strict;
use CGI;
use File::Temp;
use SWF::Builder;
use GD::Barcode::QRcode;
use Jcode;

my $q = CGI->new();
my $modulesize=3;
my $qrtext="http://nomadscafe.jp/mt/mt4i.cgi";

my $qrcode=GD::Barcode::QRcode->new(
	Jcode->new($qrtext,"euc")->sjis,
	{ModuleSize =>1,Version=>4}
)->barcode;

my $movie = SWF::Builder->new(
	FrameRate => 15,
	FrameSize => [0, 0, 123, 123],
	BackgroundColor => 'ffffff',
	Version=>6
);
$movie->compress(1);
my $shape = $movie->new_shape->fillstyle('000000')
	->linestyle('none')->box(0,0,$modulesize,$modulesize);

my $x=0;
my $y=0;
foreach my $line (split(/\n/,$qrcode)){
	$x=0;
	foreach my $point (split(//,$line)){
		if($point){
			my $instance = $shape->place();
			$instance->moveto($x*$modulesize,$y*$modulesize);
		}
		$x++;
	}
	$y++;
}

my $fh = File::Temp->new(SUFFIX=>'.swf');
$movie->save($fh->filename);
my $swfdat=join("",$fh->getlines);

print $q->header(-length=>length($swfdat),-type=>'application/x-shockwave-flash',-expires=>'now',-pragma=>'no-cache',-cache_control=>'no-cache');
print $swfdat

トラックバック

この一覧は、次のエントリーを参照しています: QRコードをswfとして生成するスクリプト:

» 大きさ可変QRコードつけてみた。 from blog.nomadscafe.jp
左下にFlashで大きさが変えられるQRコードつけてみた。 QRコードはこちらのエントリでつくったもの。 たいした違いはありませんが、携帯で取り込むときにすきなサイズで取り込めます。 僕のW21Sではいちばん小さくしても取り込めた。vodafoneのV301SHでもOKでした。... [詳しくはこちら]

コメント

需要あります。
今すぐにでも欲しい。
(某クーポンマガジン編集で・・・)

コメントを投稿