[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