0usersから10000usersまでの画像を作る
スポンサードリンク
会社のサイトで被ブックマーク数を表示しているスクリプトが、ユーザ側でJavaScriptのdocument.writeで表示しているため、表示がそこで止まってしまうから、imgで表示すると、非同期になるからよくね? と言われたので、ユーザー数を表示する画像を作ろうと思っていたのですけれども、半月ぐらい忘れていてやばいので今作る。
Photoshopの変数でやる方法もあるけれどもデータセット作るところがめんどくさくなったのでPerlでやることにした。でも、Excel使えばデータセット一瞬なんですけどね。
filename: makeusersimg.pl
#!/usr/bin/perl use strict; use warnings; use GD; my $image_dir = './images'; foreach ( my $i = 0; $i < 10000; $i++ ) { my $text_filename = "$i"; my $text = "$i user"; if ( $i != 1 ) { $text .= 's'; } my $img_path = "$image_dir/$text_filename.gif"; #if (!-e $img_path) { my $img = str2gif_gd($text); { open my $fh, '>', $img_path or die $!; print $fh $img; close $fh; } #} } exit; sub str2gif_gd { my $str =shift; #my $fontpath = "/usr/share/fonts/japanese/TrueType/kochi-gothic-subst.ttf"; my $fontpath = "/usr/share/fonts/default/Type1/a010013l.pfb"; die "Font file not found. $fontpath\n" unless -e $fontpath; my $size = 10; my @bg = (255, 204, 204); my @fg = (255, 0, 0); # obtain bounds first my $im = GD::Image->new( 1, 1 ); my @bounds = GD::Image->stringFT( $im->colorAllocate( 0, 0, 0 ), $fontpath, $size, 0, 0, 0, $str ); my $width = $bounds[2] - $bounds[6]; my $height = $bounds[3] - $bounds[7]; # then draw $im = GD::Image->new( $width , $height ); my $bg = $im->colorAllocate(@bg); my $fg = $im->colorAllocate(@fg); $im->fill(0, 0, $bg); $im->stringFT( $fg, $fontpath, $size, 0, 0, 0 -$bounds[5], $str ); #$im->transparent($bg); return $im->gif(); }
GDで生成するところはDan Kogaiのを使いました。
思ったんだけれども、ext3で1つのディレクトリに10000個もファイル置くとやっぱりパフォーマンス落ちるんかな。
スポンサードリンク
トラックバック(0)
トラックバックURL: http://blog.dtpwiki.jp/MTOS/mt-tb.cgi/3038
コメントする