Listing 3. MonkeyIQGimp Saving Functions

#!/usr/bin/perl

package MonkeyIQGIMP;

use Gimp ":auto";
use Gimp::Fu;
require Exporter;
...

sub imageOutput {
  my( $img, $outfilename ) = @_;

  if( $outfilename =~ ".xcf" )
    {
      print "Save to xcf file $outfilename\n";
      Gimp->xcf_save( 0, $img, 0,
          $outfilename, $outfilename );
    }
  else
    {
      $layer = getMergedLayer( $img );
      Gimp->file_save( $img, $layer,
         $outfilename, $outfilename );
    }
  Gimp->image_delete( $img );
}

sub getMergedLayer {
  my( $img ) = @_;

  my $existinglayer =
    Gimp->image_get_active_layer($img);

  @layers = Gimp->image_get_layers( $img );
  print "layers size:" . $#layers . "\n";

   if( $#layers <= 1 )
     {
       $layer = Gimp->image_get_active_layer($img);
     }
  else
     {
       $layer =
        Gimp->image_merge_visible_layers( $img, 1 );
     }

  if( $layer == 0 )
    {
      print "Creating a new layer to merge in\n";
      $newlayer = Gimp->layer_new(
        $img,
        Gimp->image_width( $img ),
        Gimp->image_height( $img ),
        $existinglayer->type(), "trans merge layer",
        100, NORMAL_MODE );
      Gimp->image_add_layer( $img, $newlayer, -1 );
      Gimp->edit_fill( $newlayer, TRANS_IMAGE_FILL);
      $layer =
        Gimp->image_merge_visible_layers( $img, 1 );
    }

  return $layer;
}

