File: stampify

package info (click to toggle)
libgimp-perl 2.0.dfsg-5
  • links: PTS
  • area: main
  • in suites: sarge
  • size: 2,112 kB
  • ctags: 462
  • sloc: perl: 10,026; sh: 207; ansic: 207; makefile: 70
file content (78 lines) | stat: -rwxr-xr-x 2,506 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
#!/opt/bin/perl

eval 'exec /opt/bin/perl  -S $0 ${1+"$@"}'
    if 0; # not running under some shell

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

#Gimp::set_trace(TRACE_ALL);

register	"stampify",
		"Makes an image look like a postage stamp.",
		"This plug-in works from the active layer. Depending on the size of the image, perforations may look strange. Test alternatives!",
		"Claes G Lindblad <claesg\@algonet.se>",
		"Claes G Lindblad <claesg\@algonet.se>",
		"990328",
		N_"<Image>/Filters/Render/Stampify...",
		"*",
		[
	[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]
		],
	sub {
		my ($img, $drawable, $paper, $hole, $diameter, $gap, $marg) = @_;
		$nw = int(gimp_image_width($img) + 2 * $marg + $diameter);
		$nh = int(gimp_image_height($img) + 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_add_layer($img2, $layer1, 0);
		gimp_image_set_active_layer($img2, $layer1);
		gimp_palette_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_ellipse_select($img2,
				$pos, 0,
				$diameter, $diameter,
				CHANNEL_OP_ADD, 1, 0, 0);
			$pos = $pos + $diameter + $gap;
		}
# create vertical holes
		my $nholes = int (($nh + $gap) / ($diameter + $gap) + 0.5);
		$pos = 0;
		for ($i = 0; $i<$nholes; $i++) {
			gimp_ellipse_select($img2,
				0, $pos,
				$diameter, $diameter,
				CHANNEL_OP_ADD, 1, 0, 0);
			$pos = $pos + $diameter + $gap;
		}
		gimp_palette_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 $img into a new layer in $img2
#		gimp_selection_all($img);
		gimp_edit_copy($drawable);
		my $float = gimp_edit_paste($layer1, 0);
		gimp_floating_sel_anchor($float);
# and return command to The Gimp.
		return $img2;
	};
exit main;

=head1 LICENSE

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

=cut