Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Layer opacity shortcut
#3
(03-16-2018, 08:20 AM)DaveMac Wrote: Hi all,
I've been using Gimp for years on a fairly basic level. Recently I have been doing a lot of image stitching - there's overlap in the individual images so I just bring them in as layers, reduce the top level opacity, match positions, return it to full opacity and merge down. Not difficult but repetitive.
I make a lot of use of keyboard shortcuts ("Accelerators") and the preset "10% more Transparent" is great but I generally need to press it 3 or 4 times to get a useable level of transparency. 
That got me thinking about Gimp's scripting potential, something I've never looked at before - "set active level to 60% opacity" with a single keypress would be so useful for me.
I'm very familiar with html and Office VBA but my first looks at python-fu have me very confused. If I just want this function do I have to create a plug-in and register it then get it to appear in the list of available commands so I can assign a combination of keys? The python console itself is already pretty confusing.
I think I've got something that could maybe do what I want but I can't figure how to run it to see what happens in order to debug. Then again maybe I'm completely off track...

➤> image = gimp.image_list()[0]
➤> active_layer = pdb.gimp_image_get_active_layer(image)
➤> pdb.gimp_layer_set_opacity(active_layer, 60)

Any help with solving this would be greatly appreciated.

By default, when you define a script where the first two parameters are an image and a layer, the script is called with these parameters set as a the current image and active layer, so you get them without doing anything specific.

You code you look  like this:

Code:
# -*- coding: utf-8 -*-
#!/usr/bin/env python

import os, sys
from gimpfu import *

# The functions that do it, they will be called with image/layer
# set to the image/layer on which you call the script
# Technically, they can also be called with 'layer' being actually a "channel",
# (layers and channels are both "drawable") but you can't set the opacity
# on a channel and the script will croak. Not really a problem here.

def opacity60(image,layer):
    pdb.gimp_layer_set_opacity(layer, 60)

def opacity100(image,layer):
    pdb.gimp_layer_set_opacity(layer, 100)

### Registrations

# Not strictly necessary, but this tells you where the file with the script is
whoiam='\n'+os.path.abspath(sys.argv[0])

# When Gimp starts it calls this script which executes the two calls to the register()
# function which themselves call Gimp and tell it what/how to call in this file.
# As you can see you can have two functions in one single file
register(
    'opacity60',    # identifier of the plugin. When defining keybaird shortcut, look for python-fu-opacity60
    'Set opacity to 60%'+whoiam,    # The help on the menu (tells where the script file is)
    'Set opacity to 60%',           # "Additional information" in the PDB browser
    'Me','Myself','2018',           # Copyright/author info, normally
    '60%',                          # the menu item
    "RGB*, GRAY*",  # Enable only on RGB and grayscale image (wouldn't work on color-indexed)
    # The two parameters to the script, set automatically with current image/layer
    [
        (PF_IMAGE, "image", "Input image", None),
        (PF_DRAWABLE, "drawable", "Input drawable", None)
    ],
    [],
    opacity60,                      # the function above in "def opacity60(image,layer)..."
    menu="<Image>/Layer/Opacity",   # the menu in which you'll hjave the '60%' item above
)

# Barebones version for 100%
register(
    'opacity100','','','','','','100%','RGB*, GRAY*',
    [(PF_IMAGE, "image", "Input image", None),(PF_DRAWABLE, "drawable", "Input drawable", None)],[],
    opacity100,menu="<Image>/Layer/Opacity"
)

main()

As you can see:

  1. there are more comments than code
  2. for such a simple function telling Gimp how to call the code is more complicated than the code itself.
Attached the source python file. If you edit it, keep in mind that Python is very picky about code indentation. And use a programmer's editor.


PS: VBA, really?


Attached Files
.zip   opacity.zip (Size: 1.11 KB / Downloads: 229)
Reply


Messages In This Thread
Layer opacity shortcut - by DaveMac - 03-16-2018, 08:20 AM
RE: Layer opacity shortcut - by Kevin - 03-16-2018, 09:42 AM
RE: Layer opacity shortcut - by Ofnuts - 03-16-2018, 10:07 AM
RE: Layer opacity shortcut - by DaveMac - 03-16-2018, 08:28 PM
RE: Layer opacity shortcut - by Ofnuts - 03-16-2018, 11:51 PM
RE: Layer opacity shortcut - by DaveMac - 03-17-2018, 04:16 PM
RE: Layer opacity shortcut - by Ofnuts - 03-17-2018, 05:56 PM
RE: Layer opacity shortcut - by DaveMac - 04-10-2018, 02:14 PM

Forum Jump: