mirror of https://github.com/GNOME/gimp.git
*** empty log message ***
This commit is contained in:
parent
86a79906e3
commit
c3f8c2ae33
|
@ -1,3 +1,9 @@
|
|||
Sat Dec 25 04:14:03 CET 1999 Marc Lehmann <pcg@goof.com>
|
||||
|
||||
* gimp1_1_splash.ppm: Crappy it is, but at least temporary! Feel
|
||||
free to enhance or replace, but please do not revert it back to
|
||||
the previous version ;)
|
||||
|
||||
1999-12-24 Shirasaki Yasuhiro <yasuhiro@gnome.gr.jp>
|
||||
|
||||
* plug-ins/common/exchange.c
|
||||
|
@ -99,7 +105,6 @@ Mon Dec 20 18:42:51 EST 1999 Gregory McLean <gregm@comstar.net>
|
|||
|
||||
* gimp.spec: Slightly more upto date spec file. Work in progress.
|
||||
|
||||
>>>>>>> 1.1949
|
||||
Mon Dec 20 17:58:59 GMT 1999 Adam D. Moss <adam@gimp.org>
|
||||
|
||||
* app/edit_selection.c: Remove old movement code and unused
|
||||
|
|
Binary file not shown.
|
@ -1,114 +0,0 @@
|
|||
#!/usr/bin/perl
|
||||
|
||||
use Gimp qw( :auto N_ );
|
||||
use Gimp::Fu;
|
||||
|
||||
# alpha2color.pl
|
||||
# by Seth Burgess <sjburges@gimp.org>
|
||||
# Version 0.02
|
||||
# Oct 16th, 1998
|
||||
#
|
||||
# This script simply changes the current alpha channel to a given color
|
||||
# instead. I'm writing it primarily for use with the displace plugin,
|
||||
# but I imagine it'll have other uses.
|
||||
|
||||
# TODO: Selection is currently ignored. It'd be better if it remembered
|
||||
# what the previous selection was.
|
||||
# Also, it needs to find a happier home than in the Filters/Misc menu.
|
||||
|
||||
# Gimp::set_trace(TRACE_ALL);
|
||||
|
||||
# Revision History
|
||||
# v0.02 - fixed up @color (should be $color) and undef; (should be return();)
|
||||
|
||||
sub save_layers_state ($) {
|
||||
$img = shift;
|
||||
my @layers = $img->get_layers;
|
||||
$i = 0;
|
||||
foreach $lay (@layers) {
|
||||
if ($lay->get_visible){
|
||||
$arr[$i] = 1;
|
||||
}
|
||||
else {
|
||||
$arr[$i] = 0;
|
||||
}
|
||||
$i++;
|
||||
}
|
||||
return @arr;
|
||||
}
|
||||
|
||||
sub restore_layers_state($@) {
|
||||
$img = shift;
|
||||
@arr = @_;
|
||||
my @layers = $img->get_layers;
|
||||
$i = 0;
|
||||
foreach $lay (@layers) {
|
||||
$lay->set_visible($arr[$i]);
|
||||
$i++;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
sub alpha2col {
|
||||
my ($img, $drawable, $color) = @_;
|
||||
|
||||
my $oldcolor = gimp_palette_get_background();
|
||||
|
||||
my @layers = gimp_image_get_layers($img);
|
||||
|
||||
# if there's not enough layers, abort.
|
||||
if ($#layers < 0) {
|
||||
gimp_message("You need at least 1 layer to perform alpha2color!");
|
||||
print "Only ", scalar(@layers), " layers found!(", $layers[0],")\n";
|
||||
return 0;
|
||||
}
|
||||
|
||||
# Hide the bottom layer, so it doesn't get into the merge visible later.
|
||||
|
||||
@layer_visibilities = save_layers_state ($img);
|
||||
# foreach $visible (@layer_visibilities) {
|
||||
# print $visible, "\n";
|
||||
# }
|
||||
$target_layer = gimp_image_get_active_layer($img);
|
||||
@offsets=$target_layer->offsets;
|
||||
# print $target_layer, "\n";
|
||||
foreach $eachlay (@layers) {
|
||||
$eachlay->set_visible(0);
|
||||
}
|
||||
$target_layer->set_visible(1);
|
||||
gimp_palette_set_background($color);
|
||||
$newlay = $target_layer->copy(1);
|
||||
$img->add_layer($newlay, 0);
|
||||
$newlay->set_offsets(@offsets);
|
||||
$target_layer->set_active_layer;
|
||||
|
||||
$img->selection_all;
|
||||
$target_layer->edit_fill;
|
||||
$img->selection_none;
|
||||
|
||||
$foreground = gimp_image_merge_visible_layers($img,0);
|
||||
|
||||
restore_layers_state($img, @layer_visibilities);
|
||||
|
||||
gimp_palette_set_background($oldcolor);
|
||||
gimp_displays_flush();
|
||||
return();
|
||||
}
|
||||
|
||||
register
|
||||
"plug_in_alpha2color",
|
||||
"Alpha 2 Color",
|
||||
"Change the current alpha to a selected color.",
|
||||
"Seth Burgess",
|
||||
"Seth Burgess<sjburges\@gimp.org>",
|
||||
"2-15-98",
|
||||
N_"<Image>/Image/Colors/Alpha2Color",
|
||||
"RGBA",
|
||||
[
|
||||
[PF_COLOR, "color", "Color for current alpha", [127,127,127]]
|
||||
],
|
||||
\&alpha2col;
|
||||
|
||||
exit main;
|
||||
|
|
@ -1,109 +0,0 @@
|
|||
#!/usr/bin/perl
|
||||
|
||||
# Blow In/Out
|
||||
# John Pitney
|
||||
|
||||
use Gimp 1.06;
|
||||
use Gimp::Fu;
|
||||
|
||||
# print "hello there\n";
|
||||
|
||||
# Gimp::set_trace(TRACE_CALL);
|
||||
|
||||
|
||||
sub blowinout {
|
||||
my ($img, $drawable, $angle, $nsteps, $distance, $inmode, $arithmode) = @_;
|
||||
# bail out if $drawable isn't a layer
|
||||
# print "Starting\n";
|
||||
if( gimp_selection_is_empty($img) == 0) { return };
|
||||
# if ($nsteps == 0) return;
|
||||
eval { $img->undo_push_group_start };
|
||||
# save the background color for later restoration
|
||||
my $oldbg = gimp_palette_get_background();
|
||||
#get the drawable dimensions
|
||||
my $xsize = gimp_drawable_width($drawable);
|
||||
my $ysize = gimp_drawable_height($drawable);
|
||||
|
||||
# Set background color to 128, for clearing dm
|
||||
gimp_palette_set_background([128,128,128]);
|
||||
|
||||
# Create a grayscale workspace image for displacement map
|
||||
my $dm = gimp_image_new($xsize, $ysize, 1);
|
||||
eval { $dm->undo_push_group_start };
|
||||
# It needs to have 2 layers
|
||||
my $dmlayer = gimp_layer_new($dm, $xsize, $ysize, GRAY_IMAGE, "newlayer",
|
||||
100, NORMAL_MODE);
|
||||
gimp_image_add_layer($dm, $dmlayer, 0);
|
||||
|
||||
# Create the layers, one-by-one
|
||||
my $i = 1;
|
||||
my $xdist = ($arithmode) ?
|
||||
$i * $distance / $nsteps * -cos($angle * 3.14159 / 180) :
|
||||
$distance ** ($i/$nsteps) * -cos($angle * 3.14159 / 180);
|
||||
my $ydist = ($arithmode) ?
|
||||
$i * $distance / $nsteps * sin($angle * 3.14159 / 180) :
|
||||
$distance ** ($i/$nsteps) * sin($angle * 3.14159 / 180);
|
||||
gimp_edit_clear($dmlayer);
|
||||
plug_in_noisify(1, $dm, $dmlayer, 0, 255, 255, 255, 0);
|
||||
gimp_levels($dmlayer, 0, 0, 255, 1.0, 128, 255);
|
||||
$drawable = gimp_layer_copy($drawable, 0);
|
||||
gimp_image_add_layer($img, $drawable, -1);
|
||||
plug_in_displace(1, $img, $drawable, $xdist, $ydist, 1, 1, $dmlayer,
|
||||
$dmlayer, 1);
|
||||
if ( $inmode == 1 )
|
||||
{
|
||||
gimp_image_lower_layer($img, $drawable);
|
||||
};
|
||||
for ( $i = 2; $i <= $nsteps; $i++ ) {
|
||||
$xdist = ($arithmode) ?
|
||||
$i * $distance / $nsteps * -cos($angle * 3.14159 / 180) :
|
||||
$distance ** ($i/$nsteps) * -cos($angle * 3.14159 / 180);
|
||||
$ydist = ($arithmode) ?
|
||||
$i * $distance / $nsteps * sin($angle * 3.14159 / 180) :
|
||||
$distance ** ($i/$nsteps) * sin($angle * 3.14159 / 180);
|
||||
gimp_edit_clear($dmlayer);
|
||||
plug_in_noisify(1, $dm, $dmlayer, 0, 255, 255, 255, 0);
|
||||
gimp_levels($dmlayer, 0, 0, 255, 1.0, 128, 255);
|
||||
$drawable = gimp_layer_copy($drawable, 0);
|
||||
gimp_image_add_layer($img, $drawable, -1);
|
||||
plug_in_displace(1, $img, $drawable, $xdist, $ydist, 1, 1, $dmlayer,
|
||||
$dmlayer, 1);
|
||||
if ( $inmode == 1 )
|
||||
{
|
||||
gimp_image_lower_layer($img, $drawable);
|
||||
};
|
||||
}
|
||||
|
||||
eval { $dm->undo_push_group_end };
|
||||
# gimp_image_remove_layer($dm, $dmlayer);
|
||||
# gimp_image_delete ($dm);
|
||||
gimp_palette_set_background($oldbg);
|
||||
eval { $img->undo_push_group_end };
|
||||
# gimp_displays_flush(); unneccessary (and dangerous ;)
|
||||
|
||||
(); # I like smileys ;)
|
||||
}
|
||||
|
||||
register
|
||||
"blowinout",
|
||||
"Blow selected layer inout",
|
||||
"Generates an animation thats blows the selected layer in or out",
|
||||
"John Pitney",
|
||||
"John Pitney <pitney\@uiuc.edu>",
|
||||
"1999-03-15",
|
||||
N_"<Image>/Filters/Distorts/BlowInOut",
|
||||
"*",
|
||||
[
|
||||
[PF_INT32, "angle", "Wind Angle, 0 is left", 120],
|
||||
[PF_INT32, "steps", "Number of Steps/Layers", 5],
|
||||
[PF_VALUE, "distance", "How far to blow",30],
|
||||
# What I really need here are radio buttons! Maybe they even exist...
|
||||
# You wanted them...
|
||||
[PF_RADIO, "direction", "Blow direction", 0, [In => 1, Out => 0]],
|
||||
[PF_RADIO, "series", "Kind of series", 1, [Arithmetic => 1, Geometric => 0]]
|
||||
],
|
||||
[],
|
||||
\&blowinout;
|
||||
|
||||
exit main;
|
||||
|
|
@ -1,89 +0,0 @@
|
|||
#!/usr/bin/perl
|
||||
|
||||
#BEGIN {$^W=1};
|
||||
|
||||
use Gimp::Feature qw(pdl);
|
||||
use Gimp;
|
||||
use Gimp::Fu;
|
||||
use PDL::LiteF;
|
||||
|
||||
# Gimp::set_trace(TRACE_ALL);
|
||||
|
||||
register "border_average",
|
||||
"calculates the average border colour",
|
||||
"calulcates the average border colour",
|
||||
"Marc Lehmann",
|
||||
"Marc Lehmann",
|
||||
"0.2.2",
|
||||
N_"<Image>/Filters/Misc/Border Average",
|
||||
"RGB",
|
||||
[
|
||||
[PF_INT32, "thickness", "Border size to take in count", 10],
|
||||
[PF_INT32, "bucket_exponent", "Bits for bucket size (default=4: 16 Levels)", 4],
|
||||
],
|
||||
[
|
||||
[PF_COLOUR, "border_colour", "Average Border Colour"],
|
||||
],
|
||||
sub { # es folgt das eigentliche Skript...
|
||||
my($image,$drawable,$thickness,$exponent)=@_;
|
||||
|
||||
($empty,@bounds)=$drawable->mask_bounds();
|
||||
return () if $empty;
|
||||
|
||||
my $rexpo = 8-$exponent;
|
||||
my $bucket_num = 1<<$exponent;
|
||||
|
||||
# ideally, we'd use a three-dimensional array, but index3 isn't
|
||||
# implemented yet, so we do it flat (Still its nicer than C).
|
||||
my $cube = zeroes long,$bucket_num**3;
|
||||
|
||||
my $width = $drawable->width;
|
||||
my $height = $drawable->height;
|
||||
|
||||
$thickness=$width if $thickness>$width;
|
||||
$thickness=$height if $thickness>$height;
|
||||
|
||||
local *add_new_colour = sub($) {
|
||||
# linearize and quantize pixels (same as original, slightly wrong)
|
||||
my $pixels = $_[0] >> $rexpo;
|
||||
|
||||
# intead of something like
|
||||
# $cube->index3d($pixels)++;
|
||||
# we have to first flatten the rgb triples into indexes and use index instead
|
||||
|
||||
my $flatten = long([$bucket_num**2,$bucket_num**1,$bucket_num**0]);
|
||||
my $subcube = $cube->index(inner($pixels,$flatten)->clump(2));
|
||||
|
||||
$subcube++;
|
||||
};
|
||||
|
||||
Gimp->progress_init("Border Average", 0);
|
||||
add_new_colour ($drawable->pixel_rgn ($bounds[0] ,$bounds[1] , $thickness,$height, 0, 0)
|
||||
->get_rect(0,0, $thickness,$height));
|
||||
add_new_colour ($drawable->pixel_rgn ($bounds[2]-$thickness,$bounds[1] , $thickness,$height, 0, 0)
|
||||
->get_rect(0,0, $thickness,$height));
|
||||
add_new_colour ($drawable->pixel_rgn ($bounds[0] ,$bounds[1] , $width ,$thickness, 0, 0)
|
||||
->get_rect(0,0, $width, $thickness));
|
||||
add_new_colour ($drawable->pixel_rgn ($bounds[0] ,$bounds[3]-$thickness, $width ,$thickness, 0, 0)
|
||||
->get_rect(0,0, $width, $thickness));
|
||||
|
||||
# now find the colour
|
||||
my $max = $cube->maximum_ind;
|
||||
my $b = $max % $bucket_num << $rexpo;
|
||||
my $g = ($max >>= $exponent) % $bucket_num << $rexpo;
|
||||
my $r = ($max >>= $exponent) % $bucket_num << $rexpo;
|
||||
|
||||
if ($Gimp::Fu::run_mode != RUN_NONINTERACTIVE)
|
||||
{
|
||||
my $layer = new Layer ($image, width $image, height $image, RGB_IMAGE, "bordercolour", 100, NORMAL_MODE);
|
||||
add_layer $image $layer,0;
|
||||
Palette->set_background([$r,$g,$b]);
|
||||
$layer->edit_fill;
|
||||
Gimp->message("Added layer with border colour ($r,$g,$b) on top");
|
||||
}
|
||||
|
||||
[$r,$g,$b];
|
||||
};
|
||||
|
||||
exit main;
|
||||
|
|
@ -1,77 +0,0 @@
|
|||
#!/usr/bin/perl
|
||||
|
||||
use strict 'subs';
|
||||
use Gimp;
|
||||
use Gimp::Fu;
|
||||
|
||||
#
|
||||
# this is quite convoluted, but I found no other way to do this than:
|
||||
#
|
||||
# create a new image & one layer
|
||||
# copy & paste the layer
|
||||
# ditherize new image
|
||||
# copy & paste back
|
||||
#
|
||||
|
||||
#Gimp::set_trace(TRACE_ALL);
|
||||
|
||||
my %imagetype2layertype = (
|
||||
RGB, RGB_IMAGE,
|
||||
GRAY, GRAY_IMAGE,
|
||||
INDEXED, INDEXED_IMAGE,
|
||||
);
|
||||
|
||||
register "plug_in_ditherize",
|
||||
"dithers current selection",
|
||||
"This script takes the current selection and dithers it just like convert to indexed",
|
||||
"Marc Lehmann",
|
||||
"Marc Lehmann",
|
||||
"1.2",
|
||||
N_"<Image>/Filters/Noise/Ditherize",
|
||||
"RGB*, GRAY*",
|
||||
[
|
||||
[PF_RADIO, "dither_type", "The dither type (see gimp_convert_indexed)", 1,
|
||||
[none => 0, fs => 1, "fs/low-bleed" => 2, ordered => 3]],
|
||||
[PF_SLIDER, "colours", "The number of colours to dither to", 10, [0, 256, 1, 1]],
|
||||
],
|
||||
sub {
|
||||
my($image,$drawable,$dither,$colours)=@_;
|
||||
|
||||
Gimp::set_trace(-1);
|
||||
|
||||
$drawable->is_layer or die "this plug-in only works for layers";
|
||||
|
||||
$image->undo_push_group_start;
|
||||
|
||||
# make sure something is selected
|
||||
$drawable->mask_bounds or $image->selection_all;
|
||||
|
||||
my ($x1,$y1,$x2,$y2)=($drawable->mask_bounds)[1..4];
|
||||
my ($w,$h)=($x2-$x1,$y2-$y1);
|
||||
|
||||
my $sel = $image->selection_save;
|
||||
$image->rect_select($x1,$y1,$w,$h,REPLACE,0,0);
|
||||
$drawable->edit_copy;
|
||||
$sel->selection_load;
|
||||
$sel->remove_channel;
|
||||
|
||||
my $copy = new Image($w, $h, $image->base_type);
|
||||
$copy->undo_disable;
|
||||
my $draw = new Layer($copy, $w, $h,
|
||||
$imagetype2layertype{$image->base_type},
|
||||
"temporary layer", 100, NORMAL_MODE);
|
||||
$copy->add_layer ($draw, 1);
|
||||
$draw->edit_paste(0)->anchor;
|
||||
$copy->convert_indexed ($dither, MAKE_PALETTE, $colours, 1, 1, "");
|
||||
|
||||
$draw->edit_copy;
|
||||
$drawable->edit_paste(1)->anchor;
|
||||
$copy->delete;
|
||||
|
||||
$image->undo_push_group_end;
|
||||
|
||||
();
|
||||
};
|
||||
|
||||
exit main;
|
||||
|
|
@ -1,70 +0,0 @@
|
|||
#!/usr/bin/perl
|
||||
|
||||
use Gimp;
|
||||
use Gimp::Fu;
|
||||
|
||||
register "gimp_fu_example_script", # fill in a function name
|
||||
"A non-working example of Gimp::Fu usage", # and a short description,
|
||||
"Just a starting point to derive new ". # a (possibly multiline) help text
|
||||
"scripts. Always remember to put a long".
|
||||
"help message here!",
|
||||
"Marc Lehmann <pcg\@goof.com>", # don't forget your name (author)
|
||||
"(c) 1998, 1999 Marc Lehmann", # and your copyright!
|
||||
"19990316", # the date this script was written
|
||||
N_"<Toolbox>/Xtns/Gimp::Fu Example", # the menu path
|
||||
"RGB*, GRAYA", # image types to accept (RGB, RGAB amnd GRAYA)
|
||||
[
|
||||
# argument type, switch name , a short description , default value, extra arguments
|
||||
[PF_SLIDER , "width" , "The image width" , 360, [300, 500]],
|
||||
[PF_SPINNER , "height" , "The image height" , 100, [100, 200]],
|
||||
[PF_STRING , "text" , "The Message" , "example text"],
|
||||
[PF_INT , "bordersize" , "The bordersize" , 10],
|
||||
[PF_FLOAT , "borderwidth" , "The borderwidth" , 1/5],
|
||||
[PF_FONT , "font" , "The Font Family" ],
|
||||
[PF_COLOUR , "text_colour" , "The (foreground) text colour", [10,10,10]],
|
||||
[PF_COLOUR , "bg_colour" , "The background colour" , "#ff8000"],
|
||||
[PF_TOGGLE , "ignore_cols" , "Ignore colours" , 0],
|
||||
[PF_IMAGE , "extra_image" , "An additonal picture to ignore"],
|
||||
[PF_DRAWABLE , "extra_draw" , "Somehting to ignroe as well" ],
|
||||
[PF_RADIO , "type" , "The effect type" , 0, [small => 0, large => 1]],
|
||||
[PF_BRUSH , "a_brush" , "An unused brush" ],
|
||||
[PF_PATTERN , "a_pattern" , "An unused pattern" ],
|
||||
[PF_GRADIENT , "a_gradients" , "An unused gradients" ],
|
||||
],
|
||||
sub {
|
||||
|
||||
# now do sth. useful with the garbage we got ;)
|
||||
my($width,$height,$text,$font,$fg,$bg,$ignore,$brush,$pattern,$gradient)=@_;
|
||||
|
||||
# set tracing
|
||||
Gimp::set_trace(TRACE_ALL);
|
||||
|
||||
my $img=new Image($width,$height,RGB);
|
||||
|
||||
# put an undo group around any modifications, so that
|
||||
# they can be undone in one step. The eval shields against
|
||||
# gimp-1.0, which does not have this function.
|
||||
eval { $img->undo_push_group_start };
|
||||
|
||||
my $l=new Layer($img,$width,$height,RGB,"Background",100,NORMAL_MODE);
|
||||
$l->add_layer(0);
|
||||
|
||||
# now a few syntax examples
|
||||
|
||||
Palette->set_foreground($fg) unless $ignore;
|
||||
Palette->set_background($bg) unless $ignore;
|
||||
|
||||
fill $l BG_IMAGE_FILL;
|
||||
|
||||
$text_layer=$img->text_fontname(-1,10,10,$text,5,1,xlfd_size($font),$font);
|
||||
|
||||
gimp_palette_set_foreground("green");
|
||||
|
||||
# close the undo push group
|
||||
eval { $img->undo_push_group_end };
|
||||
|
||||
$img; # return the image, or an empty list, i.e. ()
|
||||
};
|
||||
|
||||
exit main;
|
||||
|
|
@ -1,32 +0,0 @@
|
|||
#!/usr/bin/perl
|
||||
|
||||
# example for the gimp-perl-server (also called Net-Server)
|
||||
|
||||
use Gimp;
|
||||
|
||||
Gimp::on_lib {
|
||||
print STDERR "$0: this script is not intended to be run from within the gimp!\n";
|
||||
};
|
||||
|
||||
Gimp::on_net {
|
||||
# simple benchmark ;)
|
||||
|
||||
$img=new Gimp::Image(600,300,RGB);
|
||||
# the is the same as $img = new Image(600,300,RGB)
|
||||
|
||||
$bg=$img->layer_new(30,20,RGB_IMAGE,"Background",100,NORMAL_MODE);
|
||||
|
||||
$bg->add_layer(1);
|
||||
|
||||
new Gimp::Display($img);
|
||||
|
||||
for $i (0..255) {
|
||||
Palette->set_background([$i,255-$i,$i]);
|
||||
$bg->edit_fill;
|
||||
Display->displays_flush ();
|
||||
}
|
||||
# Gimp::Net::server_quit; # kill the gimp-perl-server-extension (ugly name)
|
||||
};
|
||||
|
||||
exit main;
|
||||
|
|
@ -1,37 +0,0 @@
|
|||
#!/usr/bin/perl
|
||||
|
||||
# this extension shows some oo-like calls
|
||||
|
||||
# it's really easy
|
||||
|
||||
use Gimp;
|
||||
|
||||
# the extension that's called.
|
||||
sub plug_in_example_oo {
|
||||
my $img=new Image(300,200,RGB);
|
||||
|
||||
my $bg=new Layer($img,300,200,RGB_IMAGE,"Background",100,NORMAL_MODE);
|
||||
|
||||
Palette->set_background([200,200,100]);
|
||||
|
||||
$bg->fill(BG_IMAGE_FILL);
|
||||
# Palette->set_background([200,100,200]);
|
||||
# gimp_drawable_fill ($bg,BG_IMAGE_FILL);
|
||||
$img->add_layer($bg,1);
|
||||
|
||||
new Display($img);
|
||||
}
|
||||
|
||||
Gimp::on_run {
|
||||
plug_in_example_oo;
|
||||
};
|
||||
|
||||
Gimp::on_query {
|
||||
gimp_install_procedure("plug_in_example_oo", "a test plug-in in perl",
|
||||
"try it out", "Marc Lehmann", "Marc Lehmann", "1998-04-27",
|
||||
N_"<Toolbox>/Xtns/Perl Example Plug-in", "*", PROC_EXTENSION,
|
||||
[[PARAM_INT32, "run_mode", "Interactive, [non-interactive]"]], []);
|
||||
};
|
||||
|
||||
exit main;
|
||||
|
|
@ -1,41 +0,0 @@
|
|||
#!/usr/bin/perl
|
||||
|
||||
# Revision 1.0: Released it
|
||||
# 1.1: Marc Lehman added undo capability! <pcg@goof.com>
|
||||
# 1.2: Added my email, and put it in "Noise" where it belongs
|
||||
# <sjburges@gimp.org>
|
||||
|
||||
|
||||
use Gimp;
|
||||
use Gimp::Fu;
|
||||
|
||||
register "feedback",
|
||||
"Take an image and feed it back onto itself multiple times",
|
||||
"This plug-in simulates video feedback. It makes for kinda a neat desktop if you're into that sort of thing",
|
||||
"Seth Burgess",
|
||||
"Seth Burgess <sjburges\@gimp.org>",
|
||||
"2-15-99",
|
||||
N_"<Image>/Filters/Noise/Feedback",
|
||||
"RGB, GRAY",
|
||||
[
|
||||
[PF_SLIDER, "offset", "the amount the frames will offset", 3, [0, 255, 1]],
|
||||
[PF_SLIDER, "repeat", "the number of times to repeat the illusion", 3, [0, 100, 1]],
|
||||
],
|
||||
sub {
|
||||
my($img,$drawable,$offset,$repeat)=@_;
|
||||
|
||||
eval { $img->undo_push_group_start };
|
||||
|
||||
for (; $repeat>0; $repeat--) {
|
||||
$drawable = $img->flatten;
|
||||
$copylayer = $drawable->copy(1);
|
||||
$img->add_layer($copylayer,0);
|
||||
$copylayer->scale($img->width - $offset, $img->height - $offset, 0);
|
||||
}
|
||||
$img->flatten;
|
||||
eval { $img->undo_push_group_end };
|
||||
return();
|
||||
};
|
||||
|
||||
exit main;
|
||||
|
|
@ -1,151 +0,0 @@
|
|||
#!/usr/bin/perl
|
||||
|
||||
# THIS IS OUTDATED AND WILL NOT RUN WITH CURRENT GIMP VERSIONS!
|
||||
|
||||
# this test-plugin will create a simple button, and does automatically
|
||||
# save it as an indexed gif in /tmp/x.gif
|
||||
|
||||
# it works as plug-in as well as standalone!
|
||||
# this script is old (its the first script ever written for gimp-perl)
|
||||
# and I had no time to fix it yet.
|
||||
|
||||
use Gimp;
|
||||
|
||||
$blend1 = [0, 150, 255];
|
||||
$blend2 = [0, 255, 208];
|
||||
$black = "#000000";
|
||||
$font = "Engraver";
|
||||
|
||||
# enable example mode... if disabled, it will write out some logos, and not
|
||||
# wont' display anything.
|
||||
$example = 1;
|
||||
|
||||
# set trace level to watch functions as they are executed
|
||||
Gimp::set_trace(TRACE_NAME) if $example;
|
||||
|
||||
sub set_fg ($) { gimp_palette_set_foreground ($_[0]) };
|
||||
sub set_bg ($) { gimp_palette_set_background ($_[0]) };
|
||||
sub get_fg ($) { gimp_palette_get_foreground () };
|
||||
sub get_bg ($) { gimp_palette_get_background () };
|
||||
|
||||
# shorthand function for drawing text
|
||||
sub text($$$$$) {
|
||||
my($img,$text,$border,$font,$size)=@_;
|
||||
my $layer=gimp_text($img,-1,0,0,$text,$border,1,$size,PIXELS,"*",$font,"*","*","*","*");
|
||||
if (wantarray()) {
|
||||
($layer,gimp_text_get_extents($text,$size,PIXELS,"*",$font,"*","*","*","*"));
|
||||
} else {
|
||||
$layer;
|
||||
}
|
||||
}
|
||||
|
||||
# convert image to indexed
|
||||
# and automatically save it as interlaced gif.
|
||||
sub index_and_save($$) {
|
||||
my($img,$path)=@_;
|
||||
gimp_image_flatten($img);
|
||||
gimp_convert_indexed_palette($img,1,0,32,"");
|
||||
file_gif_save(RUN_NONINTERACTIVE,$img,-1,$path,$path,1,0,0,0) unless $example;
|
||||
}
|
||||
|
||||
sub write_logo {
|
||||
my($string,$active,$w,$h,$uc)=@_;
|
||||
|
||||
# create a new image
|
||||
my $img=gimp_image_new($w,$h,RGB);
|
||||
|
||||
# and a layer for it
|
||||
my $bg=gimp_layer_new($img,$w,$h,RGB_IMAGE,"Background",100,NORMAL_MODE);
|
||||
|
||||
gimp_image_add_layer($img,$bg,1);
|
||||
|
||||
set_fg($blend1);
|
||||
set_bg($blend2);
|
||||
|
||||
# blend the background
|
||||
gimp_blend($bg,FG_BG_HSV,NORMAL_MODE,LINEAR,100,0,
|
||||
REPEAT_NONE,0,0,0,
|
||||
0,0,$w*0.9,$h);
|
||||
gimp_rect_select ($img,$w*0.92,0,$w,$h,REPLACE, 0, 0);
|
||||
gimp_blend($bg,FG_BG_HSV,NORMAL_MODE,LINEAR,100,0,
|
||||
REPEAT_NONE,0,0,0,
|
||||
$w,0,$w*0.92,0);
|
||||
gimp_selection_all($img);
|
||||
|
||||
set_fg($black);
|
||||
|
||||
my ($text,$tw,$th,$ta,$td) = text ($img, $string, 1, $font, $active ? $h*0.7 : $h*0.5);
|
||||
|
||||
gimp_layer_translate ($text,($w-$tw)/2,($h-$th+$td)/2);
|
||||
|
||||
my ($shadow) = gimp_layer_copy ($text, 0);
|
||||
|
||||
plug_in_gauss_rle ($text, 1, 1, 1) unless $active;
|
||||
|
||||
gimp_image_add_layer ($img,$shadow,1);
|
||||
|
||||
gimp_shear ($shadow,1,ORIENTATION_HORIZONTAL,-$th);
|
||||
gimp_layer_scale ($shadow, $tw, $th*0.3, 1);
|
||||
gimp_layer_translate ($shadow, $th*0.1, $th*0.3);
|
||||
plug_in_gauss_rle ($shadow, 1, 1, 1);
|
||||
|
||||
gimp_hue_saturation($bg, ALL_HUES, 0, 0, $active ? 10 : -40);
|
||||
|
||||
plug_in_nova ($bg, $h*0.4, $h*0.5, '#f0a020', 5, 50) if $active;
|
||||
plug_in_nova ($bg, $w-$h*0.4, $h*0.5, '#f0a020', 5, 50) if $active;
|
||||
|
||||
# add an under construction sign
|
||||
if ($uc) {
|
||||
set_fg($active ? "#a00000" : "#000000");
|
||||
my ($uc,$tw,$th,$ta,$td) = text ($img, "u/c", 1, $font, $h*0.4);
|
||||
gimp_rotate ($uc,1,0.2);
|
||||
gimp_layer_translate ($uc,$w*0.84,($h-$th+$td)/2);
|
||||
}
|
||||
|
||||
index_and_save ($img, "/root/www/src/marc/images/${string}_".($active ? "on" : "off").".gif");
|
||||
|
||||
gimp_display_new ($img) if $example;
|
||||
gimp_image_delete($img) unless $example;
|
||||
}
|
||||
|
||||
# the extension that's called.
|
||||
sub extension_homepage_logo {
|
||||
# if in example mode just draw one example logo.
|
||||
if($example) {
|
||||
push(@logos,[ "-Projects", 0, 480, 60 ]);
|
||||
# push(@logos,[ "-Projects", 1, 480, 60 ]);
|
||||
} else {
|
||||
for $active (0, 1) {
|
||||
for $string (qw(Projects -Background -Main)) {
|
||||
push(@logos,[$string,$active,240,30]);
|
||||
}
|
||||
}
|
||||
for $active (0, 1) {
|
||||
for $string (qw(PGCC Judge -FreeISDN -Gimp -Destripe -Links -EGCS)) {
|
||||
push(@logos,[$string,$active,240,20]);
|
||||
}
|
||||
}
|
||||
}
|
||||
gimp_progress_init ("rendering buttons...");
|
||||
$numlogos = $#logos+1;
|
||||
while($#logos>=0) {
|
||||
gimp_progress_update (1-($#logos+1)/$numlogos);
|
||||
my($string,$active,$w,$h)=@{pop(@logos)};
|
||||
$uc=$string=~s/^-//;
|
||||
write_logo($string,$active,$w,$h,$uc);
|
||||
}
|
||||
}
|
||||
|
||||
sub query {
|
||||
gimp_install_procedure("extension_homepage_logo", "a test extension in perl",
|
||||
"try it out", "Marc Lehmann", "Marc Lehmann", "1997-02-06",
|
||||
N_"<Toolbox>/Xtns/Homepage-Logo", "*", PROC_EXTENSION,
|
||||
[[PARAM_INT32, "run_mode", "Interactive, [non-interactive]"]], []);
|
||||
}
|
||||
|
||||
sub net {
|
||||
extension_homepage_logo;
|
||||
}
|
||||
|
||||
exit main;
|
||||
|
|
@ -1,109 +0,0 @@
|
|||
#!/usr/bin/perl
|
||||
|
||||
use Gimp qw(:auto N_ __);
|
||||
use Gimp::Fu;
|
||||
|
||||
# This script requires a Gimp version >= 0.96 (I haven't checked - ymmv)
|
||||
# small changes by Marc Lehmann <pcg@goof.com>
|
||||
|
||||
# prep4gif.pl
|
||||
# by Seth Burgess <sjburges@gimp.org>
|
||||
# June 29, 1998
|
||||
#
|
||||
# This perl plug-in prepares a multilayer RGB image for use as a
|
||||
# transparent gif. To use this prpoerly, you want to have something
|
||||
# close to the intended background as the bottom layer. If convert
|
||||
# to indexed is not selected, the bottom two options are unused.
|
||||
#
|
||||
# TODO: Write a nicer GUI than Gimp::Fu provides (learn some gtk)
|
||||
# Anything else that seems useful
|
||||
|
||||
# Gimp::set_trace(TRACE_ALL);
|
||||
|
||||
sub prep {
|
||||
my ($img, $drawable, $threshold, $growth, $index, $dither, $colors) = @_;
|
||||
|
||||
# Duplicate this image, and work on the duplicate for the rest of the
|
||||
# procedure.
|
||||
my $out = gimp_channel_ops_duplicate($img);
|
||||
|
||||
# @layers is the ordered list, from top to bottom, of all layers in the
|
||||
# duplicated image. To find length of the list, use $#layers
|
||||
my @layers = gimp_image_get_layers($out);
|
||||
|
||||
# if there's not enough layers, abort.
|
||||
if ($#layers <= 0) {
|
||||
gimp_message(__"You need at least 2 layers to perform prep4gif");
|
||||
return;
|
||||
}
|
||||
|
||||
# Show the image early - this makes debugging a breeze
|
||||
my $newdisplay = gimp_display_new($out);
|
||||
|
||||
# Hide the bottom layer, so it doesn't get into the merge visible later.
|
||||
|
||||
my $bottomlayer = $layers[$#layers];
|
||||
gimp_layer_set_visible($bottomlayer, 0);
|
||||
gimp_layer_add_alpha($bottomlayer);
|
||||
|
||||
# NOTE TO PERL NEWBIES - 'my' variables should be declared in their outermost
|
||||
# scope - if defined inside the if statement, will disappear to program.
|
||||
|
||||
my $foreground;
|
||||
|
||||
if ($#layers > 1) {
|
||||
$foreground = gimp_image_merge_visible_layers($out, 0);
|
||||
}
|
||||
else {
|
||||
$foreground = $layers[0];
|
||||
};
|
||||
|
||||
my $layer_mask = gimp_layer_create_mask($foreground,2);
|
||||
gimp_image_add_layer_mask ($out, $foreground, $layer_mask);
|
||||
gimp_threshold($layer_mask,$threshold,255);
|
||||
|
||||
# Transfer layer mask to selection, and grow the selection
|
||||
gimp_selection_layer_alpha($foreground);
|
||||
gimp_selection_grow($out,$growth);
|
||||
|
||||
# Apply this selection to the background
|
||||
gimp_layer_set_visible($bottomlayer, 1);
|
||||
gimp_image_set_active_layer($out, $bottomlayer);
|
||||
gimp_selection_invert($out);
|
||||
gimp_edit_cut($bottomlayer);
|
||||
|
||||
# Clean up after yourself
|
||||
gimp_image_remove_layer_mask($out, $foreground, 1);
|
||||
my $outlayer = gimp_image_merge_visible_layers($out,0);
|
||||
|
||||
# Convert to indexed
|
||||
if ($index) {
|
||||
gimp_convert_indexed($out,1, MAKE_PALETTE, $colors, $dither, 1, "");
|
||||
}
|
||||
|
||||
# Show all the changes.
|
||||
gimp_displays_flush();
|
||||
|
||||
();
|
||||
}
|
||||
|
||||
register
|
||||
"prep4gif",
|
||||
"Prep for gif",
|
||||
"Make the image a small-cut-out of the intended background, so your transparent text doesn't look blocky.",
|
||||
"Seth Burgess",
|
||||
"Seth Burgess <sjburges\@gimp.org>",
|
||||
"2-15-98",
|
||||
N_"<Image>/Filters/Web/Prepare for GIF",
|
||||
"RGB*",
|
||||
[
|
||||
[PF_INT32, "lower_threshold", "Lower Alpha Threshold", 64],
|
||||
[PF_INT32, "growth", "How Much growth for safety ",1],
|
||||
[PF_TOGGLE, "convert_to_indexed", "Convert Image to indexed", 0],
|
||||
[PF_TOGGLE, "dither", "Floyd-Steinberg Dithering?", 1],
|
||||
[PF_INT32, "colors", "Colors to quantize to", "255"],
|
||||
],
|
||||
\&prep;
|
||||
|
||||
exit main;
|
||||
|
|
@ -1,59 +0,0 @@
|
|||
#!/usr/bin/perl
|
||||
|
||||
use Gimp;
|
||||
use Gimp::Fu;
|
||||
use Gimp::Util;
|
||||
|
||||
sub new_scratchlayer {
|
||||
my($image,$length,$gamma,$angle)=@_;
|
||||
my $type=$image->layertype(0);
|
||||
my($layer)=$image->layer_new ($image->width, $image->height, $image->layertype(0),
|
||||
"displace layer ($angle)", 100, NORMAL_MODE);
|
||||
$layer->add_layer(-1);
|
||||
$layer->fill (WHITE_IMAGE_FILL);
|
||||
$layer->noisify (0, 1, 1, 1, 0);
|
||||
$layer->mblur (0, $length, $angle);
|
||||
#$layer->levels (VALUE_LUT, 120, 255, $gamma, 0, 255);
|
||||
$layer->levels (VALUE_LUT, 120, 255, 0.3, 0, 255);
|
||||
|
||||
$layer;
|
||||
}
|
||||
|
||||
register "scratches",
|
||||
"Create a scratch effect",
|
||||
"Add scratches to an existing image. Works best on a metallic-like background.",
|
||||
"Marc Lehmann",
|
||||
"Marc Lehmann <pcg\@goof.com>",
|
||||
"19990223",
|
||||
N_"<Image>/Filters/Distorts/Scratches",
|
||||
"*",
|
||||
[
|
||||
[PF_SLIDER , "angle_x" , "The horizontal angle" , 30, [ 0, 360]],
|
||||
[PF_SLIDER , "angle_y" , "The vertical angle" , 70, [ 0, 360]],
|
||||
[PF_SLIDER , "gamma" , "Scratch map gamma" , 0.3, [0.1, 10, 0.05]],
|
||||
[PF_SPINNER , "smoothness" , "The scratch smoothness" , 15, [ 0, 400]],
|
||||
[PF_SPINNER , "length" , "The scratch length" , 10, [ 0, 400]],
|
||||
#[PF_BOOL, , "bump_map" , "Use bump map instead of displace", 0],
|
||||
],
|
||||
[],
|
||||
['gimp-1.1'],
|
||||
sub {
|
||||
my($image,$drawable,$anglex,$angley,$gamma,$length,$width)=@_;
|
||||
|
||||
$image->undo_push_group_start;
|
||||
|
||||
my $layer1 = new_scratchlayer ($image, $length, $gamma, $anglex);
|
||||
my $layer2 = new_scratchlayer ($image, $length, $gamma, $angley);
|
||||
|
||||
$drawable->displace ($width, $width, 1, 1, $layer1, $layer2, WRAP);
|
||||
|
||||
$layer1->remove_layer;
|
||||
$layer2->remove_layer;
|
||||
|
||||
$image->undo_push_group_end;
|
||||
|
||||
$image;
|
||||
};
|
||||
|
||||
exit main;
|
||||
|
|
@ -1,37 +0,0 @@
|
|||
#!/usr/bin/perl
|
||||
|
||||
use Gimp::Feature qw(pdl);
|
||||
use PDL;
|
||||
BEGIN { eval "use PDL::Graphics::TriD"; $@ and Gimp::Feature::missing('PDL TriD (OpenGL) support') }
|
||||
use Gimp;
|
||||
use Gimp::Fu;
|
||||
|
||||
register
|
||||
'view3d',
|
||||
'View grayscale drawable in 3D',
|
||||
'This script uses PDL::Graphics:TriD to view a grayscale drawable in 3D. You can choose a Cartesian (default) or Polar projection, toggle the drawing of lines, and toggle normal smoothing.',
|
||||
'Tom Rathborne', 'GPLv2', '1999-03-11',
|
||||
N_"<Image>/View/3D Surface",
|
||||
'RGB*,GRAY*', [
|
||||
[ PF_BOOL, 'polar', 'Radial view', 0],
|
||||
[ PF_BOOL, 'lines', 'Draw grid lines', 0],
|
||||
[ PF_BOOL, 'smooth', 'Smooth surface normals', 1]
|
||||
], [],
|
||||
sub {
|
||||
my ($img, $dwb, $polar, $lines, $smooth) = @_;
|
||||
|
||||
my $w = $dwb->width;
|
||||
my $h = $dwb->height;
|
||||
|
||||
my $regn = $dwb->pixel_rgn (0, 0, $w, $h, 0, 0);
|
||||
my $surf = $regn->get_rect (0, 0, $w, $h);
|
||||
$surf=$surf->slice("(0)");
|
||||
|
||||
imag3d [ $polar ? 'POLAR2D' : 'SURF2D', $surf ],
|
||||
{ 'Lines' => $lines, 'Smooth' => $smooth };
|
||||
|
||||
();
|
||||
};
|
||||
|
||||
exit main;
|
||||
|
|
@ -1,47 +0,0 @@
|
|||
#!/usr/bin/perl
|
||||
|
||||
use Gimp;
|
||||
use Gimp::Fu;
|
||||
|
||||
#Gimp::set_trace(TRACE_ALL);
|
||||
|
||||
register "webify",
|
||||
"Make an image suitable for the web",
|
||||
"This plug-in converts the image to indexed, with some extra options",
|
||||
"Marc Lehmann",
|
||||
"Marc Lehmann",
|
||||
"1.0",
|
||||
N_"<Image>/Filters/Web/Webify",
|
||||
"RGB*, GRAY*",
|
||||
[
|
||||
[PF_BOOL, "new", "create a new image?", 1],
|
||||
[PF_BOOL, "transparent", "make transparent?", 1],
|
||||
[PF_COLOUR, "bg_color", "the background colour to use for transparency", "white"],
|
||||
[PF_SLIDER, "threshold", "the threshold to use for background detection", 3, [0, 255, 1]],
|
||||
[PF_INT32, "colors", "how many colours to use (0 = don't convert to indexed)", 32],
|
||||
[PF_BOOL, "autocrop", "autocrop at end?", 1],
|
||||
],
|
||||
sub {
|
||||
my($img,$drawable,$new,$alpha,$bg,$thresh,$colours,$autocrop)=@_;
|
||||
|
||||
$img = $img->channel_ops_duplicate if $new;
|
||||
|
||||
eval { $img->undo_push_group_start };
|
||||
|
||||
$drawable = $img->flatten;
|
||||
|
||||
if ($alpha) {
|
||||
$drawable->add_alpha;
|
||||
$drawable->by_color_select($bg,$thresh,REPLACE,1,0,0,0);
|
||||
$drawable->edit_cut if $img->selection_bounds;
|
||||
}
|
||||
Plugin->autocrop($drawable) if $autocrop;
|
||||
$img->convert_indexed (2, 0, $colours, 0, 0, '') if $colours;
|
||||
|
||||
eval { $img->undo_push_group_end };
|
||||
|
||||
$new ? ($img->clean_all, $img) : ();
|
||||
};
|
||||
|
||||
exit main;
|
||||
|
|
@ -1,65 +0,0 @@
|
|||
#!/usr/bin/perl
|
||||
|
||||
# sent to me by Seth Burgess <sjburges@gimp.org>
|
||||
# small changes my Marc Lehmann <pcg@goof.com>
|
||||
|
||||
use Gimp;
|
||||
use Gimp::Fu;
|
||||
|
||||
#Gimp::set_trace(TRACE_CALL);
|
||||
|
||||
sub windify {
|
||||
my ($img, $drawable, $angle, $density, $distance, $wrap) = @_;
|
||||
my $oldbg = gimp_palette_get_background();
|
||||
my $xsize = gimp_drawable_width($drawable);
|
||||
my $ysize = gimp_drawable_height($drawable);
|
||||
|
||||
my $out = gimp_image_new($xsize,$ysize,0);
|
||||
gimp_palette_set_background([128,128,128]);
|
||||
my $windlayer = gimp_layer_new($out,$xsize,$ysize,RGB_IMAGE,"Windlayer",100,NORMAL_MODE);
|
||||
gimp_drawable_fill($windlayer, 0);
|
||||
gimp_image_add_layer($out,$windlayer,0);
|
||||
my $windlayercopy = gimp_layer_copy($windlayer, 1);
|
||||
gimp_image_add_layer($out,$windlayercopy,0);
|
||||
plug_in_noisify(1,$out,$windlayercopy,0,$density/255,
|
||||
$density/255,
|
||||
$density/255,1);
|
||||
|
||||
plug_in_mblur(1,$out,$windlayercopy,0,15,$angle);
|
||||
gimp_layer_set_mode($windlayercopy, 10); # Lighten Only
|
||||
gimp_image_merge_visible_layers($out,0);
|
||||
|
||||
# many thanks to Dov for this suggestion as a workaround to the
|
||||
# gimp_image_merge_visible_layers bug
|
||||
|
||||
my $newlay = gimp_image_get_active_layer ($out);
|
||||
plug_in_displace(1,$img,$drawable,-$distance*cos($angle*180/3.14159),
|
||||
$distance*sin($angle*180/3.14159),
|
||||
1,1, $newlay,$newlay, $wrap);
|
||||
gimp_image_remove_layer($out,$newlay);
|
||||
gimp_image_delete ($out);
|
||||
gimp_palette_set_background($oldbg);
|
||||
gimp_displays_flush();
|
||||
|
||||
undef;
|
||||
}
|
||||
|
||||
register
|
||||
"windify",
|
||||
"Add wind to an image",
|
||||
"Blow your image all over :)",
|
||||
"Seth Burgess",
|
||||
"Seth Burgess <sjburges\@gimp.org>",
|
||||
"1998-09-14",
|
||||
N_"<Image>/Filters/Distorts/Windify",
|
||||
"*",
|
||||
[
|
||||
[PF_INT32, "angle", "Wind Angle, 0 is left", 120],
|
||||
[PF_INT32, "density", "How Much Is Blown",80],
|
||||
[PF_VALUE, "distance", "How Far Its Blown",30],
|
||||
[PF_TOGGLE, "smear", "Smear on Edges (or Wrap)",0]
|
||||
],
|
||||
\&windify;
|
||||
|
||||
exit main;
|
||||
|
|
@ -1,119 +0,0 @@
|
|||
#!/usr/bin/perl
|
||||
# This is (hopefully) a demonstration of how pathetically easy it is to script
|
||||
# a neato effect you've come up with. This lil' effect was created by xach,
|
||||
# and translated by sjburges (me). You can consider it released under the GPL
|
||||
# or Artistic liscence, whichever makes you happier.
|
||||
#
|
||||
# <Xach> sjburges: 1. pixelize the photo 2. in a new white layer, render a grid
|
||||
# at the same resolution as the pixelize, then blur it. threshold the
|
||||
# grid until you get a roundish blob in the center of each square (you
|
||||
# may need to repeat a few times).
|
||||
# <Xach> sjburges: meanwhile, back at the pixelized image, bumpmap it with
|
||||
# itself and a depth of about 5. do this twice. then bumpmap it with
|
||||
# the round blobby layer.
|
||||
# <Xach> then create a new, clean grid, and bumpmap the pixelized layer with it
|
||||
#
|
||||
|
||||
# (To get a decent blobby grid)
|
||||
# <Xach> <Xach> render a grid at 10x10, gaussian blur at 7, then set levels to
|
||||
# 196 1.00 234
|
||||
|
||||
# Revision - 1.1: added a gimp_displays_flush() for 1.0.x users
|
||||
# stopped deleting the layers after removal - it was
|
||||
# causing bad things to happen with refcounts. I hope
|
||||
# gimp is cleaning up this memory on its own...
|
||||
# 1.2: Fixed buggy selection handling - oops ;)
|
||||
# 1.3: Added undo capability by Marc Lehman <pcg@goof.com>
|
||||
# 1.4: Marc Lehman <pcg@goof.com>, changed function name
|
||||
# 1.5: Seth Burgess <sjburges@gimp.org> added my email, put it
|
||||
# in a directory more suitable than the lame "Misc"
|
||||
# Here's the boring start of every script...
|
||||
|
||||
use Gimp qw(:auto __ N_);
|
||||
use Gimp::Fu;
|
||||
|
||||
register "xach_blocks",
|
||||
"Xach's Blocks o' Fun",
|
||||
"Turn your picture into something that resembles a certain trademarked
|
||||
building block creation",
|
||||
"Seth Burgess",
|
||||
"Seth Burgess <sjburges\@gimp.org>",
|
||||
"2-15-98",
|
||||
N_"<Image>/Filters/Map/Xach Blocks",
|
||||
"*",
|
||||
[
|
||||
[PF_SLIDER, "block_size", "The size of the blocks...", 10, [0, 255, 1]],
|
||||
[PF_SLIDER, "knob_factor", "The size of your knob...", 67, [0, 100, 5]],
|
||||
],
|
||||
sub {
|
||||
my($img,$drawable,$blocksize, $knobfactor)=@_;
|
||||
$selection_flag = 0;
|
||||
eval { $img->undo_push_group_start };
|
||||
if (!$drawable->has_alpha) {
|
||||
$drawable->add_alpha;
|
||||
};
|
||||
if ($img->selection_is_empty) {
|
||||
$img->selection_all;
|
||||
$selection_flag = 1;
|
||||
}
|
||||
$oldbackground = gimp_palette_get_background();
|
||||
# Now the fun begins :)
|
||||
|
||||
$selection = $img->selection_save;
|
||||
|
||||
#1. Pixelize the photo
|
||||
$drawable->plug_in_pixelize($blocksize);
|
||||
# 2. in a new white layer, render a grid
|
||||
# at the same resolution as the pixelize, then blur it.
|
||||
$gridlayer = $img->layer_new($img->width, $img->height, RGBA_IMAGE, "Grid 1", 100, 0);
|
||||
$img->add_layer($gridlayer,0);
|
||||
$img->selection_all;
|
||||
gimp_edit_clear($gridlayer);
|
||||
gimp_palette_set_background([255,255,255]);
|
||||
gimp_edit_fill($gridlayer);
|
||||
$gridlayer->plug_in_grid($blocksize, $blocksize, 0, 0);
|
||||
$gridlayer->plug_in_gauss_iir(0.7*$blocksize, 1, 1);
|
||||
|
||||
# threshold the
|
||||
# grid until you get a roundish blob in the center of each square (you
|
||||
# may need to repeat a few times).
|
||||
|
||||
$gridlayer->levels(0, 196, 234, $knobfactor/100.0 , 0, 255);
|
||||
|
||||
# <Xach> sjburges: meanwhile, back at the pixelized image, bumpmap it with
|
||||
# itself and a depth of about 5. do this twice.
|
||||
gimp_selection_load($selection);
|
||||
$drawable->plug_in_bump_map($drawable, 135, 45, 5, 0, 0, 0, 0, 1, 0, 0);
|
||||
$drawable->plug_in_bump_map($drawable, 135, 45, 5, 0, 0, 0, 0, 1, 0, 0);
|
||||
$drawable->plug_in_bump_map($gridlayer, 135, 45, 5, 0, 0, 0, 0, 1, 0, 0);
|
||||
|
||||
# <Xach> then create a new, clean grid, and bumpmap the pixelized layer with it
|
||||
$img->selection_all;
|
||||
$cleangrid = $img->layer_new($img->width, $img->height,
|
||||
RGBA_IMAGE, "Grid 2", 100, 0);
|
||||
$img->add_layer($cleangrid,0);
|
||||
gimp_edit_fill($cleangrid);
|
||||
$cleangrid->plug_in_grid($blocksize, $blocksize, 0, 0);
|
||||
gimp_selection_load($selection);
|
||||
$drawable->plug_in_bump_map($cleangrid, 135, 45, 3, 0, 0, 0, 0, 1, 0, 0);
|
||||
$img->selection_all;
|
||||
|
||||
# Clean up stuff
|
||||
|
||||
$img->remove_layer($cleangrid);
|
||||
# $cleangrid->delete; # Deleting these layers after removal seems to cause
|
||||
# strange problems (I think gimp handles this
|
||||
# automatically now)
|
||||
$img->remove_layer($gridlayer);
|
||||
# $gridlayer->delete;
|
||||
gimp_selection_load($selection);
|
||||
gimp_palette_set_background($oldbackground);
|
||||
if ($selection_flag ==1) {
|
||||
$img->selection_none;
|
||||
}
|
||||
eval { $img->undo_push_group_end };
|
||||
return ();
|
||||
};
|
||||
|
||||
exit main;
|
||||
|
|
@ -1,84 +0,0 @@
|
|||
#!/usr/bin/perl
|
||||
# by Seth Burgess <sjburges@gimp.org>
|
||||
|
||||
#[Xach] start off with an image, then pixelize it
|
||||
#[Xach] then add alpha->add layer mask [20:21]
|
||||
#[Xach] render a checkerboard into the layer mask
|
||||
#[Xach] duplicate the image. fill the original with black, then blur the layer
|
||||
# mask (i used 30% of pixelize size) and offset it by some value (i
|
||||
# chose 20% of the pixelize size)
|
||||
#[Xach] duplicate the duplicate, remove the layer mask, move it below everything
|
||||
#[Xach] then add a new white layer on top, set the mode to multiply, and render
|
||||
# a grid into it at pixelize size
|
||||
#[Xach] that's a bit roundabout, but it's also in the xcf
|
||||
#
|
||||
# Because the way xach does it is a bit ackward, I'm switching it around a bit
|
||||
# and working from the bottom up..
|
||||
|
||||
# Revision 1.1: Marc Lehman <pcg@goof.com> added undo capability
|
||||
# Revision 1.2: Marc Lehman <pcg@goof.com>, changed function name
|
||||
# Revision 1.3: Seth Burgess <sjburges@gimp.org>, changed location and
|
||||
# added my email address
|
||||
#
|
||||
# Here's the boring start of every script...
|
||||
|
||||
use Gimp qw(:auto __ N_);
|
||||
use Gimp::Fu;
|
||||
|
||||
register "xach_shadows",
|
||||
"Xach's Shadows o' Fun",
|
||||
"Screen of 50% of your drawing into a dropshadowed layer.",
|
||||
"Seth Burgess",
|
||||
"Seth Burgess <sjburges\@gimp.org>",
|
||||
"2-15-98",
|
||||
N_"<Image>/Filters/Map/Xach Shadows",
|
||||
"RGB*, GRAY*",
|
||||
[
|
||||
[PF_SLIDER, "block_size", "The size of the blocks...", 10, [0, 255, 1]],
|
||||
],
|
||||
sub {
|
||||
my($img,$drawable,$blocksize) =@_;
|
||||
|
||||
eval { $img->undo_push_group_start };
|
||||
# $selection_flag = 0;
|
||||
if (!$drawable->has_alpha) {
|
||||
$drawable->add_alpha;
|
||||
};
|
||||
# This only can be applied to an entire image right now..
|
||||
# $selection = $img->selection_save;
|
||||
$img->selection_all;
|
||||
$oldbackground = gimp_palette_get_background();
|
||||
# Now the fun begins :)
|
||||
$drawable->plug_in_pixelize($blocksize);
|
||||
$shadowlayer = $drawable->layer_copy(0);
|
||||
$img->add_layer($shadowlayer,0);
|
||||
$checkmask = $shadowlayer->create_mask(WHITE_MASK);
|
||||
$img->add_layer_mask($shadowlayer, $checkmask);
|
||||
plug_in_checkerboard ($img, $checkmask, 0, $blocksize);
|
||||
|
||||
$frontlayer = $shadowlayer->layer_copy(0);
|
||||
$img->add_layer($frontlayer,0);
|
||||
gimp_palette_set_background([0,0,0]);
|
||||
$shadowlayer->fill(BG_IMAGE_FILL);
|
||||
$checkmask->plug_in_gauss_iir(0.3*$blocksize, 1, 1);
|
||||
gimp_channel_ops_offset ($checkmask, 1, 0, 0.2*$blocksize, 0.2*$blocksize);
|
||||
|
||||
|
||||
$gridlayer = $img->layer_new($img->width, $img->height, RGBA_IMAGE, "Grid 1", 100, 0);
|
||||
$img->add_layer($gridlayer,0);
|
||||
$img->selection_all;
|
||||
gimp_edit_clear($gridlayer);
|
||||
gimp_palette_set_background([255,255,255]);
|
||||
gimp_edit_fill($gridlayer);
|
||||
$gridlayer->plug_in_grid((1, $blocksize, 0, "black", 0) x 3);
|
||||
|
||||
gimp_layer_set_mode($gridlayer, 3);
|
||||
# Clean up stuff
|
||||
gimp_palette_set_background($oldbackground);
|
||||
eval { $img->undo_push_group_end };
|
||||
gimp_displays_flush();
|
||||
return();
|
||||
};
|
||||
|
||||
exit main;
|
||||
|
|
@ -1,54 +0,0 @@
|
|||
#!/usr/bin/perl
|
||||
|
||||
# Once again, an effect of Xach's
|
||||
# Created by Seth Burgess <sjburges@gimp.org>
|
||||
|
||||
use Gimp qw(:auto __ N_);
|
||||
use Gimp::Fu;
|
||||
|
||||
register "xachvision",
|
||||
"Xach Survielence Camera/XachVision",
|
||||
"This makes an interlaced-looking machine vision type thing.",
|
||||
"Seth Burgess",
|
||||
"Seth Burgess <sjburges\@gimp.org>",
|
||||
"1999-02-28",
|
||||
N_"<Image>/Filters/Noise/Xach Vision...",
|
||||
"RGB*, GRAY*",
|
||||
[
|
||||
[PF_COLOR, "color", "What Color to see the world in", [0, 255, 0]],
|
||||
[PF_SLIDER, "added_noise", "How much noise to add", 25, [0,255,5]]
|
||||
],
|
||||
sub {
|
||||
my($img,$drawable,$color,$amt) =@_;
|
||||
|
||||
eval { $img->undo_push_group_start };
|
||||
$oldbackground = gimp_palette_get_background();
|
||||
|
||||
$midlayer = $drawable->gimp_layer_copy(1);
|
||||
$img->add_layer($midlayer, 0);
|
||||
|
||||
$toplayer = $drawable->gimp_layer_copy(0);
|
||||
$img->add_layer($toplayer, 0);
|
||||
|
||||
gimp_palette_set_background($color);
|
||||
$toplayer->edit_fill();
|
||||
$toplayer->set_mode(COLOR_MODE);
|
||||
|
||||
gimp_palette_set_background([0,0,0]);
|
||||
$drawable->edit_fill();
|
||||
|
||||
$amt = $amt/255;
|
||||
$midlayer->plug_in_noisify(1,$amt, $amt, $amt, $amt);
|
||||
$midmask = $midlayer->create_mask(0);
|
||||
$img->add_layer_mask($midlayer, $midmask);
|
||||
$midmask->plug_in_grid($img->height * 3, 3, 0, 0);
|
||||
$midmask->plug_in_gauss_iir(1.01, 1, 1);
|
||||
|
||||
gimp_palette_set_background($oldbackground);
|
||||
eval { $img->undo_push_group_end };
|
||||
gimp_displays_flush();
|
||||
return();
|
||||
};
|
||||
|
||||
exit main;
|
||||
|
Loading…
Reference in New Issue