01-10-2024, 04:17 PM
Hi all,
I've been trying to figure out how to set up a script that will do a drop shadow with the GEGL drop shadow filter. This is something I've wanted to do in the past, but didn't get any traction on it. Since then, I've found what seems like a possible solution, but I'm having issues actually implementing it.
I did this thread with a way to use GEGL with Python-Fu (is there a more current way to do this?), and I also found this set of scripts that transcribe the various GEGL operations into individual Python-Fu scripts (again, is there something more current than this?). I have both scripts in my Plug-Ins folder. If I use the drop shadow script from the "GEGL as Python" toolbar in Gimp, it works great. My question is how to properly code that into a script.
Here's the drop shadow script from MareroQ:
Here's my attempt at implementing that into my own script:
However, this script keeps failing, and I'm not sure why. If I run it from the toolbar, the error console gives an error that says
"GIMP Warning
Plug-in 'Generate Conversation Portrait (HUD) Outline' left image undo in inconsistent state, closing open undo groups."
If I try to run it in the Python-Fu console using this method, it crashes and I get the following error in the error console:
"GIMP Error
Plug-in crashed: "python-console.py"
(C:\Program Files\GIMP 2\lib\gimp\2.0\plug-ins\python-console\python-console.py)
The dying plug-in may have messed up GIMP's internal state. You may want to save your images and restart GIMP to be on the safe side."
Any thoughts on what I could be doing wrong? I'm using GIMP 2.10.36 on Windows 10.
I've been trying to figure out how to set up a script that will do a drop shadow with the GEGL drop shadow filter. This is something I've wanted to do in the past, but didn't get any traction on it. Since then, I've found what seems like a possible solution, but I'm having issues actually implementing it.
I did this thread with a way to use GEGL with Python-Fu (is there a more current way to do this?), and I also found this set of scripts that transcribe the various GEGL operations into individual Python-Fu scripts (again, is there something more current than this?). I have both scripts in my Plug-Ins folder. If I use the drop shadow script from the "GEGL as Python" toolbar in Gimp, it works great. My question is how to properly code that into a script.
Here's the drop shadow script from MareroQ:
Code:
def gegl_dropshadow(image, layer, shadow_offset_x, shadow_offset_y, shadow_blur, grow_shape, grow_radius, color_s, shadow_opacity):
color_to_gegl=rgb_to_hex(color_s)
if grow_shape==0:
grow_s='square'
if grow_shape==1:
grow_s='circle'
if grow_shape==2:
grow_s='diamond'
gegl_graph_string="gegl:dropshadow x=%d y=%d radius=%d grow-shape=%s grow-radius=%d color=%s opacity=%f" % (shadow_offset_x, shadow_offset_y, shadow_blur,grow_s,grow_radius, color_to_gegl, shadow_opacity)
pdb.python_fu_gegl_graph(image, layer, gegl_graph_string)
register(
"python_fu_gegl_dropshadow",
"GEGL to Python. Works on the active layer",
"Creates a dropshadow effect on the input buffer",
"Auto Author",
"Auto Author",
"Auto Generated Dated",
"<Image>/GEGL as Python/gegl-dropshadow...", #Menu path
"*",
[
(PF_SPINNER, "shadow_offset_x", "Shadow Offset X:", 5, (-1000, 1000, 1)),
(PF_SPINNER, "shadow_offset_y", "Shadow Offset Y:", 5, (-1000, 1000, 1)),
(PF_SPINNER, "shadow_blur", "Shadow Blur Radius:", 5, (0, 300, 1)),
(PF_OPTION, "grow_shape", "Grow Shape: ", 0, [" Square "," Circle ", " Diamond "]),
(PF_SPINNER, "grow_radius", "Grow Radius:", 5, (-100, 100, 1)),
(PF_COLOR, "color_s", "Color:", (0, 0, 0)),
(PF_FLOAT, "shadow_opacity", "Shadow Opacity (default:1.5, 0..2):", 1.5) # (0, 2, 0.01)),
],
[],
gegl_dropshadow)
Here's my attempt at implementing that into my own script:
Code:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from gimpfu import*
def generate_hud_outline(image, layer):
pdb.gimp_image_undo_group_start(image)
pdb.gimp_selection_none(image)
pdb.python_fu_gegl_dropshadow(image, layer, 0.00, 0.00, 2.00, "circle", 1, gimpcolor.RGB(0,0,0), 1.25)
pdb.gimp_displays_flush()
pdb.gimp_image_undo_group_end(image)
register(
"python_fu_marvelmods_common_generate_hud_outline",
"Generates an outline for a conversation portrait.",
"Generates an outline for a conversation portrait.",
"BaconWizard17",
"BaconWizard17",
"January 2024",
"Generate Conversation Portrait (HUD) Outline",
"*",
[
(PF_IMAGE, "image", "Input image", None),
(PF_DRAWABLE, 'drawable', 'Layer, mask or channel', None)
],
[],
generate_hud_outline,
menu='<Image>/Marvel Mods/Utilities'
)
main()
However, this script keeps failing, and I'm not sure why. If I run it from the toolbar, the error console gives an error that says
"GIMP Warning
Plug-in 'Generate Conversation Portrait (HUD) Outline' left image undo in inconsistent state, closing open undo groups."
If I try to run it in the Python-Fu console using this method, it crashes and I get the following error in the error console:
"GIMP Error
Plug-in crashed: "python-console.py"
(C:\Program Files\GIMP 2\lib\gimp\2.0\plug-ins\python-console\python-console.py)
The dying plug-in may have messed up GIMP's internal state. You may want to save your images and restart GIMP to be on the safe side."
Any thoughts on what I could be doing wrong? I'm using GIMP 2.10.36 on Windows 10.
Modder/Skinner at MarvelMods.com using GIMP to create, edit, and export textures and previews more efficiently.
My GIMP scripts hosted on GitHub
My GIMP scripts hosted on GitHub