#!/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 = 
    "<Toolbox>/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;
}
