Imagerで階調を反転する
Imager::Transformationsにmap
っていう関数があったので、
何かに使えないかなーって思って試してみました。
サンプルのまんまですが、これで階調を反転させられます。
use v5.14; use strict; use warnings; use Imager; if ( (not @ARGV) or (not -e $ARGV[0]) ) { say "Usage: perl $0 file_path"; exit( 0 ); } my $img = Imager->new( file => $ARGV[0] ) or die Imager->errstr(); my @table = reverse 0..255; $img->map( all => \@table ); $img->write( file => $0 . '.jpg', jpegquality => 90 );
そのまま保存すると、あんまし画質が良くなかったので、
JPEGの画質を指定しました。
結果はこんな感じ。
でもって、色相を反転(?)、じゃなくて回転するのも、
いつものアレを使えば、こんな感じで書けます。
use v5.14; use strict; use warnings; use Imager; if ( (not @ARGV) or (not -e $ARGV[0]) ) { say "Usage: perl $0 file_path"; exit( 0 ); } my $img_src = Imager->new( file => $ARGV[0] ) or die Imager->errstr(); my $img_dst = Imager::transform2( { constants => { da => 180.0 }, rpnexpr => 'x y getp1 !pix @pix hue da + !hh @hh 360.0 lt @hh @hh 360.0 - if !hh @hh @pix sat @pix value hsv' }, $img_src ); $img_dst or die $Imager::ERRSTR; $img_dst->write( file => $0 . '.jpg', jpegquality => 90 );
これはこれでイイ感じですね。
他にも、使い道がありそうですですが、
もしかしたら透過ありのPNGだと、落とし穴がありそうな気がするので、
それは宿題にしようと思います。
おしまい。
Leave a Comment