#!/usr/bin/perl

use Gimp qw(:auto __ N_);
use Gimp::Fu;

podregister {
  $nw = int(gimp_image_width($image) + 2 * $marg + $diameter);
  $nh = int(gimp_image_height($image) + 2 * $marg + $diameter);
  my $img2 = gimp_image_new($nw, $nh, RGB);
  my $layer1 = gimp_layer_new($img2, $nw, $nh, RGBA_IMAGE, "Layer 1", 100, NORMAL_MODE);
  gimp_image_insert_layer($img2, $layer1, 0, 0);
  gimp_image_set_active_layer($img2, $layer1);
  gimp_context_set_background($paper);
  gimp_drawable_fill($layer1, 1);
# create horisontal holes
  gimp_selection_none($img2);
  my $nholes = int (($nw + $gap) / ($diameter + $gap) + 0.5);
  $pos = 0;
  for ($i = 0; $i<$nholes; $i++) {
    gimp_image_select_ellipse($img2,
      CHANNEL_OP_ADD, $pos, 0,
      $diameter, $diameter,
    );
    $pos = $pos + $diameter + $gap;
  }
# create vertical holes
  $pos = 0;
  for ($i = 0; $i<$nholes; $i++) {
    gimp_image_select_ellipse(
      $img2, CHANNEL_OP_ADD, 0, $pos,
      $diameter, $diameter,
    );
    $pos = $pos + $diameter + $gap;
  }
  gimp_context_set_background($hole);
  gimp_edit_fill($layer1, BACKGROUND_FILL);
  gimp_selection_none($img2);
# here comes the clever part! :-)
# offset horis and vert holes by half the diameter
  gimp_drawable_offset($layer1, 1, 0, -($diameter / 2), -($diameter / 2));
# insert $image into a new layer in $img2
#		gimp_selection_all($image);
  gimp_edit_copy($drawable);
  my $float = gimp_edit_paste($layer1, 0);
  gimp_floating_sel_anchor($float);
# and return command to The Gimp.
  Gimp::Display->new($img2);
  return $img2;
};
exit main;
__END__

=head1 NAME

stampify - Makes an image look like a postage stamp.

=head1 SYNOPSIS

<Image>/Filters/Render/Stampify...

=head1 DESCRIPTION

This plug-in works from the active layer. Depending on the size of the
image, perforations may look strange. Test alternatives!

=head1 PARAMETERS

  [PF_COLOR, "paper", "Paper colour", [242, 242, 242]],
  [PF_COLOR, "hole", "Hole colour", [0, 0, 0]],
  [PF_INT32, "diameter", "Diameter of perforation", 10],
  [PF_INT32, "gap", "Gap between perforations", 5],
  [PF_INT32, "marg", "Marginal between art and perforations", 7]

=head1 RETURN VALUES

  [PF_IMAGE, 'image', 'Return image'],

=head1 IMAGE TYPES

*

=head1 AUTHOR

Claes G Lindblad <claesg@algonet.se>

=head1 DATE

990328

=head1 LICENSE

Copyright Claes G. Lindblad.
Distributed under the terms of the GNU Public License, v2 or higher.

=cut
