[EMAIL PROTECTED] (2003-03-22 at 1850.44 +0100):
> I've just completed a Script-Fu script that some people may find quite
> useful (I've missed this functionality myself several times). The
> purpose is to convert a layer's Alpha channel into a mask for editing
> it and later using Apply Layer Mask to put it back. The idea is
> similar to what QuickMask does with selections.

Maybe you can poke at the attached script, a bit old, for reference
see http://groups.yahoo.com/group/gimpi/message/1479 and other posts
about tribes 2 video game. This one does not lose the selection, IIRC.

;;; The GIMP -- an image manipulation program
;;; Copyright (C) 1995 Spencer Kimball and Peter Mattis
;;; script-fu-alpha-to-mask
;;; Moves the transparency of a layer to the layer mask
;;; Copyright (c) 2001 Guillermo S. Romero
;;; famrom infernal-iceberg.com
;;; ### License  ###
;;; 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
;;; GNU General Public License for more details.
;;; You can get a copy of the GNU General Public License from
;;; http://www.gnu.org/, the site of the Free Software Foundation, Inc.
;;; ### Versions ###
;;; 1.00.00 Initial release (bug in L,C&P thumbnails?)
;;; 1.01.00 Support for existent mask added (merges transp and mask)
;;; ### Inline Documentation ###
;;; # Intro #
;;; Tribes 2, a 3D game, uses RGBA PNGs as skins. The RGB are used for
;;; the colour, and the A for the quantity of environment mapping.
;;; Or at least that is what I have read.
;;; # Requirements #
;;; This plugin was developed with Gimp 1.2.1 CVS
;;; Check all your plugins and scripts in the DB Browser before reporting bugs
;;; It merges the current layer mask, if any, so you keep all info
;;; # Parameters #
;;; None the user can play with
;;; # Debugging and to-do #
;;; Look for ";; @" comments

;; Helper functions from neon-logo.scm
(define (set-pt a index x y)
   (aset a (* index 2) x)
   (aset a (+ (* index 2) 1) y)))

(define (AlphaSpline)
  (let* ((a (cons-array 6 'byte)))
    (set-pt a 0 0 255)
    (set-pt a 1 127 255)
    (set-pt a 2 255 255)

;; The function
(define (script-fu-alpha-to-mask inImg inDrw)

  ;; Start
  (gimp-undo-push-group-start inImg)

  ;; Merge mask if any
  (set! OrigMask (car (gimp-layer-mask inDrw)))
  (if (not (= OrigMask -1))
      (gimp-image-remove-layer-mask inImg inDrw APPLY))

  ;; Create a new mask
  (set! Mask (car (gimp-layer-create-mask inDrw ALPHA-MASK)))
  (gimp-image-add-layer-mask inImg inDrw Mask)

  ;; Unerase
  (gimp-curves-spline inDrw 4 6 (AlphaSpline))

  ;; End
  (gimp-undo-push-group-end inImg)
  ;; @ The image thumbnail does not update nice
  ;; @ Undo then redo and it refreshes to the right state
  ;; @ Or change to another image and back, to force the refresh too
  ;; @ A refresh call is missing in the C code, maybe fixed for Gimp 1.4

;; Register!
(script-fu-register "script-fu-alpha-to-mask"
                    _"<Image>/Script-Fu/Utils/Alpha to layer mask"
                    "Moves the transparency of a layer to the layer mask"
                    "Guillermo S. Romero"
                    "2001 Guillermo S. Romero"
                    "RGBA GRAYA"
                    SF-IMAGE "Image where to work" 0
                    SF-DRAWABLE "Drawable to modify" 0)
Gimp-user mailing list

Reply via email to