#!/usr/bin/perl ########################################### # sepiafy - Sepia Toning for color images # Mike Schilli, 2009 (m@perlmeister.com) ########################################### use warnings; use strict; use Gimp qw(:auto); use Gimp::Fu; use Getopt::Std; use Log::Log4perl qw(:easy); Log::Log4perl->easy_init($DEBUG); DEBUG "Starting up"; my $menu = "/Xtns/Perl-Fu/Sepiafy"; my $file = $ARGV[0]; die "No file" unless defined $file; register( "perl_fu_sepiafy", # Name "Sepia Toning", # Explain "", # Help "", # Author "", # Copyright "", # Date $menu, # Menu "*", # Images accepted [ undef ], # No parameters \&sepiafy # Function ); exit main(); ########################################### sub sepiafy { ########################################### my $img = gimp_file_load( RUN_NONINTERACTIVE, $file, $file); die "Can't load $file" unless $img; my $layer = image_get_active_layer($img); DEBUG "Desaturate"; $layer->desaturate_full(2); # 2: Average my $sepia_mask = $layer->layer_copy(1); # 1: Add Alpha Channel $sepia_mask->layer_set_mode(COLOR_MODE); # Insert layer above active layer $img->image_add_layer($sepia_mask, -1); gimp_context_set_foreground( [162, 138, 101] ); $sepia_mask->drawable_fill(0); # 0: FOREGROUND-FILL DEBUG "Adding layer mask"; my $layer_mask = $sepia_mask->layer_create_mask(0); # 0: White mask $sepia_mask->layer_add_mask( $layer_mask ); $layer->edit_copy(); my $float = $layer_mask->edit_paste(0); # 0: Clear selection 1: Paste behind it $float->invert(); $float->floating_sel_anchor(); DEBUG "Flattening image"; $img->flatten(); $layer = $img->get_active_layer; $layer->curves_spline(HISTOGRAM_VALUE, [0,0, 58, 36, 255, 255]); $file =~ s/\./-sepia./g; DEBUG "Saving $file"; gimp_file_save( RUN_NONINTERACTIVE, $img, $layer, $file, $file); return $img; }