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 )