エフェクトの掛ける順番を変えてみる
ちょっと時間が空いちゃった。
今回は、エフェクトの掛ける順番を変えて、比べてみようと思う。
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 $levels = 8;
my $n = 20;
{
my $img_src = $img->copy();
$img_src->filter( type => 'postlevels', levels => $levels )
or die $img_src->errstr;
my $img_dst = hue_reduction( $img_src, $n );
$img_dst->write( file => $0 . '-1.jpg', jpegquality => 90 );
}
{
my $img_src = $img->copy();
my $img_dst = hue_reduction( $img_src, $n );
$img_dst->filter( type => 'postlevels', levels => $levels )
or die $img_dst->errstr;
$img_dst->write( file => $0 . '-2.jpg', jpegquality => 90 );
}
sub hue_reduction {
my ( $img_src, $n ) = @_;
my $img_dst = Imager::transform2( {
constants => { n => $n },
rpnexpr => 'x y getp1 !pix @pix hue n / int n * !hh @hh @pix sat @pix value hsv'
}, $img_src );
$img_dst or die $Imager::ERRSTR;
}
やってることは、Imagerで用意されているポスタリゼーションと、
自前で実装した色相間引きを順番に掛けている。
でも、掛ける順番を変えると、こんな感じで差が出る。
左が先にポスタリゼーション、右は後でポスタリゼーション。
ちなみに、元画像はこれ。
今回の例だと、一目瞭然!っていう風にはいかないけど、
それとなく差があるので、個人的に面白いと思ってる。
おしまい。



Leave a Comment