GIMP Script-fu

Hex Artifact Content
Login

Artifact a9b0ee99846251f9ccd50188b8ac21cb05cf37ad:


0000: 3b 20 54 68 69 73 20 70 72 6f 67 72 61 6d 20 69  ; This program i
0010: 73 20 66 72 65 65 20 73 6f 66 74 77 61 72 65 3b  s free software;
0020: 20 79 6f 75 20 63 61 6e 20 72 65 64 69 73 74 72   you can redistr
0030: 69 62 75 74 65 20 69 74 20 61 6e 64 2f 6f 72 20  ibute it and/or 
0040: 6d 6f 64 69 66 79 0a 3b 20 69 74 20 75 6e 64 65  modify.; it unde
0050: 72 20 74 68 65 20 74 65 72 6d 73 20 6f 66 20 74  r the terms of t
0060: 68 65 20 47 4e 55 20 47 65 6e 65 72 61 6c 20 50  he GNU General P
0070: 75 62 6c 69 63 20 4c 69 63 65 6e 73 65 20 61 73  ublic License as
0080: 20 70 75 62 6c 69 73 68 65 64 20 62 79 0a 3b 20   published by.; 
0090: 74 68 65 20 46 72 65 65 20 53 6f 66 74 77 61 72  the Free Softwar
00a0: 65 20 46 6f 75 6e 64 61 74 69 6f 6e 3b 20 65 69  e Foundation; ei
00b0: 74 68 65 72 20 76 65 72 73 69 6f 6e 20 32 20 6f  ther version 2 o
00c0: 66 20 74 68 65 20 4c 69 63 65 6e 73 65 2c 20 6f  f the License, o
00d0: 72 0a 3b 20 28 61 74 20 79 6f 75 72 20 6f 70 74  r.; (at your opt
00e0: 69 6f 6e 29 20 61 6e 79 20 6c 61 74 65 72 20 76  ion) any later v
00f0: 65 72 73 69 6f 6e 2e 0a 3b 0a 3b 20 54 68 69 73  ersion..;.; This
0100: 20 70 72 6f 67 72 61 6d 20 69 73 20 64 69 73 74   program is dist
0110: 72 69 62 75 74 65 64 20 69 6e 20 74 68 65 20 68  ributed in the h
0120: 6f 70 65 20 74 68 61 74 20 69 74 20 77 69 6c 6c  ope that it will
0130: 20 62 65 20 75 73 65 66 75 6c 2c 0a 3b 20 62 75   be useful,.; bu
0140: 74 20 57 49 54 48 4f 55 54 20 41 4e 59 20 57 41  t WITHOUT ANY WA
0150: 52 52 41 4e 54 59 3b 20 77 69 74 68 6f 75 74 20  RRANTY; without 
0160: 65 76 65 6e 20 74 68 65 20 69 6d 70 6c 69 65 64  even the implied
0170: 20 77 61 72 72 61 6e 74 79 20 6f 66 0a 3b 20 4d   warranty of.; M
0180: 45 52 43 48 41 4e 54 41 42 49 4c 49 54 59 20 6f  ERCHANTABILITY o
0190: 72 20 46 49 54 4e 45 53 53 20 46 4f 52 20 41 20  r FITNESS FOR A 
01a0: 50 41 52 54 49 43 55 4c 41 52 20 50 55 52 50 4f  PARTICULAR PURPO
01b0: 53 45 2e 20 20 53 65 65 20 74 68 65 0a 3b 20 47  SE.  See the.; G
01c0: 4e 55 20 47 65 6e 65 72 61 6c 20 50 75 62 6c 69  NU General Publi
01d0: 63 20 4c 69 63 65 6e 73 65 20 66 6f 72 20 6d 6f  c License for mo
01e0: 72 65 20 64 65 74 61 69 6c 73 2e 0a 0a 3b 3b 20  re details...;; 
01f0: 4d 65 72 67 65 20 61 6c 6c 20 6c 69 6e 6b 65 64  Merge all linked
0200: 20 6c 61 79 65 72 73 2e 0a 3b 3b 20 0a 3b 0a 0a   layers..;; .;..
0210: 28 64 65 66 69 6e 65 20 28 73 63 72 69 70 74 2d  (define (script-
0220: 66 75 2d 73 67 2d 6d 65 72 67 65 2d 6c 69 6e 6b  fu-sg-merge-link
0230: 65 64 20 69 6d 61 67 65 29 0a 20 20 28 67 69 6d  ed image).  (gim
0240: 70 2d 69 6d 61 67 65 2d 75 6e 64 6f 2d 67 72 6f  p-image-undo-gro
0250: 75 70 2d 73 74 61 72 74 20 69 6d 61 67 65 29 0a  up-start image).
0260: 20 20 28 6c 65 74 2a 20 28 28 6c 61 79 65 72 73    (let* ((layers
0270: 20 28 76 65 63 74 6f 72 2d 3e 6c 69 73 74 20 28   (vector->list (
0280: 63 61 64 72 20 28 67 69 6d 70 2d 69 6d 61 67 65  cadr (gimp-image
0290: 2d 67 65 74 2d 6c 61 79 65 72 73 20 69 6d 61 67  -get-layers imag
02a0: 65 29 29 29 29 0a 20 20 20 20 20 20 20 20 20 28  e)))).         (
02b0: 76 69 73 69 62 6c 65 73 20 28 6c 65 74 20 6c 6f  visibles (let lo
02c0: 6f 70 20 28 28 6c 61 79 65 72 73 20 6c 61 79 65  op ((layers laye
02d0: 72 73 29 0a 20 20 20 20 20 20 20 20 20 20 20 20  rs).            
02e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
02f0: 20 20 28 76 69 73 69 62 6c 65 73 20 27 28 29 29    (visibles '())
0300: 20 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   ).             
0310: 20 20 20 20 20 20 20 20 20 20 20 28 69 66 20 28             (if (
0320: 6e 75 6c 6c 3f 20 6c 61 79 65 72 73 29 0a 20 20  null? layers).  
0330: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0340: 20 20 20 20 20 20 20 20 76 69 73 69 62 6c 65 73          visibles
0350: 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20   .              
0360: 20 20 20 20 20 20 20 20 20 20 20 20 28 6c 6f 6f              (loo
0370: 70 20 28 63 64 72 20 6c 61 79 65 72 73 29 0a 20  p (cdr layers). 
0380: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0390: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28                 (
03a0: 69 66 20 28 7a 65 72 6f 3f 20 28 63 61 72 20 28  if (zero? (car (
03b0: 67 69 6d 70 2d 64 72 61 77 61 62 6c 65 2d 67 65  gimp-drawable-ge
03c0: 74 2d 76 69 73 69 62 6c 65 20 28 63 61 72 20 6c  t-visible (car l
03d0: 61 79 65 72 73 29 29 29 29 0a 20 20 20 20 20 20  ayers)))).      
03e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
03f0: 20 20 20 20 20 20 20 20 20 20 20 20 76 69 73 69              visi
0400: 62 6c 65 73 0a 20 20 20 20 20 20 20 20 20 20 20  bles.           
0410: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0420: 20 20 20 20 20 20 20 28 63 6f 6e 73 20 28 63 61         (cons (ca
0430: 72 20 6c 61 79 65 72 73 29 20 76 69 73 69 62 6c  r layers) visibl
0440: 65 73 29 20 29 29 29 29 29 0a 20 20 20 20 20 20  es) ))))).      
0450: 20 20 20 28 6d 65 72 67 69 62 6c 65 73 20 28 6c     (mergibles (l
0460: 65 74 20 6c 6f 6f 70 20 28 28 6c 61 79 65 72 73  et loop ((layers
0470: 20 6c 61 79 65 72 73 29 0a 20 20 20 20 20 20 20   layers).       
0480: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0490: 20 20 20 20 20 20 20 28 6d 65 72 67 69 62 6c 65         (mergible
04a0: 73 20 27 28 29 29 20 29 0a 20 20 20 20 20 20 20  s '()) ).       
04b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
04c0: 20 28 69 66 20 28 6e 75 6c 6c 3f 20 6c 61 79 65   (if (null? laye
04d0: 72 73 29 0a 20 20 20 20 20 20 20 20 20 20 20 20  rs).            
04e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6d 65                me
04f0: 72 67 69 62 6c 65 73 20 0a 20 20 20 20 20 20 20  rgibles .       
0500: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0510: 20 20 20 28 6c 6f 6f 70 20 28 63 64 72 20 6c 61     (loop (cdr la
0520: 79 65 72 73 29 0a 20 20 20 20 20 20 20 20 20 20  yers).          
0530: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0540: 20 20 20 20 20 20 28 69 66 20 28 7a 65 72 6f 3f        (if (zero?
0550: 20 28 63 61 72 20 28 67 69 6d 70 2d 64 72 61 77   (car (gimp-draw
0560: 61 62 6c 65 2d 67 65 74 2d 6c 69 6e 6b 65 64 20  able-get-linked 
0570: 28 63 61 72 20 6c 61 79 65 72 73 29 29 29 29 0a  (car layers)))).
0580: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0590: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
05a0: 20 20 6d 65 72 67 69 62 6c 65 73 0a 20 20 20 20    mergibles.    
05b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
05c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 63                (c
05d0: 6f 6e 73 20 28 63 61 72 20 6c 61 79 65 72 73 29  ons (car layers)
05e0: 20 6d 65 72 67 69 62 6c 65 73 29 20 29 29 29 29   mergibles) ))))
05f0: 29 29 0a 20 20 20 20 28 6d 61 70 20 28 6c 61 6d  )).    (map (lam
0600: 62 64 61 20 28 6c 61 79 65 72 29 20 0a 20 20 20  bda (layer) .   
0610: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 67                (g
0620: 69 6d 70 2d 64 72 61 77 61 62 6c 65 2d 73 65 74  imp-drawable-set
0630: 2d 76 69 73 69 62 6c 65 20 6c 61 79 65 72 20 46  -visible layer F
0640: 41 4c 53 45 29 20 29 0a 20 20 20 20 20 20 20 20  ALSE) ).        
0650: 20 6c 61 79 65 72 73 20 29 0a 20 20 20 20 28 6d   layers ).    (m
0660: 61 70 20 28 6c 61 6d 62 64 61 20 28 6c 61 79 65  ap (lambda (laye
0670: 72 29 20 0a 20 20 20 20 20 20 20 20 20 20 20 20  r) .            
0680: 20 20 20 20 20 28 67 69 6d 70 2d 64 72 61 77 61       (gimp-drawa
0690: 62 6c 65 2d 73 65 74 2d 76 69 73 69 62 6c 65 20  ble-set-visible 
06a0: 6c 61 79 65 72 20 54 52 55 45 29 20 29 0a 20 20  layer TRUE) ).  
06b0: 20 20 20 20 20 20 20 6d 65 72 67 69 62 6c 65 73         mergibles
06c0: 20 29 0a 20 20 20 20 28 67 69 6d 70 2d 69 6d 61   ).    (gimp-ima
06d0: 67 65 2d 6d 65 72 67 65 2d 76 69 73 69 62 6c 65  ge-merge-visible
06e0: 2d 6c 61 79 65 72 73 20 69 6d 61 67 65 20 45 58  -layers image EX
06f0: 50 41 4e 44 2d 41 53 2d 4e 45 43 45 53 53 41 52  PAND-AS-NECESSAR
0700: 59 29 0a 20 20 20 20 28 6c 65 74 20 6c 6f 6f 70  Y).    (let loop
0710: 20 28 28 6c 61 79 65 72 73 20 76 69 73 69 62 6c   ((layers visibl
0720: 65 73 29 29 0a 20 20 20 20 20 20 28 69 66 20 28  es)).      (if (
0730: 6e 75 6c 6c 3f 20 6c 61 79 65 72 73 29 0a 20 20  null? layers).  
0740: 20 20 20 20 20 20 23 74 0a 20 20 20 20 20 20 20        #t.       
0750: 20 28 62 65 67 69 6e 0a 20 20 20 20 20 20 20 20   (begin.        
0760: 20 20 28 75 6e 6c 65 73 73 20 28 7a 65 72 6f 3f    (unless (zero?
0770: 20 28 63 61 72 20 28 67 69 6d 70 2d 64 72 61 77   (car (gimp-draw
0780: 61 62 6c 65 2d 69 73 2d 76 61 6c 69 64 20 28 63  able-is-valid (c
0790: 61 72 20 6c 61 79 65 72 73 29 29 29 29 0a 20 20  ar layers)))).  
07a0: 20 20 20 20 20 20 20 20 20 20 28 67 69 6d 70 2d            (gimp-
07b0: 64 72 61 77 61 62 6c 65 2d 73 65 74 2d 76 69 73  drawable-set-vis
07c0: 69 62 6c 65 20 28 63 61 72 20 6c 61 79 65 72 73  ible (car layers
07d0: 29 20 54 52 55 45 29 20 29 0a 20 20 20 20 20 20  ) TRUE) ).      
07e0: 20 20 20 20 28 6c 6f 6f 70 20 28 63 64 72 20 6c      (loop (cdr l
07f0: 61 79 65 72 73 29 29 20 29 29 29 29 0a 20 20 28  ayers)) )))).  (
0800: 67 69 6d 70 2d 64 69 73 70 6c 61 79 73 2d 66 6c  gimp-displays-fl
0810: 75 73 68 29 0a 20 20 28 67 69 6d 70 2d 69 6d 61  ush).  (gimp-ima
0820: 67 65 2d 75 6e 64 6f 2d 67 72 6f 75 70 2d 65 6e  ge-undo-group-en
0830: 64 20 69 6d 61 67 65 29 0a 20 20 29 0a 20 20 20  d image).  ).   
0840: 20 20 20 0a 20 20 20 20 20 20 20 20 0a 28 73 63     .        .(sc
0850: 72 69 70 74 2d 66 75 2d 72 65 67 69 73 74 65 72  ript-fu-register
0860: 20 22 73 63 72 69 70 74 2d 66 75 2d 73 67 2d 6d   "script-fu-sg-m
0870: 65 72 67 65 2d 6c 69 6e 6b 65 64 22 0a 20 20 22  erge-linked".  "
0880: 4d 65 72 67 65 20 6c 69 6e 6b 65 64 22 0a 20 20  Merge linked".  
0890: 22 4d 65 72 67 65 20 61 6c 6c 20 6c 69 6e 6b 65  "Merge all linke
08a0: 64 20 6c 61 79 65 72 73 20 28 69 67 6e 6f 72 69  d layers (ignori
08b0: 6e 67 20 76 69 73 69 62 69 6c 69 74 79 29 22 0a  ng visibility)".
08c0: 20 20 22 53 61 75 6c 20 47 6f 6f 64 65 22 0a 20    "Saul Goode". 
08d0: 20 22 53 61 75 6c 20 47 6f 6f 64 65 22 0a 20 20   "Saul Goode".  
08e0: 22 4a 61 6e 75 61 72 79 20 32 30 31 31 22 0a 20  "January 2011". 
08f0: 20 22 2a 22 0a 20 20 53 46 2d 49 4d 41 47 45 20   "*".  SF-IMAGE 
0900: 20 20 20 22 49 6d 61 67 65 22 20 20 20 20 30 0a     "Image"    0.
0910: 20 20 29 0a 0a 28 73 63 72 69 70 74 2d 66 75 2d    )..(script-fu-
0920: 6d 65 6e 75 2d 72 65 67 69 73 74 65 72 20 22 73  menu-register "s
0930: 63 72 69 70 74 2d 66 75 2d 73 67 2d 6d 65 72 67  cript-fu-sg-merg
0940: 65 2d 6c 69 6e 6b 65 64 22 0a 20 22 3c 49 6d 61  e-linked". "<Ima
0950: 67 65 3e 2f 49 6d 61 67 65 22 0a 20 29 0a 0a     ge>/Image". )..