M.C.P.C.

―むり・くり―プラスコミュニケーション(更新終了)


| トップページ |

2009年11月16日 22:57

0usersから10000usersまでの画像を作る

このエントリーをはてなブックマークに追加 mixiチェック

会社のサイトで被ブックマーク数を表示しているスクリプトが、ユーザ側で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個もファイル置くとやっぱりパフォーマンス落ちるんかな。

投稿 大野 義貴 [Perl] | |

トラックバック(0)

トラックバックURL: http://blog.dtpwiki.jp/MTOS/mt-tb.cgi/3038

コメントする