Gimp/plug-ins/perl/examples/logulator
Michael Natterer 1bc1419e8f app/core/Makefile.am new files.
2001-12-12  Michael Natterer  <mitch@gimp.org>

	* app/core/Makefile.am
	* app/core/gimpimage-pick-color.[ch]: new files.

	gimp_image_pick_color() doesn't set the FG or BG color and doesn't
	touch the current palettte.

	* app/tools/gimpcolorpickertool.[ch]: removed the actual picking
	code, set the user_context's FG or BG color here.

	* app/gui/palette-editor.[ch]:
	s/palette_set_active_color/palette_editor_update_color/, don't set
	the FG and BG color here. The function is still #if 0'ed.

	* app/gui/toolbox.c: fixed WM resize hints in toolbox_style_set(),
	code cleanup.

	* app/tools/gimppainttool.[ch]: some cleanup before chopping.

	* app/tools/gimpsmudgetool.c: changed accordingly.

	* tools/pdbgen/pdb/misc_tools.pdb: removed the possibility to set
	the FG or BG color or add the picked color to the active palette
	bacause it doesn't belong here. Palette PDB wrappers are on the
	TODO anyway.

	* app/pdb/misc_tools_cmds.c
	* libgimp/gimpmisctools_pdb.[ch]: regenerated.

	* plug-ins/perl/examples/image_tile
	* plug-ins/perl/examples/logulator
	* plug-ins/script-fu/scripts/hsv-graph.scm
	* plug-ins/script-fu/scripts/title-header.scm: changed accordingly.
2001-12-12 01:16:39 +00:00

1009 lines
41 KiB
Perl
Executable file

#!/usr/bin/perl
use Gimp qw(:auto __ N_);
use Gimp::Fu;
use Gimp::Util;
N_"/Filters/Logulator"; # workaround for i18n weirdnesses
#Gimp::set_trace(TRACE_CALL);
my $global_drawable;
sub register($$$$$$$$$;@) {
my($function,$blurb,$help,$author,$copyright,$date,
$menupath,$imagetypes,$params,$code)=@_;
$function =~ s%^perl_fu_%logulator_% or die;
$imagetypes ||= "RGBA,GRAYA,INDEXEDA";
my($i,$j)=0;
my($ti,$fsi,$fi);
$i=@$params;
while($i--) {
local $_ = $params->[$i];
if($_->[1] =~ /text_string/i &&!defined $ti) {
$ti=$i;
splice @$params,$i,1;
} elsif ($_->[1] =~ /font_size_pixels/i &&!defined $fsi) {
$fsi=$i;
splice @$params,$i,1;
} elsif ($_->[1] =~ /font/i &&!defined $fi) {
$fi=$i;
splice @$params,$i,1;
}
}
defined($ti) and defined($fsi) and defined($fi) or die "$function, $menupath: no identifiable font ($ti $fsi $fi)\n";
$menupath =~ /([^\/]+)$/;
$menupath =~ s/\.*$/.../;
$help=<<EOF.$help;
This "script" is actually a script-fu logo script that has been converted
to perl. Instead of producing a logo from a text string (nice but rather
limited in the shapes you can create) it uses the drawable you specified
as the text shape. Any colour that the plug-in tries to use is ignored,
which allows you to create multi-colour text.
The drawable must have an alpha channel, and the shape of this channel
prescribes the shape of the logo. Most logos ignore any colour information
and instead use the shape only as a stencil, but some logo scripts do make
use of the text colour.
The original help for $1 follows:
EOF
Gimp::Fu::register($function,$blurb,$help,$author,$copyright,$date,
$menupath,$imagetypes,$params,sub{
my($image,$drawable)=(shift,shift);
$drawable->has_alpha or die "It makes no sense to call $menupath with a drawable lacking alpha!\n";
$i=0;
while($i<=@_) {
if($i==$ti) {
splice @_,$i,0,"-- Text --";
} elsif ($i==$fsi) {
splice @_,$i,0,$drawable->height;
} elsif ($i==$fi) {
splice @_,$i,0,"-*-helvetica-medium-r-normal-*-24-*-*-*-p-*-iso8859-1";
}
$i++;
}
$global_drawable=$drawable;
&$code;
();
});
}
sub gimp_text {
die "gimp_text not yet supported\n";
}
sub gimp_text_get_extents {
die "gimp_text_get_extents not yet supported\n";
}
# just return the width/height of the drawable instead
sub gimp_text_get_extents_fontname {
my($text,$size,$size_type,$fontname)=@_;
($global_drawable->width,$global_drawable->height,$global_drawable->height,0);
}
# instead of the text layer, just return a copy of the drawable
sub gimp_text_fontname {
my($image,$layer,$x,$y,$text,$border,$antialias,$height,$size_type,$fontname)=@_;
$global_drawable->image->selection_all;
$global_drawable->edit_copy;
my $newlay;
if ($layer == -1) {
$newlay=$image->layer_new($global_drawable->width,$global_drawable->height,
$image->layertype(1), $text || "--text--", 100, NORMAL_MODE);
$newlay->drawable_fill(TRANS_IMAGE_FILL);
$newlay->add_layer(0);
$newlay->edit_paste(0)->floating_sel_anchor;
} else {
$newlay = $layer->edit_paste(0);
}
$newlay;
}
# script-fu convenience functions
sub cdr {
my(@x)=@{$_[0]};
shift(@x);
@x >1 ? [@x] : $x[0];
}
sub number2string {
sprintf "%$_[1]d",$_[0];
}
sub nth {
$_[1]->[$_[0]];
}
sub min {
$_[0] < $_[1] ? $_[0] : $_[1];
}
sub max {
$_[0] > $_[1] ? $_[0] : $_[1];
}
#############################################################################
# converted scripts start here
#############################################################################
sub carve_brush {
my ($brush_size) = @_;
$brush_size <= 5 ? "Circle (05)"
: $brush_size <= 7 ? "Circle (07)"
: $brush_size <= 9 ? "Circle (09)"
: $brush_size <= 11 ? "Circle (11)"
: $brush_size <= 13 ? "Circle (13)"
: $brush_size <= 15 ? "Circle (15)"
: $brush_size <= 17 ? "Circle (17)"
: $brush_size > 17 ? "Circle (19)"
: die 'cond fell off the end';
}
sub carve_scale {
my ($val, $scale) = @_;
sqrt ($val) * $scale;
}
sub calculate_inset_gamma {
my ($img, $layer) = @_;
do {
my $stats = [gimp_histogram ($layer, 0, 0, 255)];
my $mean = @{$stats}[0];
$mean < 127 ? (1.0 + 0.5 * (127 - $mean) / 127.0)
: $mean >= 127 ? (1.0 - 0.5 * ($mean - 127) / 127.0)
: die 'cond fell off the end';
};
}
sub script_fu_carved_logo {
my ($text, $size, $font, $bg_img, $carve_raised) = @_;
do {
my $img = gimp_file_load ($bg_img, $bg_img);
my $offx = carve_scale ($size, 0.33);
my $offy = carve_scale ($size, 0.25);
my $feather = carve_scale ($size, 0.3);
my $brush_size = carve_scale ($size, 0.3);
my $b_size = carve_scale ($size, 1.5);
my $layer1 = gimp_image_active_drawable ($img);
my $mask_layer = gimp_text_fontname ($img, -1, 0, 0, $text, $b_size, 1, $size, PIXELS, $font);
my $width = gimp_drawable_width ($mask_layer);
my $height = gimp_drawable_height ($mask_layer);
my $mask_fs = 0;
my $mask = gimp_channel_new ($img, $width, $height, "Engraving Mask", 50, [0, 0, 0]);
my $inset_gamma = calculate_inset_gamma ($img, $layer1);
my $mask_fat = 0;
my $mask_emboss = 0;
my $mask_highlight = 0;
my $mask_shadow = 0;
my $shadow_layer = 0;
my $highlight_layer = 0;
my $cast_shadow_layer = 0;
my $csl_mask = 0;
my $inset_layer = 0;
my $il_mask = 0;
my $old_fg = gimp_palette_get_foreground ();
my $old_bg = gimp_palette_get_background ();
my $old_brush = gimp_brushes_get_brush ();
gimp_image_undo_disable ($img);
gimp_layer_set_preserve_trans ($mask_layer, 1);
gimp_palette_set_background ([255, 255, 255]);
gimp_edit_fill ($mask_layer, BG_IMAGE_FILL);
gimp_palette_set_background ([0, 0, 0]);
gimp_edit_fill ($mask, BG_IMAGE_FILL);
plug_in_tile ($img, $layer1, $width, $height, 0);
gimp_image_add_channel ($img, $mask, 0);
gimp_edit_copy ($mask_layer);
$mask_fs = gimp_edit_paste ($mask, 0);
gimp_floating_sel_anchor ($mask_fs);
if ($carve_raised) {
gimp_invert ($mask);
}
gimp_image_remove_layer ($img, $mask_layer);
$mask_fat = gimp_channel_copy ($mask);
gimp_image_add_channel ($img, $mask_fat, 0);
gimp_selection_load ($mask_fat);
gimp_brushes_set_brush (carve_brush ($brush_size));
gimp_palette_set_foreground ([255, 255, 255]);
gimp_edit_stroke ($mask_fat);
gimp_selection_none ($img);
$mask_emboss = gimp_channel_copy ($mask_fat);
gimp_image_add_channel ($img, $mask_emboss, 0);
plug_in_gauss_rle ($img, $mask_emboss, $feather, 1, 1);
plug_in_emboss ($img, $mask_emboss, 315.0, 45.0, 7, 1);
gimp_palette_set_background ([180, 180, 180]);
gimp_selection_load ($mask_fat);
gimp_selection_invert ($img);
gimp_edit_fill ($mask_emboss, BG_IMAGE_FILL);
gimp_selection_load ($mask);
gimp_edit_fill ($mask_emboss, BG_IMAGE_FILL);
gimp_selection_none ($img);
$mask_highlight = gimp_channel_copy ($mask_emboss);
gimp_image_add_channel ($img, $mask_highlight, 0);
gimp_levels ($mask_highlight, 0, 180, 255, 1.0, 0, 255);
$mask_shadow = $mask_emboss;
gimp_levels ($mask_shadow, 0, 0, 180, 1.0, 0, 255);
gimp_edit_copy ($mask_shadow);
$shadow_layer = gimp_edit_paste ($layer1, 0);
gimp_floating_sel_to_layer ($shadow_layer);
gimp_layer_set_mode ($shadow_layer, MULTIPLY_MODE);
gimp_edit_copy ($mask_highlight);
$highlight_layer = gimp_edit_paste ($shadow_layer, 0);
gimp_floating_sel_to_layer ($highlight_layer);
gimp_layer_set_mode ($highlight_layer, SCREEN_MODE);
gimp_edit_copy ($mask);
$cast_shadow_layer = gimp_edit_paste ($highlight_layer, 0);
gimp_floating_sel_to_layer ($cast_shadow_layer);
gimp_layer_set_mode ($cast_shadow_layer, MULTIPLY_MODE);
gimp_layer_set_opacity ($cast_shadow_layer, 75);
plug_in_gauss_rle ($img, $cast_shadow_layer, $feather, 1, 1);
gimp_layer_translate ($cast_shadow_layer, $offx, $offy);
$csl_mask = gimp_layer_create_mask ($cast_shadow_layer, BLACK_MASK);
gimp_image_add_layer_mask ($img, $cast_shadow_layer, $csl_mask);
gimp_selection_load ($mask);
gimp_palette_set_background ([255, 255, 255]);
gimp_edit_fill ($csl_mask, BG_IMAGE_FILL);
$inset_layer = gimp_layer_copy ($layer1, 1);
gimp_image_add_layer ($img, $inset_layer, 1);
$il_mask = gimp_layer_create_mask ($inset_layer, BLACK_MASK);
gimp_image_add_layer_mask ($img, $inset_layer, $il_mask);
gimp_selection_load ($mask);
gimp_palette_set_background ([255, 255, 255]);
gimp_edit_fill ($il_mask, BG_IMAGE_FILL);
gimp_selection_none ($img);
gimp_levels ($inset_layer, 0, 0, 255, $inset_gamma, 0, 255);
gimp_image_remove_channel ($img, $mask);
gimp_image_remove_channel ($img, $mask_fat);
gimp_image_remove_channel ($img, $mask_highlight);
gimp_image_remove_channel ($img, $mask_shadow);
gimp_layer_set_name ($layer1, "Carved Surface");
gimp_layer_set_name ($shadow_layer, "Bevel Shadow");
gimp_layer_set_name ($highlight_layer, "Bevel Highlight");
gimp_layer_set_name ($cast_shadow_layer, "Cast Shadow");
gimp_layer_set_name ($inset_layer, "Inset");
gimp_palette_set_foreground ($old_fg);
gimp_palette_set_background ($old_bg);
gimp_brushes_set_brush ($old_brush);
gimp_display_new ($img);
gimp_image_undo_enable ($img);
};
}
register "perl_fu_carved_logo",
"Carve the text from the specified image. The image will be automatically tiled to accomodate the rendered text string. The \"Carve Raised Text\" parameter determines whether to carve the text itself, or around the text.",
"Carve the text from the specified image. The image will be automatically tiled to accomodate the rendered text string. The \"Carve Raised Text\" parameter determines whether to carve the text itself, or around the text.",
"Spencer Kimball",
"Spencer Kimball",
"1997",
N_"<Image>/Filters/Logulator/Carved",
"",
[
[PF_STRING, 'text_string', "Text String", "Marble"],
[PF_ADJUSTMENT,'font_size_pixels', "Font Size (pixels)", [100, 2, 1000, 1, 10, 0, 1]],
[PF_FONT, 'font', "Font", "-*-Engraver-*-r-*-*-24-*-*-*-p-*-*-*"],
[PF_FILE, 'background_img', "Background Img", "".'/usr/local/share/gimp/1.1'."/scripts/texture3.jpg"],
[PF_TOGGLE, 'carve_raised_text',"Carve Raised Text", 0],
],
\&script_fu_carved_logo;
sub set_pt {
my ($a, $index, $x, $y) = @_;
do {
$a->[$index * 2] = $x;
$a->[($index * 2 + 1)] = $y;
};
}
sub spline1 {
do {
my $a = (18,"byte",[]);
set_pt ($a, 0, 0, 0);
set_pt ($a, 1, 31, 235);
set_pt ($a, 2, 63, 23);
set_pt ($a, 3, 95, 230);
set_pt ($a, 4, 127, 25);
set_pt ($a, 5, 159, 210);
set_pt ($a, 6, 191, 20);
set_pt ($a, 7, 223, 240);
set_pt ($a, 8, 255, 31);
$a;
};
}
sub crystal_brush {
my ($brush_size) = @_;
$brush_size <= 5 ? "Circle (05)"
: $brush_size <= 7 ? "Circle (07)"
: $brush_size <= 9 ? "Circle (09)"
: $brush_size <= 11 ? "Circle (11)"
: $brush_size <= 13 ? "Circle (13)"
: $brush_size <= 15 ? "Circle (15)"
: $brush_size <= 17 ? "Circle (17)"
: "Circle Fuzzy (19)";
}
sub shadows {
my ($val) = @_;
0.96 * $val / 2.55;
}
sub midtones {
my ($val) = @_;
$val / 2.55;
}
sub highlights {
my ($val) = @_;
1.108 * $val / 2.55;
}
sub rval {
my ($col) = @_;
@{$col}[0];
}
sub gval {
my ($col) = @_;
@{$col}[1];
}
sub bval {
my ($col) = @_;
@{$col}[2];
}
sub sota_scale {
my ($val, $scale, $chrome_factor) = @_;
sqrt ($val) * $scale * $chrome_factor;
}
sub copy_layer_crystal {
my ($dest_image, $dest_drawable, $source_image, $source_drawable) = @_;
gimp_selection_all ($dest_image);
gimp_edit_clear ($dest_drawable);
gimp_selection_none ($dest_image);
gimp_selection_all ($source_image);
gimp_edit_copy ($source_drawable);
do {
my $floating_sel = gimp_edit_paste ($dest_drawable, 0);
gimp_floating_sel_anchor ($floating_sel);
};
}
sub script_fu_crystal_logo {
my ($chrome_factor, $text, $size, $font, $bg_img, $env_map) = @_;
do {
my $img = gimp_image_new (256, 256, GRAY);
my $back_img = gimp_file_load ($bg_img, $bg_img);
my $back_layer = gimp_image_active_drawable ($back_img);
my $banding_img = gimp_file_load ($env_map, $env_map);
my $banding_layer = gimp_image_active_drawable ($banding_img);
my $banding_height = gimp_drawable_height ($banding_layer);
my $banding_width = gimp_drawable_width ($banding_layer);
my $banding_type = gimp_drawable_type ($banding_layer);
my $b_size = sota_scale ($size, 2, $chrome_factor);
my $offx1 = sota_scale ($size, 0.33, $chrome_factor);
my $offy1 = sota_scale ($size, 0.25, $chrome_factor);
my $offx2 = sota_scale ($size, -(0.33), $chrome_factor);
my $offy2 = sota_scale ($size, -(0.25), $chrome_factor);
my $feather = sota_scale ($size, 0.5, $chrome_factor);
my $blur = sota_scale ($size, 0.5, $chrome_factor);
my $displace = sota_scale ($size, 0.25, $chrome_factor);
my $brush_size = sota_scale ($size, 0.5, $chrome_factor);
my $text_layer = gimp_text_fontname ($img, -1, 0, 0, $text, $b_size, 1, $size, PIXELS, $font);
my $width = gimp_drawable_width ($text_layer);
my $height = gimp_drawable_height ($text_layer);
my $tile_ret = [plug_in_tile ($back_img, $back_layer, $width, $height, 1)];
my $tile_img = @{$tile_ret}[0];
my $tile_layer = @{$tile_ret}[1];
my $tile_width = gimp_drawable_width ($tile_layer);
my $tile_height = gimp_drawable_height ($tile_layer);
my $tile_type = gimp_drawable_type ($tile_layer);
my $bg_layer = gimp_layer_new ($img, $tile_width, $tile_height, $tile_type, "BG-Layer", 100, NORMAL_MODE);
my $layer1 = gimp_layer_new ($img, $banding_width, $banding_height, $banding_type, "Layer1", 100, NORMAL_MODE);
my $layer2 = gimp_layer_new ($img, $width, $height, GRAYA_IMAGE, "Layer 2", 100, DIFFERENCE_MODE);
my $layer3 = gimp_layer_new ($img, $width, $height, GRAYA_IMAGE, "Layer 3", 100, NORMAL_MODE);
my $layer_mask = 0;
my $layer_mask2 = 0;
my $disp_map = 0;
my $old_fg = gimp_palette_get_foreground ();
my $old_bg = gimp_palette_get_background ();
my $old_brush = gimp_brushes_get_brush ();
gimp_image_delete ($back_img);
gimp_image_undo_disable ($img);
gimp_image_resize ($img, $width, $height, 0, 0);
gimp_image_add_layer ($img, $layer3, 0);
gimp_image_add_layer ($img, $layer2, 0);
gimp_palette_set_background ([255, 255, 255]);
gimp_selection_none ($img);
gimp_edit_fill ($layer2, BG_IMAGE_FILL);
gimp_edit_fill ($layer3, BG_IMAGE_FILL);
gimp_layer_set_visible ($text_layer, 0);
gimp_selection_layer_alpha ($text_layer);
gimp_palette_set_background ([0, 0, 0]);
gimp_selection_translate ($img, $offx1, $offy1);
gimp_selection_feather ($img, $feather);
gimp_edit_fill ($layer2, BG_IMAGE_FILL);
gimp_selection_translate ($img, 2 * $offx2, 2 * $offy2);
gimp_edit_fill ($layer3, BG_IMAGE_FILL);
gimp_selection_none ($img);
$layer2 = gimp_image_merge_visible_layers ($img, CLIP_TO_IMAGE);
gimp_invert ($layer2);
copy_layer_crystal ($img, $layer1, $banding_img, $banding_layer);
gimp_image_delete ($banding_img);
gimp_image_add_layer ($img, $layer1, 0);
gimp_layer_scale ($layer1, $width, $height, 0);
plug_in_gauss_iir ($img, $layer1, 10, 1, 1);
gimp_layer_set_opacity ($layer1, 50);
$layer1 = gimp_image_merge_visible_layers ($img, CLIP_TO_IMAGE);
gimp_curves_spline ($layer1, 0, 18, spline1 ());
$layer_mask = gimp_layer_create_mask ($layer1, BLACK_MASK);
gimp_image_add_layer_mask ($img, $layer1, $layer_mask);
gimp_selection_layer_alpha ($text_layer);
gimp_palette_set_background ([255, 255, 255]);
gimp_edit_fill ($layer_mask, BG_IMAGE_FILL);
$disp_map = gimp_selection_save ($img);
gimp_brushes_set_brush (crystal_brush ($brush_size));
gimp_palette_set_foreground ([0, 0, 0]);
gimp_edit_stroke ($disp_map);
gimp_selection_none ($img);
plug_in_gauss_rle ($img, $disp_map, $blur, 1, 1);
gimp_levels ($disp_map, 0, 0, 255, 1.0, 96, 255);
if (gimp_drawable_is_rgb ($bg_layer) == 1) {
gimp_convert_rgb ($img);
}
copy_layer_crystal ($img, $bg_layer, $tile_img, $tile_layer);
gimp_image_delete ($tile_img);
gimp_image_add_layer ($img, $bg_layer, 2);
$layer2 = gimp_layer_copy ($bg_layer, 1);
gimp_image_add_layer ($img, $layer2, 1);
plug_in_displace ($img, $layer2, $displace, $displace, 1, 1, $disp_map, $disp_map, 0);
$layer_mask2 = gimp_layer_create_mask ($layer2, BLACK_MASK);
gimp_image_add_layer_mask ($img, $layer2, $layer_mask2);
gimp_selection_layer_alpha ($text_layer);
gimp_palette_set_background ([255, 255, 255]);
gimp_edit_fill ($layer_mask2, BG_IMAGE_FILL);
gimp_selection_none ($img);
gimp_levels ($layer2, 0, 0, 200, 1.5, 50, 255);
gimp_layer_set_mode ($layer1, OVERLAY_MODE);
plug_in_gauss_rle ($img, $text_layer, $blur, 1, 1);
gimp_layer_set_preserve_trans ($text_layer, 1);
gimp_palette_set_background ([0, 0, 0]);
gimp_edit_fill ($text_layer, BG_IMAGE_FILL);
gimp_layer_set_mode ($text_layer, OVERLAY_MODE);
gimp_layer_translate ($text_layer, $offx1, $offy1);
gimp_image_remove_channel ($img, $disp_map);
gimp_layer_set_visible ($text_layer, 1);
gimp_layer_set_name ($layer1, "Crystal");
gimp_layer_set_name ($layer2, "Interior");
gimp_layer_set_name ($bg_layer, "Background");
gimp_layer_set_name ($text_layer, "Shadow");
gimp_palette_set_foreground ($old_fg);
gimp_palette_set_background ($old_bg);
gimp_brushes_set_brush ($old_brush);
gimp_image_undo_enable ($img);
gimp_display_new ($img);
};
}
register "perl_fu_crystal_logo",
"Crystal/Gel effect which displaces the image underneath",
"Crystal/Gel effect which displaces the image underneath",
"Spencer Kimball",
"Spencer Kimball",
"1997",
N_"<Image>/Filters/Logulator/Crystal",
"",
[
[PF_VALUE, 'chrome_factor', "Chrome Factor", "1.0"],
[PF_STRING, 'text_string', "Text String", "Crystal"],
[PF_ADJUSTMENT,'font_size_pixels', "Font Size (pixels)", [150, 2, 1000, 1, 10, 0, 1]],
[PF_FONT, 'font', "Font", "-*-Engraver-*-r-*-*-24-*-*-*-p-*-*-*"],
[PF_FILE, 'background_img', "Background Img", "".'/usr/local/share/gimp/1.1'."/scripts/texture1.jpg"],
[PF_FILE, 'environment_map', "Environment Map", "".'/usr/local/share/gimp/1.1'."/scripts/beavis.jpg"],
],
\&script_fu_crystal_logo;
sub script_fu_i26_gunya2 {
my ($text, $text_color, $frame_color, $font, $font_size, $frame_size) = @_;
do {
my $img = gimp_image_new (256, 256, RGB_IMAGE);
my $border = $font_size / 10;
my $text_layer = gimp_text_fontname ($img, -1, 0, 0, $text, $border * 2, 1, $font_size, PIXELS, $font);
my $width = gimp_drawable_width ($text_layer);
my $height = gimp_drawable_height ($text_layer);
my $dist_text_layer = gimp_layer_new ($img, $width, $height, RGBA_IMAGE, "Distorted text", 100, NORMAL_MODE);
my $dist_frame_layer = gimp_layer_new ($img, $width, $height, RGBA_IMAGE, "Distorted text", 100, NORMAL_MODE);
my $distortion_img = gimp_image_new ($width, $height, GRAY);
my $distortion_layer = gimp_layer_new ($distortion_img, $width, $height, GRAY_IMAGE, "temp", 100, NORMAL_MODE);
my $radius = $font_size / 10;
my $prob = 0.5;
my $old_fg = gimp_palette_get_foreground ();
my $old_bg = gimp_palette_get_background ();
my $old_brush = gimp_brushes_get_brush ();
my $old_paint_mode = gimp_brushes_get_paint_mode ();
gimp_image_undo_disable ($img);
gimp_image_undo_disable ($distortion_img);
gimp_image_resize ($img, $width, $height, 0, 0);
gimp_image_add_layer ($img, $dist_text_layer, -1);
gimp_image_add_layer ($img, $dist_frame_layer, -1);
gimp_image_add_layer ($distortion_img, $distortion_layer, -1);
gimp_selection_none ($img);
gimp_edit_clear ($dist_text_layer);
gimp_edit_clear ($dist_frame_layer);
gimp_selection_layer_alpha ($text_layer);
gimp_palette_set_background ($text_color);
gimp_edit_fill ($dist_text_layer, BG_IMAGE_FILL);
gimp_selection_border ($img, $frame_size);
gimp_palette_set_background ($frame_color);
gimp_edit_fill ($dist_frame_layer, BG_IMAGE_FILL);
gimp_selection_none ($img);
gimp_palette_set_background ([255, 255, 255]);
gimp_edit_fill ($distortion_layer, BG_IMAGE_FILL);
plug_in_noisify ($distortion_img, $distortion_layer, 0, $prob, $prob, $prob, 0.0);
plug_in_gauss_rle ($distortion_img, $distortion_layer, $radius, 1, 1);
plug_in_c_astretch ($distortion_img, $distortion_layer);
plug_in_gauss_rle ($distortion_img, $distortion_layer, $radius, 1, 1);
plug_in_displace ($img, $dist_text_layer, $radius, $radius, 1, 1, $distortion_layer, $distortion_layer, 0);
gimp_edit_fill ($distortion_layer, BG_IMAGE_FILL);
plug_in_noisify ($distortion_img, $distortion_layer, 0, $prob, $prob, $prob, 0.0);
plug_in_gauss_rle ($distortion_img, $distortion_layer, $radius, 1, 1);
plug_in_c_astretch ($distortion_img, $distortion_layer);
plug_in_gauss_rle ($distortion_img, $distortion_layer, $radius, 1, 1);
plug_in_displace ($img, $dist_frame_layer, $radius, $radius, 1, 1, $distortion_layer, $distortion_layer, 0);
gimp_selection_all ($img);
gimp_palette_set_background ([255, 255, 255]);
gimp_edit_fill ($text_layer, BG_IMAGE_FILL);
gimp_palette_set_foreground ($old_fg);
gimp_palette_set_background ($old_bg);
gimp_brushes_set_brush ($old_brush);
gimp_brushes_set_paint_mode ($old_paint_mode);
gimp_image_set_active_layer ($img, $dist_text_layer);
gimp_image_undo_enable ($img);
gimp_image_delete ($distortion_img);
gimp_display_new ($img);
};
}
register "perl_fu_i26_gunya2",
"Two-colored text by hand",
"Two-colored text by hand",
"Shuji Narazaki",
"Shuji Narazaki",
"1997",
N_"<Image>/Filters/Logulator/Imigre-26",
"",
[
[PF_STRING, 'text_string', "Text", "The GIMP"],
[PF_COLOUR, 'text_color', "Text Color", [255, 0, 0]],
[PF_COLOUR, 'frame_color', "Frame Color", [0, 34, 255]],
[PF_FONT, 'font', "Font"],
[PF_ADJUSTMENT,'font_size_pixels', "Font Size (pixels)", [100, 2, 1000, 1, 10, 0, 1]],
[PF_VALUE, 'frame_size', "Frame Size", "2"],
],
\&script_fu_i26_gunya2;
sub script_fu_newsprint_text {
my ($string, $font, $font_size, $cell_size, $density) = @_;
do {
my $text_ext = [gimp_text_get_extents_fontname ($string, $font_size, PIXELS, $font)];
my $wid = (@{$text_ext}[0] + 20);
my $hi = (nth (1, $text_ext) + 20);
my $img = gimp_image_new ($wid, $hi, RGB_IMAGE);
my $bg_layer = gimp_layer_new ($img, $wid, $hi, RGB_IMAGE, "Background", 100, NORMAL_MODE);
my $text_layer = gimp_layer_new ($img, $wid, $hi, RGBA_IMAGE, "Text layer", 100, NORMAL_MODE);
my $text_mask = 0;
my $grey = $density * 255 / 100;
my $old_bg = gimp_palette_get_background ();
gimp_image_undo_disable ($img);
gimp_image_add_layer ($img, $bg_layer, 1);
gimp_image_add_layer ($img, $text_layer, -1);
gimp_edit_clear ($bg_layer);
gimp_edit_clear ($text_layer);
gimp_floating_sel_anchor (gimp_text_fontname ($img, $text_layer, 10, 10, $string, 0, 1, $font_size, PIXELS, $font));
$text_mask = gimp_layer_create_mask ($text_layer, ALPHA_MASK);
gimp_image_add_layer_mask ($img, $text_layer, $text_mask);
gimp_selection_layer_alpha ($text_layer);
gimp_palette_set_background ([$grey, $grey, $grey]);
gimp_edit_fill ($text_mask, BG_IMAGE_FILL);
plug_in_newsprint ($img, $text_mask, $cell_size, 0, 0, 45.0, 3, 45.0, 0, 45.0, 0, 45.0, 0, 3);
gimp_image_remove_layer_mask ($img, $text_layer, APPLY);
gimp_palette_set_background ($old_bg);
gimp_image_undo_enable ($img);
gimp_display_new ($img);
};
}
register "perl_fu_newsprint_text",
"apply a screen to text",
"apply a screen to text",
"Austin Donnelly",
"Austin Donnelly",
"1998",
N_"<Image>/Filters/Logulator/Newsprint text",
"",
[
[PF_STRING, 'text_string', "Text String", "Newsprint"],
[PF_FONT, 'font', "Font", "-*-Helvetica-*-r-*-*-24-*-*-*-p-*-*-*"],
[PF_ADJUSTMENT,'font_size_pixels', "Font Size (pixels)", [100, 2, 1000, 1, 10, 0, 1]],
[PF_VALUE, 'cell_size_in_pixels',"Cell size (in pixels)", "7"],
[PF_ADJUSTMENT,'density', "Density (%)", [60, 0, 100, 1, 10, 0, 0]],
],
\&script_fu_newsprint_text;
sub set_pt {
my ($a, $index, $x, $y) = @_;
do {
$a->[$index * 2] = $x;
$a->[($index * 2 + 1)] = $y;
};
}
sub spline1 {
do {
my $a = (18,"byte",[]);
set_pt ($a, 0, 0, 0);
set_pt ($a, 1, 31, 235);
set_pt ($a, 2, 63, 23);
set_pt ($a, 3, 95, 230);
set_pt ($a, 4, 127, 25);
set_pt ($a, 5, 159, 210);
set_pt ($a, 6, 191, 20);
set_pt ($a, 7, 223, 240);
set_pt ($a, 8, 255, 31);
$a;
};
}
sub brush {
my ($brush_size) = @_;
$brush_size <= 5 ? "Circle Fuzzy (05)"
: $brush_size <= 7 ? "Circle Fuzzy (07)"
: $brush_size <= 9 ? "Circle Fuzzy (09)"
: $brush_size <= 11 ? "Circle Fuzzy (11)"
: $brush_size <= 13 ? "Circle Fuzzy (13)"
: $brush_size <= 15 ? "Circle Fuzzy (15)"
: $brush_size <= 17 ? "Circle Fuzzy (17)"
: "Circle Fuzzy (19)";
}
sub shadows {
my ($val) = @_;
0.96 * $val / 2.55;
}
sub midtones {
my ($val) = @_;
$val / 2.55;
}
sub highlights {
my ($val) = @_;
do {
my $h = 1.108 * $val / 2.55;
if ($h > 100) {
100;
} else {
$h;
}
};
}
sub rval {
my ($col) = @_;
@{$col}[0];
}
sub gval {
my ($col) = @_;
@{$col}[1];
}
sub bval {
my ($col) = @_;
@{$col}[2];
}
sub sota_scale {
my ($val, $scale, $chrome_factor) = @_;
sqrt ($val) * $scale * $chrome_factor;
}
sub copy_layer_sota {
my ($dest_image, $dest_drawable, $source_image, $source_drawable) = @_;
gimp_selection_all ($dest_image);
gimp_edit_clear ($dest_drawable);
gimp_selection_none ($dest_image);
gimp_selection_all ($source_image);
gimp_edit_copy ($source_drawable);
do {
my $floating_sel = gimp_edit_paste ($dest_drawable, 0);
gimp_floating_sel_anchor ($floating_sel);
};
}
sub script_fu_sota_chrome_logo {
my ($chrome_saturation, $chrome_lightness, $chrome_factor, $text, $size, $fontname, $env_map, $hc, $cc) = @_;
do {
my $img = gimp_image_new (256, 256, GRAY);
my $banding_img = gimp_file_load ($env_map, $env_map);
my $banding_layer = gimp_image_active_drawable ($banding_img);
my $banding_height = gimp_drawable_height ($banding_layer);
my $banding_width = gimp_drawable_width ($banding_layer);
my $banding_type = gimp_drawable_type ($banding_layer);
my $b_size = sota_scale ($size, 2, $chrome_factor);
my $offx1 = sota_scale ($size, 0.33, $chrome_factor);
my $offy1 = sota_scale ($size, 0.25, $chrome_factor);
my $offx2 = sota_scale ($size, -(0.33), $chrome_factor);
my $offy2 = sota_scale ($size, -(0.25), $chrome_factor);
my $feather = sota_scale ($size, 0.5, $chrome_factor);
my $brush_size = sota_scale ($size, 0.5, $chrome_factor);
my $text_layer = gimp_text_fontname ($img, -1, 0, 0, $text, $b_size * 2, 1, $size, PIXELS, $fontname);
my $width = gimp_drawable_width ($text_layer);
my $height = gimp_drawable_height ($text_layer);
my $layer1 = gimp_layer_new ($img, $banding_width, $banding_height, $banding_type, "Layer1", 100, NORMAL_MODE);
my $layer2 = gimp_layer_new ($img, $width, $height, GRAYA_IMAGE, "Layer 2", 100, DIFFERENCE_MODE);
my $layer3 = gimp_layer_new ($img, $width, $height, GRAYA_IMAGE, "Layer 3", 100, NORMAL_MODE);
my $shadow = gimp_layer_new ($img, $width, $height, GRAYA_IMAGE, "Drop Shadow", 100, NORMAL_MODE);
my $layer_mask = 0;
my $old_fg = gimp_palette_get_foreground ();
my $old_bg = gimp_palette_get_background ();
my $old_brush = gimp_brushes_get_brush ();
my $old_pattern = gimp_patterns_get_pattern ();
gimp_image_undo_disable ($img);
gimp_image_resize ($img, $width, $height, 0, 0);
gimp_image_add_layer ($img, $shadow, 0);
gimp_image_add_layer ($img, $layer3, 0);
gimp_image_add_layer ($img, $layer2, 0);
gimp_palette_set_background ([255, 255, 255]);
gimp_selection_none ($img);
gimp_edit_fill ($layer2, BG_IMAGE_FILL);
gimp_edit_fill ($layer3, BG_IMAGE_FILL);
gimp_edit_clear ($shadow);
gimp_layer_set_visible ($text_layer, 0);
gimp_layer_set_visible ($shadow, 0);
gimp_rect_select ($img, $b_size / 2, $b_size / 2, ($width - $b_size), ($height - $b_size), REPLACE, 0, 0);
gimp_rect_select ($img, $b_size, $b_size, ($width - $b_size * 2), ($height - $b_size * 2), SUB, 0, 0);
gimp_edit_fill ($text_layer, BG_IMAGE_FILL);
gimp_selection_layer_alpha ($text_layer);
gimp_palette_set_background ([0, 0, 0]);
gimp_selection_translate ($img, $offx1, $offy1);
gimp_selection_feather ($img, $feather);
gimp_edit_fill ($layer2, BG_IMAGE_FILL);
gimp_selection_translate ($img, 2 * $offx2, 2 * $offy2);
gimp_edit_fill ($layer3, BG_IMAGE_FILL);
gimp_selection_none ($img);
gimp_layer_set_visible ($layer2, 1);
gimp_layer_set_visible ($layer3, 1);
$layer2 = gimp_image_merge_visible_layers ($img, CLIP_TO_IMAGE);
gimp_invert ($layer2);
copy_layer_sota ($img, $layer1, $banding_img, $banding_layer);
gimp_image_delete ($banding_img);
gimp_image_add_layer ($img, $layer1, 0);
gimp_layer_scale ($layer1, $width, $height, 0);
plug_in_gauss_iir ($img, $layer1, 10, 1, 1);
gimp_layer_set_opacity ($layer1, 50);
gimp_layer_set_visible ($layer1, 1);
gimp_layer_set_visible ($layer2, 1);
$layer1 = gimp_image_merge_visible_layers ($img, CLIP_TO_IMAGE);
gimp_curves_spline ($layer1, 0, 18, spline1 ());
$layer_mask = gimp_layer_create_mask ($layer1, BLACK_MASK);
gimp_image_add_layer_mask ($img, $layer1, $layer_mask);
gimp_selection_layer_alpha ($text_layer);
gimp_palette_set_background ([255, 255, 255]);
gimp_edit_fill ($layer_mask, BG_IMAGE_FILL);
$layer2 = gimp_layer_copy ($layer1, 1);
gimp_image_add_layer ($img, $layer2, 0);
gimp_brushes_set_brush (brush ($brush_size));
gimp_palette_set_foreground ([255, 255, 255]);
gimp_edit_stroke ($layer_mask);
gimp_palette_set_background ([0, 0, 0]);
gimp_selection_feather ($img, $feather * 1.5);
gimp_selection_translate ($img, 2.5 * $offx1, 2.5 * $offy1);
gimp_edit_fill ($shadow, BG_IMAGE_FILL);
gimp_selection_all ($img);
gimp_patterns_set_pattern ("Marble #1");
gimp_bucket_fill ($text_layer, PATTERN_BUCKET_FILL, NORMAL_MODE, 100, 0, 0, 0, 0);
gimp_selection_none ($img);
gimp_convert_rgb ($img);
gimp_color_balance ($layer1, 0, 1, shadows (rval ($hc)), shadows (gval ($hc)), shadows (bval ($hc)));
gimp_color_balance ($layer1, 1, 1, midtones (rval ($hc)), midtones (gval ($hc)), midtones (bval ($hc)));
gimp_color_balance ($layer1, 2, 1, highlights (rval ($hc)), highlights (gval ($hc)), highlights (bval ($hc)));
gimp_color_balance ($layer2, 0, 1, shadows (rval ($cc)), shadows (gval ($cc)), shadows (bval ($cc)));
gimp_color_balance ($layer2, 1, 1, midtones (rval ($cc)), midtones (gval ($cc)), midtones (bval ($cc)));
gimp_color_balance ($layer2, 2, 1, highlights (rval ($cc)), highlights (gval ($cc)), highlights (bval ($cc)));
gimp_hue_saturation ($layer2, 0, 0, $chrome_lightness, $chrome_saturation);
gimp_layer_set_visible ($shadow, 1);
gimp_layer_set_visible ($text_layer, 1);
gimp_layer_set_name ($text_layer, "Background");
gimp_layer_set_name ($layer2, "Chrome");
gimp_layer_set_name ($layer1, "Highlight");
gimp_layer_translate ($shadow, $b_size / -4, $b_size / -4);
gimp_layer_translate ($layer2, $b_size / -4, $b_size / -4);
gimp_layer_translate ($layer1, $b_size / -4, $b_size / -4);
gimp_palette_set_foreground ($old_fg);
gimp_palette_set_background ($old_bg);
gimp_brushes_set_brush ($old_brush);
gimp_patterns_set_pattern ($old_pattern);
gimp_image_undo_enable ($img);
gimp_display_new ($img);
};
}
register "perl_fu_sota_chrome_logo",
"State of the art chromed logos.",
"State of the art chromed logos.",
"Spencer Kimball",
"Spencer Kimball",
"1997",
N_"<Image>/Filters/Logulator/SOTA Chrome",
"",
[
[PF_ADJUSTMENT,'chrome_saturation',"Chrome Saturation", [-80, -100, 100, 1, 10, 0, 0]],
[PF_ADJUSTMENT,'chrome_lightness', "Chrome Lightness", [-47, -100, 100, 1, 10, 0, 0]],
[PF_ADJUSTMENT,'chrome_factor', "Chrome Factor", [.75, 0, 1, .1, .01, 0, 0]],
[PF_STRING, 'text_string', "Text String", "The GIMP"],
[PF_ADJUSTMENT,'font_size_pixels', "Font Size (pixels)", [150, 2, 1000, 1, 10, 0, 1]],
[PF_FONT, 'font', "Font", "-*-RoostHeavy-*-r-*-*-24-*-*-*-p-*-*-*"],
[PF_FILE, 'environment_map', "Environment Map", "".'/usr/local/share/gimp/1.1'."/scripts/beavis.jpg"],
[PF_COLOUR, 'highlight_balance',"Highlight Balance", [211, 95, 0]],
[PF_COLOUR, 'chrome_balance', "Chrome Balance", [0, 0, 0]],
],
\&script_fu_sota_chrome_logo;
sub script_fu_speed_text {
my ($string, $font, $font_size, $density) = @_;
do {
my $text_ext = [gimp_text_get_extents_fontname ($string, $font_size, PIXELS, $font)];
my $wid = (@{$text_ext}[0] + 20);
my $hi = (nth (1, $text_ext) + 20);
my $img = gimp_image_new ($wid, $hi, RGB_IMAGE);
my $bg_layer = gimp_layer_new ($img, $wid, $hi, RGB_IMAGE, "Background", 100, NORMAL_MODE);
my $text_layer = gimp_layer_new ($img, $wid, $hi, RGBA_IMAGE, "Text layer", 100, NORMAL_MODE);
my $text_mask = 0;
my $saved_select = 0;
my $cell_size = $font_size / 8;
my $grey = $density * 255 / 100;
my $old_fg = gimp_palette_get_foreground ();
my $old_bg = gimp_palette_get_background ();
gimp_image_undo_disable ($img);
gimp_image_add_layer ($img, $bg_layer, 1);
gimp_image_add_layer ($img, $text_layer, -1);
gimp_edit_clear ($bg_layer);
gimp_edit_clear ($text_layer);
gimp_floating_sel_anchor (gimp_text_fontname ($img, $text_layer, 10, 10, $string, 0, 1, $font_size, PIXELS, $font));
gimp_selection_layer_alpha ($text_layer);
$saved_sel = gimp_selection_save ($img);
$text_mask = gimp_layer_create_mask ($text_layer, ALPHA_MASK);
gimp_image_add_layer_mask ($img, $text_layer, $text_mask);
gimp_layer_set_edit_mask ($text_layer, 0);
gimp_selection_grow ($img, 10);
gimp_palette_set_background ($old_fg);
gimp_edit_fill ($text_layer, BG_IMAGE_FILL);
gimp_layer_set_edit_mask ($text_layer, 1);
gimp_selection_load ($saved_sel);
gimp_selection_feather ($img, 10);
gimp_palette_set_background ([$grey, $grey, $grey]);
gimp_edit_fill ($text_mask, BG_IMAGE_FILL);
gimp_edit_fill ($text_mask, BG_IMAGE_FILL);
gimp_edit_fill ($text_mask, BG_IMAGE_FILL);
gimp_selection_clear ($img);
plug_in_newsprint ($img, $text_mask, $cell_size, 0, 0, 0.0, 1, 45.0, 0, 45.0, 0, 45.0, 0, 5);
gimp_image_remove_layer_mask ($img, $text_layer, APPLY);
gimp_palette_set_foreground ($old_fg);
gimp_palette_set_background ($old_bg);
gimp_image_undo_enable ($img);
gimp_display_new ($img);
};
}
register "perl_fu_speed_text",
"give text a speedy effect",
"give text a speedy effect",
"Austin Donnelly",
"Austin Donnelly",
"1998",
N_"<Image>/Filters/Logulator/Speed text",
"",
[
[PF_STRING, 'text_string', "Text String", "Speed!"],
[PF_FONT, 'font', "Font", "-*-Charter-*-r-*-*-24-*-*-*-p-*-*-*"],
[PF_ADJUSTMENT,'font_size_pixels', "Font Size (pixels)", [100, 2, 1000, 1, 10, 0, 1]],
[PF_ADJUSTMENT,'density', "Density (%)", [80, 0, 100, 1, 10, 0, 0]],
],
\&script_fu_speed_text;
sub script_fu_title_header {
my ($text, $size, $fontname) = @_;
do {
my $padding = 8;
my $fade_width = 64;
my $old_fg_color = gimp_palette_get_foreground ();
my $old_bg_color = gimp_palette_get_background ();
my $img = gimp_image_new (256, 256, RGB_IMAGE);
my $text_layer = gimp_text_fontname ($img, -1, 0, 0, $text, $padding, 1, $size, PIXELS, $fontname);
my $text_width = gimp_drawable_width ($text_layer);
my $text_height = gimp_drawable_height ($text_layer);
my $text_layers_offset = $text_height / 2;
my $img_width = ($text_layers_offset + $text_width + $fade_width);
my $img_height = $text_height;
my $bg_layer = gimp_layer_new ($img, $img_width, $img_height, RGBA_IMAGE, "bg-layer", 100, NORMAL_MODE);
my $bumpmap_layer = gimp_layer_new ($img, $text_width, $text_height, RGBA_IMAGE, "bumpmap-layer", 100, NORMAL_MODE);
my $fore_layer = gimp_layer_new ($img, $text_width, $text_height, RGBA_IMAGE, "fore-layer", 100, NORMAL_MODE);
gimp_image_undo_disable ($img);
gimp_image_resize ($img, $img_width, $img_height, 0, 0);
gimp_image_add_layer ($img, $bg_layer, -1);
gimp_image_add_layer ($img, $bumpmap_layer, -1);
gimp_image_add_layer ($img, $fore_layer, -1);
gimp_image_raise_layer ($img, $text_layer);
gimp_image_raise_layer ($img, $text_layer);
gimp_image_raise_layer ($img, $text_layer);
gimp_layer_set_offsets ($bg_layer, 0, 0);
gimp_layer_set_offsets ($text_layer, $text_layers_offset, 0);
gimp_layer_set_offsets ($bumpmap_layer, $text_layers_offset, 0);
gimp_layer_set_offsets ($fore_layer, $text_layers_offset, 0);
gimp_palette_set_background ([0, 0, 0]);
gimp_edit_fill ($bumpmap_layer, BG_IMAGE_FILL);
gimp_selection_layer_alpha ($text_layer);
gimp_palette_set_background ([255, 255, 255]);
gimp_edit_fill ($bumpmap_layer, BG_IMAGE_FILL);
gimp_selection_none ($img);
plug_in_gauss_rle ($img, $bumpmap_layer, 4.0, 1, 1);
gimp_palette_set_background ([255, 255, 255]);
gimp_edit_fill ($fore_layer, BG_IMAGE_FILL);
plug_in_bump_map ($img, $fore_layer, $bumpmap_layer, 135.0, 45.0, 4, 0, 0, 0, 0, 0, 0, 0);
gimp_layer_set_visible ($text_layer, 1);
gimp_layer_set_preserve_trans ($text_layer, 1);
gimp_blend ($text_layer, CUSTOM, NORMAL_MODE, LINEAR, 100, 0, REPEAT_NONE, 0, 0.2, 3, $padding, $padding, ($text_width - $padding - 1), ($text_height - $padding - 1));
gimp_palette_set_background ([0, 0, 0]);
gimp_edit_fill ($bg_layer, BG_IMAGE_FILL);
gimp_ellipse_select ($img, 0, 0, $text_height, $text_height, REPLACE, 1, 0, 0);
gimp_palette_set_background (gimp_color_picker ($text_layer, $text_layers_offset, 0, 1, 0, 6));
gimp_edit_fill ($bg_layer, BG_IMAGE_FILL);
gimp_rect_select ($img, ($img_width - $fade_width), 0, $fade_width, $text_height, REPLACE, 0, 0);
gimp_palette_set_foreground (gimp_palette_get_background ());
gimp_palette_set_background ([0, 0, 0]);
gimp_blend ($bg_layer, FG_BG_RGB, NORMAL_MODE, LINEAR, 100, 0, REPEAT_NONE, 0, 0.2, 3, ($img_width - $fade_width), 0, ($img_width - 1), 0);
gimp_selection_none ($img);
gimp_palette_set_foreground ($old_fg_color);
gimp_palette_set_background ($old_bg_color);
gimp_image_undo_enable ($img);
gimp_display_new ($img);
};
}
register "perl_fu_title_header",
"Web title header",
"Web title header",
"Federico Mena Quintero",
"Federico Mena Quintero",
"June 1997",
N_"<Image>/Filters/Logulator/Web title header",
"",
[
[PF_STRING, 'text_string', "Text", "Hello world!"],
[PF_ADJUSTMENT,'font_size_pixels', "Text size", [32, 2, 256, 1, 10, 0, 0]],
[PF_FONT, 'font', "Font", "-adobe-helvetica-bold-r-normal-*-30-*-*-*-p-*-*-*"],
],
\&script_fu_title_header;
exit main;