Gimp
view release on metacpan or search on metacpan
examples/bricks view on Meta::CPAN
#!/usr/bin/perl -w
use Gimp;
use Gimp::Fu;
use Gimp::Util;
use strict;
use warnings;
#$Gimp::verbose = 1;
podregister {
Gimp::Context->push();
$imagew = abs($imagew); $imagew = 256 if (($imagew < 32) || ($imagew > 4096));
$imageh = abs($imageh); $imageh = 256 if (($imageh < 32) || ($imageh > 4096));
#print "Creating texture $imagew"."x$imageh\n";
my $image = Gimp::Image->new($imagew,$imageh,RGB);
eval { Gimp::Display->new($image); };
# make background
Gimp::Context->set_pattern($pattern);
my $layerpat = $image->add_new_layer(0,0,0);
$image->selection_all;
$layerpat->edit_bucket_fill(FILL_WHITE,0,0);
# make border lines
Gimp::Context->set_foreground ([1,1,1]);
my $layer = $image->add_new_layer(0,0,0);
$layer->fill(3);
my $w = 1; my $h = 1; my $j = 0; my $wo = 0;
my $brickw = ($imagew / $brickx); my $brickh = ($imageh / $bricky);
$image->undo_group_start;
while ($h < $imageh) {
$image->select_rectangle(2,0,$h,$imagew,$borderwidth);
$layer->edit_bucket_fill(FILL_FOREGROUND,0,0);
$w = 1;
$wo = 0; $wo = ($brickw / 2) if ($j == 1);
while ($w < $imagew) {
$image->select_rectangle(2,$w+$wo,$h,$borderwidth,$brickh+1);
$layer->edit_bucket_fill(FILL_FOREGROUND,0,0);
# print "$h $w\n";
$w += $brickw;
}
$j = 1 - $j;
$h += $brickh;
}
$image->undo_group_end;
# make a copy of it for bump mapping
$image->selection_all;
$layer->edit_copy();
my $border = $image->add_new_layer(0,0,0);
#print "$border\n";
$border->edit_paste(0)->floating_sel_anchor;
$image->selection_none;
$border->gauss_iir (2,1,1);
$layer->gauss_iir (2,1,1);
$layerpat->bump_map($layer,280,40,2,0,0,0,0,1,0,1);
# overlay border lines and random skew bricks
$image->undo_group_start;
$h = 0; $j = 0; $wo = 0;
while ($h < $imageh) {
$w = 0; $wo = 0; $wo = ($brickw / 2) if ($j == 1);
while ($w < $imagew) {
my $r = int(rand ($skew) - ($skew / 1));
if ($r != 0) {
Gimp::Context->set_foreground ("#ffffff") if ($r > 0);
Gimp::Context->set_foreground ("#000000") if ($r < 0);
$image->select_rectangle(2,$w+$wo,$h,$brickw,$brickh);
$layerpat->edit_bucket_fill(FILL_FOREGROUND,0,0);
# halves
if (($j == 1) && ($w+$wo+$brickw > $imagew)) {
$image->select_rectangle(2,0,$h,$brickw/2,$brickh);
$layerpat->edit_bucket_fill(FILL_FOREGROUND,0,0);
}
}
$w += $brickw;
}
$j = 1 - $j;
$h += $brickh;
}
$image->undo_group_end;
Gimp::Context->set_background ($color);
my $layerb = $image->image_add_new_layer(1,FILL_BACKGROUND,0);
$image->selection_all;
if ($borderpatuse) {
Gimp::Context->set_pattern($borderpattern);
$layerb->edit_bucket_fill(FILL_WHITE,0,0);
}
$border->edit_copy();
$layerb->add_alpha;
my $mask = $layerb->create_mask(0);
$layerb->add_mask($mask);
$mask->edit_paste(0)->floating_sel_anchor;
$image->selection_none;
$border->remove_layer ;
$layer->remove_layer ;
$layerb->remove_mask (0);
$layerpat->offset (1,0,-1,-1);
$layerb->offset (1,0,-1,-1);
Gimp::Context->pop;
$image;
};
exit main();
__END__
=head1 NAME
do_bricks - Generate brick texture
=head1 SYNOPSIS
<Image>/File/Create/Patterns/_Bricks...
=head1 DESCRIPTION
Generate a brick texture for using in 3d games.
( run in 1.352 second using v1.01-cache-2.11-cpan-39bf76dae61 )