GD::Simple

GD::Simple(画像描画)

#!/usr/bin/perl

use  strict;
use  warnings;
use  v5.10;
use  GD::Simple;

# 画像サイズ
use  Readonly;
Readonly  my  $WIDTH  => 100;
Readonly  my  $HEIGHT => 100;

# GD::Simple オブジェクト作成(キャンバス)
my  $img_obj = GD::Simple->new( $WIDTH, $HEIGHT );
・四角(赤、枠線が青)
$img_obj->bgcolor( 'tomato' );   # 色(色名で指定)
$img_obj->fgcolor( 'blue' );     # 枠線の色
$img_obj->rectangle( 10, 10, $WIDTH - 10, $HEIGHT - 10 );   # 始点 x, y 終点 x, y
・四角(透明、枠線が緑)
$img_obj->bgcolor( undef );     # 色
$img_obj->fgcolor( 'green' );   # 枠線の色
$img_obj->rectangle( 20, 20, $WIDTH - 20, $HEIGHT - 20 );   # 始点 x, y 終点 x, y
・線(青)
$img_obj->fgcolor( 'blue' );   # 色
$img_obj->penSize( 10, 10 );   # 線の太さ
$img_obj->moveTo( 20, 20 );    # 始点 x, y 
$img_obj->lineTo( $WIDTH - 20, $HEIGHT - 20 );   # 終点 x, y
・円(オレンジ、枠線が緑)
$img_obj->bgcolor( 'orange' );   # 色
$img_obj->fgcolor( 'green' );    # 枠線の色
$img_obj->moveTo( $WIDTH / 2, $HEIGHT / 2 );   # 中心 x, y
$img_obj->ellipse( 75, 75 );     # 幅、高さ
・文字列
$img_obj->fgcolor( 'black' );   # 文字色
$img_obj->font( 'arial' );      # フォント
$img_obj->fontsize( 10 );       # フォントサイズ
$img_obj->moveTo( 1, $HEIGHT / 2 );   # 始点 x, y
$img_obj->string( 'There is no data.' );   # 文字列(最後に記述)
・文字列(日本語)
Readonly  my  $TTF => '/usr/share/fonts/vlgothic/VL-Gothic-Regular.ttf';
$img_obj->fgcolor( 'black' );   # 文字色
$img_obj->font( $TTF );         # フォント
$img_obj->fontsize( 15 );       # フォントサイズ
$img_obj->moveTo( 10, $HEIGHT / 2 + 10 );   # 始点 x, y
$img_obj->string( '風林火山' );   # 文字列(最後に記述)
・文字列(背景黒、文字黄色)
Readonly  my  $TTF => '/usr/share/fonts/vlgothic/VL-Gothic-Regular.ttf';
$img_obj->bgcolor( 'black' );   # 背景色
$img_obj->fgcolor( undef );     # 枠線の色
$img_obj->rectangle( 0, 0, $WIDTH, $HEIGHT );   # 始点 x, y 終点 x, y
$img_obj->fgcolor( 'yellow' );   # 文字色
$img_obj->font( $TTF );          # フォント
$img_obj->fontsize( 15 );        # フォントサイズ
$img_obj->moveTo( 10, $HEIGHT / 2 + 10 );   # 始点 x, y
$img_obj->string( '風林火山' );   # 文字列(最後に記述)
# ファイルへ出力
use  Carp qw( croak );
use  Fcntl;
use  IO::Handle;
my  $tmpfn = "tmp.$$";      # テンポラリファイル名
my  $imgfn = 'image.png';   # 画像ファイル名
sysopen  ( my  $fh,  $tmpfn,  O_WRONLY | O_TRUNC | O_CREAT,  0644 )  or  croak  qq{can't open :$!};
flock  $fh,  2;
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 :$!};