Imager::transform2による画像生成(1)
Imager::Enginesがあまりに面白いので、適当にコードを書いてみる。
とりあえず、サイズを指定して画像を生成する。
use v5.14; use strict; use warnings; use Imager; my %opts = ( width => 100, height => 100, rpnexpr => '255 255 255 rgb' ); my $img = Imager::transform2( \%opts ); $img or die $Imager::ERRSTR; $img->write( file => $0 . '.png' );
これを、”aaa.pl”ってファイルで保存して実行すると、
“aaa.pl.png”ができる。
使っているのはこれ。
Nr Ng Nb rgb — C
ピクセルの数だけrpnexpr
が呼ばれるので、
その都度、R:255,G:255,B:255
をセットしている。
出力サイズは、width
とheight
で指定している。
それと、最後に色を返す必要がある。
Nは”numeric”でCは”color”って書いてあって、
Nr Ng Nb rgb — C
は、
3つの数字を、色情報として格納する
って意味だと思う。
(だったら、 --
じゃなくて、 ->
の方が良いかな。。。)
次に、rpnexpr
の中で、
現在、どのピクセルを処理しているか分かるように、
x
とy
が使えるので、それを使うとこんな感じになる。
use v5.14; use strict; use warnings; use Imager; my %opts = ( width => 256, height => 256, rpnexpr => 'x 0 y rgb' ); my $img = Imager::transform2( \%opts ); $img or die $Imager::ERRSTR; $img->write( file => $0 . '.png' );
だいたい、予想付くと思うけど、
左上がR:0,G:0,B:0
なので黒、
右下がR:255,G:0,B:255
なので紫になる。
他にもHSVを使うとこんなことも。
use v5.14; use strict; use warnings; use Imager; my %opts = ( width => 256, height => 256, rpnexpr => 'x w / 360 * !hh y h 1 - / !vv @hh 1.0 @vv hsv' ); my $img = Imager::transform2( \%opts ); $img or die $Imager::ERRSTR; $img->write( file => $0 . '.png' );
これは、
x
をw
(画像の幅)で割って、360を掛けてhh
に代入、
y
をh
(画像の高さ)から1引いたもので割ってvv
に代入、
H:hh,S:1.0,V:vv
を色として格納している。
結果はやってみてのお楽しみ。
おしまい。
Leave a Comment