エフェクトの掛ける順番を変えてみる
ちょっと時間が空いちゃった。
今回は、エフェクトの掛ける順番を変えて、比べてみようと思う。
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