01-18-2022, 10:54 AM
Hello everyone!
Plugin: glossy_stroke_3d.py; (I don't remember where I got it)
Author Eric Leroy;
Date: 2010;
Problem:
The plugin only works once for every Gimp restart.
After a single use, the plugin stops responding. Requiring the Gimp to be restarted so that in just one more instance the plugin will run again.
The plugin can be found in <Image>/Filters/Light and Shadow
Would it be possible to detect the cause of this problem and somehow fix it?
Thanks for listening!
Plugin: glossy_stroke_3d.py; (I don't remember where I got it)
Author Eric Leroy;
Date: 2010;
Problem:
The plugin only works once for every Gimp restart.
After a single use, the plugin stops responding. Requiring the Gimp to be restarted so that in just one more instance the plugin will run again.
The plugin can be found in <Image>/Filters/Light and Shadow
Would it be possible to detect the cause of this problem and somehow fix it?
PHP Code:
#! /usr/bin/env python
###############################################################################
# The GIMP -- GNU image manipulation program
# Copyright (c) 1995-2010
# Spencer Kimball, Peter Mattis and the GIMP Development Team
#
# glossystroke3d
# Version 1.2.0 (For the GIMP 2.6), 15 Dec 2010
# Stroke the current selection, create a 3D effect and a dropped shadow
# Adapted from the tutorial: "iText tutorial" of Craig Marshall & Phil Harper.
# Published in http://gug.criticalhit.dk/tutorials/itext2/
#
# Copyright (c) 2010 Eric Leroy (eral) kelk1@hotmail.com
# -----------------------------------------------------------------------------
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#
###############################################################################
from gimpfu import *
def python_glossy_stroke_3d(
img, layer, fg_color, brush, stroke, rounding, ls_color, ls_z, glow,
bright, shine, polish, sh_color, ds_x, ds_y, ds_blur, ds_opac) :
pdb.gimp_undo_push_group_start(img)
# save some values
cur_color = pdb.gimp_context_get_foreground()
cur_brush = pdb.gimp_context_get_brush()
img_w = pdb.gimp_image_width(img)
img_h = pdb.gimp_image_height(img)
cur_sel = pdb.gimp_selection_save(img)
# stroke the selection
stroke_layer = pdb.gimp_layer_new(
img, # IMAGE
img_w, # WIDTH
img_h, # HEIGHT
RGBA_IMAGE, # RGBA TYPE
"stroke_layer", # NAME
100, # OPACITY
NORMAL_MODE # NORMAL MODE
)
pdb.gimp_image_add_layer(img, stroke_layer, -1)
pdb.gimp_image_set_active_layer(img, stroke_layer)
pdb.gimp_context_set_foreground(fg_color)
pdb.gimp_context_set_brush(brush)
if stroke == 0:
pdb.gimp_edit_stroke(stroke_layer)
else:
pdb.gimp_edit_bucket_fill(
stroke_layer, # DRAWABLE
FG_BUCKET_FILL, # FILL W/ FG
NORMAL_MODE, # NORMAL PAINT MODE
100.0, # 100% opacity
0, # TRESHOLD
False, # DO NOT USE THE COMPOSITE IMG
0, # NOT USED
0 # NOT USED
)
# save selected stroke to channel
pdb.gimp_selection_layer_alpha(stroke_layer)
sel_chan = pdb.gimp_selection_save(img)
# create volume
pdb.gimp_selection_shrink(img, rounding)
volume_layer = pdb.gimp_layer_new(
img, # IMAGE
img_w, # WIDTH
img_h, # HEIGHT
RGBA_IMAGE, # RGBA TYPE
"volume_layer", # NAME
100, # OPACITY
NORMAL_MODE # NORMAL MODE
)
pdb.gimp_image_add_layer(img, volume_layer, -1)
pdb.gimp_image_set_active_layer(img, volume_layer)
pdb.gimp_context_set_foreground((255, 255, 255))
pdb.gimp_edit_bucket_fill(
volume_layer, # DRAWABLE
FG_BUCKET_FILL, # FILL W/ FG
NORMAL_MODE, # NORMAL PAINT MODE
100.0, # 100% opacity
0, # TRESHOLD
False, # DO NOT USE THE COMPOSITE IMG
0, # NOT USED
0 # NOT USED
)
pdb.gimp_selection_none(img)
pdb.plug_in_gauss(
img, # IMAGE
volume_layer, # DRAWABLE
rounding * 2.0, # HORIZONTAL BLURRING RADIUS
rounding * 2.0, # VERTICAL BLURRING RADIUS
0 # IIR (0) OR RLE (1)
)
pdb.gimp_layer_set_mode(volume_layer, OVERLAY_MODE)
volume_layer_copy = pdb.gimp_layer_copy(volume_layer, True)
pdb.gimp_image_add_layer(img, volume_layer_copy, -1)
# create lighting effect
pdb.gimp_image_set_active_channel(img, sel_chan)
pdb.plug_in_gauss(img, sel_chan, rounding * 2.0, rounding * 2.0, 0)
glossy_layer = pdb.gimp_layer_new(
img, # IMAGE
img_w, # WIDTH
img_h, # HEIGHT
RGBA_IMAGE, # RGBA TYPE
"glossy_layer", # NAME
100, # OPACITY
SCREEN_MODE # SCREEN
)
pdb.gimp_image_add_layer(img, glossy_layer, -1)
pdb.gimp_image_set_active_layer(img, glossy_layer)
pdb.gimp_selection_load(sel_chan)
pdb.gimp_context_set_foreground((0, 0, 0))
pdb.gimp_edit_bucket_fill(
glossy_layer, # DRAWABLE
FG_BUCKET_FILL, # FILL W/ FG
NORMAL_MODE, # NORMAL PAINT MODE
100.0, # 100% opacity
0, # TRESHOLD
False, # DO NOT USE THE COMPOSITE IMG
0, # NOT USED
0 # NOT USED
)
pdb.gimp_selection_none(img)
if ds_x > ds_y:
if ds_y == 0:
ls_x = -ds_x
ls_y = 0
else:
ls_x = -ds_x / abs(ds_y)
ls_y = -ds_y / abs(ds_y)
else:
if ds_x == 0:
ls_x = 0
ls_y = -ds_y
else:
ls_x = -ds_x / abs(ds_x)
ls_y = -ds_y / abs(ds_x)
pdb.plug_in_lighting(
img, # IMAGE
glossy_layer, # DRAWABLE
sel_chan, # BUMP MAP
None, # ENVIRONMENT MAP
True, # ENABLE BUMPMAPPING
False, # DISABLE ENVMAPPING
0, # LINEAR BUMPMAP
1, # DIRECTIONAL LIGHT SOURCE
ls_color, # WHITE LIGHT SOURCE
ls_x, # LIGHT POSITION X
ls_y, # LIGHT POSITION Y
ls_z, # LIGHT POSITION Z
ls_x, # LIGHT DIRECTION X
ls_y, # LIGHT DIRECTION Y
ls_z, # LIGHT DIRECTION Z
glow, # AMBIANT INTENSITY (GLOWING)
bright, # DIFFUSE INTENSITY (BRIGHT)
bright, # DIFFUSE REFLECTIVITY
shine, # SPECULAR REFLECTIVITY (SHINY)
polish, # HIGHLIGHT (POLISHED)
True, # ANTIALIASING
False, # SAME IMAGE
False # TRANSPARENT BACKGROUND
)
# drop shadow
pdb.gimp_image_set_active_layer(img, stroke_layer)
act_lay = pdb.gimp_image_get_active_layer(img)
pdb.gimp_selection_layer_alpha(act_lay)
pdb.script_fu_drop_shadow(
img, # IMAGE
act_lay, # MASK LAYER
ds_x, # X OFFSET
ds_y, # Y OFFSET
ds_blur, # BLUR RADIUS
sh_color, # SHADOW COLOR
ds_opac, # SHADOW LAYER OPACITY
True # ALLOW RESIZING
)
# restore initial state
pdb.gimp_image_resize(
img, # IMAGE
img_w, # WIDTH
img_h, # HEIGHT
0, # X OFFSET
0 # Y OFFSET
)
pdb.gimp_selection_load(cur_sel)
pdb.gimp_image_remove_channel(img, cur_sel)
pdb.gimp_image_remove_channel(img, sel_chan)
pdb.gimp_image_set_active_layer(img, layer)
pdb.gimp_context_set_foreground(cur_color)
pdb.gimp_context_set_brush(cur_brush)
pdb.gimp_undo_push_group_end(img)
return
register(
"python_fu_glossy_stroke_3d",
"Stroke with a glossy 3-D effect and a dropped shadow",
"Stroke with a glossy 3-D effect and a dropped shadow",
"Eric Leroy",
"Eric Leroy",
"2010",
"GlossyStroke 3D",
"*",
[
(PF_IMAGE, "image", "Input image", None),
(PF_DRAWABLE, "drawable", "Input layer", None),
(PF_COLOR, "fg_color", "Color:", (0, 157, 255)),
(PF_BRUSH, "brush", "Stroking brush:", None),
(PF_OPTION, "stroke", "Selection:", 0, ["Stroke", "Fill"]),
(PF_SPINNER, "rounding", "3D amount:", 2, (0, 50, 1)),
(PF_COLOR, "ls_color", "Light color:", (255, 255, 255)),
(PF_SPINNER, "ls_z", "Light height:", 0.5, (0.0, 20.0, 0.1)),
(PF_SPINNER, "glow", "Glowing:", 5.0, (0.0, 100000, 0.01)),
(PF_SPINNER, "bright", "Brightness:", 1.00, (0.0, 100000, 0.01)),
(PF_SPINNER, "shine", "Shiny:", 5.0, (0.0, 100000, 0.01)),
(PF_SPINNER, "polish", "Polish:", 30.0, (0.0, 100000, 0.01)),
(PF_COLOR, "sh_color", "Shadow color:", (0, 0, 0)),
(PF_SPINNER, "ds_x", "Shadow offset X:", 10, (-50, 50, 1)),
(PF_SPINNER, "ds_y", "Shadow offset Y:", 10, (-50, 50, 1)),
(PF_SPINNER, "ds_blur", "Shadow blur radius:", 15, (0, 50, 1)),
(PF_SLIDER, "ds_opac", "Shadow opacity:", 80, (0, 100, 1))
],
[],
python_glossy_stroke_3d,
menu="<Image>/Filters/Light and Shadow")
main()
.....
Samj Portable - Gimp 2.10.28 - Win-10 /64.
Samj Portable - Gimp 2.10.28 - Win-10 /64.