#!/usr/bin/perl
###########################################
# smartsharp
# Mike Schilli, 2009 (m@perlmeister.com)
###########################################
use warnings;
use strict;

use Gimp qw(:auto);
use Gimp::Fu;
use Log::Log4perl qw(:easy);

register(
  "perl_fu_smartsharp", # Name
  "Sharpen an Image",  # Explain
  "It's easy!",        # Help 
  "Mike Schilli",      # Author
  "GPL",               # Copyright
  "2009/06/30",        # Date
  "<Image>/Smartsharp",# Menu
  "*",                 # Images accepted
  [],
  \&smartsharp         # Function
);

exit main();

###########################################
sub smartsharp { 
###########################################
  my($img) = @_;

  my $layer = 
            $img->image_get_active_layer();

    # Create a copy to sharpen
  my $sharp_layer = $layer->layer_copy(0);
  $sharp_layer->layer_set_mode(
                             OVERLAY_MODE);
  $sharp_layer->drawable_set_name("sharp");
  $img->image_add_layer($sharp_layer, -1);

  $img->plug_in_unsharp_mask($sharp_layer,
                             1, 1.0, 0);
    # Create a mask layer
  my $mask_layer = $layer->layer_copy(0);
  $mask_layer->layer_set_mode(
                            OVERLAY_MODE);
  $img->image_add_layer($mask_layer, -1);
  $mask_layer->drawable_set_name("mask");

    # High Pass Filter, blur result
  $img->plug_in_neon($mask_layer, 
                     10.0, .1);
  $img->plug_in_gauss_iir($mask_layer, 
                          20.0, 1, 1);

    # Add mask layer as mask to sharp layer
  my $sharp_mask = 
        $sharp_layer->layer_create_mask(0);
  $sharp_layer->layer_add_mask( 
                             $sharp_mask );
  $mask_layer->edit_copy();
  my $float = $sharp_mask->edit_paste(0);
  $float->floating_sel_anchor();

    # Clean up
  $img->image_remove_layer($mask_layer);
  $img->image_merge_down($sharp_layer, 0);
  return $img;
}
