[user]$ vim pie.pl
#!/usr/bin/perl use strict; use warnings; use v5.10; use List::MoreUtils qw( all ); use GD::Simple; # 画像作成 use GD::Graph::pie; # 円グラフ # 画像サイズ use Readonly; Readonly my $WIDTH => 180; Readonly my $HEIGHT => 200; # 日本語フォント([user]$ locate .ttf で調べる) Readonly my $TTF => '/usr/share/fonts/vlgothic/VL-Gothic-Regular.ttf'; # データ my @foot = qw( 逃げ 先行 差し 追込 ); my @cnt = qw( 10 20 25 5 ); my @data = ( \@foot, \@cnt ); my $img_obj = undef; if ( all { $_ == 0 } @cnt ) { # データが存在しない場合、画像作成 $img_obj = GD::Simple->new( $WIDTH, $HEIGHT ); $img_obj->fgcolor( 'black' ); # 色 $img_obj->font( 'arial' ); # フォント $img_obj->fontsize( 10 ); # フォントサイズ $img_obj->moveTo( $WIDTH / 5, $HEIGHT / 2 ); # 始点 x, y $img_obj->string( 'There is no data.' ); # 文字列 } else { # 円グラフ作成 # GD::Graph::pie オブジェクト作成 my $graph_obj = GD::Graph::pie->new( $WIDTH, $HEIGHT ); # パラメータ設定 $graph_obj->set ( title => '脚質', # タイトル start_angle => 180, # スタート位置 '3d' => 0, # 立体表示 bgclr => '#ffffff', # 背景色 dclrs => ['#ffcccc', '#ccffcc', '#ccccff', '#ffffcc'], # グラフ色 ); # 日本語使用 $graph_obj->set_title_font( $TTF, 10 ); $graph_obj->set_value_font( $TTF, 8 ); # GD::Image オブジェクト作成 $img_obj = $graph_obj->plot( \@data ) or croak $graph_obj->error; } # ファイルへ出力 use Carp qw( croak ); use Fcntl; use IO::Handle; my $tmpfn = "tmp.$$"; # テンポラリファイル名 my $imgfn = 'pie.png'; # 画像ファイル名 sysopen ( my $fh, $tmpfn, O_WRONLY | O_TRUNC | O_CREAT, 0644 ) or croak qq{can't open :$!}; flock $fh, 2; binmode $fh; # windows 用、バイナリモード print {$fh} $img_obj->png() or croak qq{can't write :$!}; # ファイルファンドルへの出力をバッファしない $fh->flush or croak qq{can't flush :$!}; # メモリ上にあるファイルの内容をストレージデバイス上のものと同期させる $fh->sync or croak qq{can't fsync :$!}; close $fh or croak qq{can't close :$!}; # ファイル名変更 rename $tmpfn, $imgfn or croak qq{can't rename $tmpfn to $imgfn :$!};
[user]$ chmod 700 pie.pl
[user]$ ./pie.pl