Search code examples
scriptinggimpscript-fu

In Gimp script-fu, how can you access QuickMask functionality?


In the Gimp GUI, the QuickMask is very useful for many things, but this functionality doesn't seem to be directly available through script-fu. No obvious equivalents were apparent to me in the procedure browser.

In particular, putting the (value/gray) pixels of a layer into the selection mask is the basic thing I need to do. I tried using gimp-image-get-selection to get the selection channel's id number, then gimp-edit-paste into it, but the following anchor operation caused Gimp to crash.


Solution

  • My other answer contains the "theoretical" way of doing it - however, the O.P. found a bug in GIMP, as of version 2.6.5, as can be seem on the comments to that answer.

    I got a workaround for what the O.P. intends to do: paste the contents of a given image layer to the image selection. As denoted, edit-copy -> edit-paste on the selection drawable triggers a program crash.

    The workaround is to create a new image channel with the desired contents, through the copy and paste method, and then use gimp-selection-load to make the selection equal the channel contents:

    The functions that need to be called are thus (I won't paste scheme code, as I am not proficient in all the parenthesis - I did the tests using the Python console in GIMP):

    >>> img = gimp.image_list()[0]
    >>> ch = pdb.gimp_channel_new(img, img.width, img.height, "bla", 0, (0,0,0))
    >>> ch
    <gimp.Channel 'bla'>
    >>> pdb.gimp_edit_copy(img.layers[0])
    1
    >>> pdb.gimp_image_add_channel(img, ch, 0)
    >>> fl = pdb.gimp_edit_paste(ch, 0)
    >    >> fl
    <gimp.Layer 'Pasted Layer'>
    >>> pdb.gimp_floating_sel_anchor(fl)
    >>> pdb.gimp_selection_load(ch)