I am automating a "LAB Enhancement" process.  It is found here:

http://www.dslreports.com/forum/remark,15173919

In short, you decompose to LAB.  You monkey with the A and B channels, then
use curves on L.  Finally, you recompose.

One issue is that you have to copy the resulting A1 and B1 channels, and
then anchor them back into the original A and B channels so that you can
recompose.  Merging down into A or B apparently creates new layers and you
lose the ability to recompose.

The attached script for version 2.6.2 gets to the last step that I am going
to (I'm stopping before applying curves to the L channel because I'll do
that manually depending on the image).  I create the altered A1 and B1
channels.  I paste B1 and anchor it into B.

However, when I paste A1, it is anchoring into B, instead of A.  A is the
top layer, but I can't get the script to anchor into it.  When I anchor
manually, it also anchors into B.  I'm frustrated and mystified in equal
measure.

Another side effect is that running this script wipes out the filters, and I
have to refresh them.  :-(

Can any Script-fu wizards out there tell me what I am doing wrong?

Dave

---- script follows and is attached ----

; LAB Enhance
; David Hathaway <dave77...@gmail.com>
;
; Based on:
;
;    http://www.dslreports.com/forum/remark,15173919
;
; v 0.5 - 21 OCT 2009 (first working version)


(define (LAB-Enhance img
                     drawable)
  (gimp-image-undo-group-start img)

  ; set some system variables
  (let*
       (
          (width (car (gimp-image-width img)))
          (height (car (gimp-image-height img)))
          (blend-layer)
          (b-copy1-layer)
          (b-copy2-layer)
          (a-copy1-layer)
          (a-copy2-layer)
       (layers (gimp-image-get-layers img))
       (B1)
       (B2)
       (B3)
       (editcopy)
       (A1)
       (A2)
       (A3)
       )

  ; copy A channel and add as second layer
  (set! A1 (car (gimp-layer-new-from-drawable (
                      aref (cadr layers) 1)
                      img)))
  (gimp-drawable-set-name A1 "A 1")
  (gimp-image-add-layer img A1 1)

(gimp-image-undo-group-end img)
(gimp-image-undo-group-start img)

  ; copy B channel and set as 4th layer
  (set! B1 (car (gimp-layer-new-from-drawable (
                      aref (cadr layers) 2)
                      img)))

  (gimp-drawable-set-name B1 "B 1")
  (gimp-image-add-layer img B1 3)

(gimp-image-undo-group-end img)
(gimp-image-undo-group-start img)

  ; copy the B channel copy and make overlay, inserting as 4th layer
  (set! B2 (car (gimp-layer-new-from-drawable (
                      aref (cadr layers) 2)
                      img)))

  (gimp-drawable-set-name B2 "B 2")
  (gimp-layer-set-mode B2 OVERLAY-MODE)
  (gimp-image-add-layer img B2 3)


(gimp-image-undo-group-end img)
(gimp-image-undo-group-start img)

  ; merge new B channels
  (set! B3 (gimp-image-merge-down img B2 EXPAND-AS-NECESSARY))

(gimp-image-undo-group-end img)
(gimp-image-undo-group-start img)

  ; copy the A channel copy and make overlay, inserting as 2nd layer
  (set! A2 (car (gimp-layer-new-from-drawable (
                      aref (cadr layers) 1)
                      img)))

  (gimp-drawable-set-name A2 "A 2")
  (gimp-layer-set-mode A2 OVERLAY-MODE)
  (gimp-image-add-layer img A2 1)


(gimp-image-undo-group-end img)
(gimp-image-undo-group-start img)

  ; merge new B channels
  (set! A3 (gimp-image-merge-down img A2 EXPAND-AS-NECESSARY))

(gimp-image-undo-group-end img)
(gimp-image-undo-group-start img)

  ; move B to top
  (gimp-image-raise-layer-to-top img (aref (cadr layers) 2))

(gimp-image-undo-group-end img)
(gimp-image-undo-group-start img)

  ; cut B1, paste into layer, and anchor
  (gimp-image-set-active-layer img (aref (cadr (gimp-image-get-layers img))
4))
  (gimp-selection-all img)
  (gimp-edit-cut (aref (cadr (gimp-image-get-layers img)) 4))
  (gimp-image-set-active-layer img (aref (cadr (gimp-image-get-layers img))
0))
  (gimp-floating-sel-anchor (car (gimp-edit-paste drawable TRUE)))

(gimp-image-undo-group-end img)
(gimp-image-undo-group-start img)

  ; move A to top
  (gimp-image-raise-layer-to-top img (aref (cadr layers) 1))
  (gimp-image-set-active-layer img (aref (cadr layers) 1))

(gimp-image-undo-group-end img)
(gimp-image-undo-group-start img)

  ; cut A1, paste into layer, and anchor
  (gimp-image-set-active-layer img (aref (cadr (gimp-image-get-layers img))
3))
  (gimp-selection-all img)
  (gimp-edit-cut (aref (cadr (gimp-image-get-layers img)) 3))
  (gimp-image-set-active-layer img (aref (cadr (gimp-image-get-layers img))
0))
 (gimp-edit-paste drawable TRUE)
;  (gimp-floating-sel-anchor (car (gimp-edit-paste drawable TRUE)))

  ; move L back to top
;  (gimp-image-raise-layer-to-top img (aref (cadr layers) 0))
;  (gimp-image-set-active-layer img (aref (cadr (gimp-image-get-layers img))
0))


  ) ; let*

  ; Flush the display
  (gimp-image-undo-group-end img)
  (gimp-displays-flush)
)

(script-fu-register "LAB-Enhance"
                    "LAB-Enhance"
                    "Perform LAB Enhancement"
                    "David Hathaway <dave77...@gmail.com>"
                    "(c) David Hathaway"
                    "2009 10 21"
                    "GRAYSCALE*"
                    SF-IMAGE    "Image"         0
                    SF-DRAWABLE "Layer to start on (unused)" 0)
(script-fu-menu-register "LAB-Enhance"
                         "<Image>/Filters/Dave77459")

Attachment: LAB-Enhance.scm
Description: Binary data

_______________________________________________
Gimp-user mailing list
Gimp-user@lists.XCF.Berkeley.EDU
https://lists.XCF.Berkeley.EDU/mailman/listinfo/gimp-user

Reply via email to