RFX-GIMP

Hex Artifact Content
Login

Artifact 3faf9ce0094f9d5afac5283ff870e170efd10ac8:


0000: 53 63 72 69 70 74 20 66 69 6c 65 20 67 65 6e 65  Script file gene
0010: 72 61 74 65 64 20 66 72 6f 6d 20 4c 69 56 45 53  rated from LiVES
0020: 0a 0a 3c 64 65 66 69 6e 65 3e 0a 7c 31 2e 37 0a  ..<define>.|1.7.
0030: 3c 2f 64 65 66 69 6e 65 3e 0a 0a 3c 6e 61 6d 65  </define>..<name
0040: 3e 0a 74 65 63 68 6e 69 63 6f 6c 6f 72 2d 33 0a  >.technicolor-3.
0050: 3c 2f 6e 61 6d 65 3e 0a 0a 3c 76 65 72 73 69 6f  </name>..<versio
0060: 6e 3e 0a 31 0a 3c 2f 76 65 72 73 69 6f 6e 3e 0a  n>.1.</version>.
0070: 0a 3c 61 75 74 68 6f 72 3e 0a 73 61 75 6c 67 6f  .<author>.saulgo
0080: 6f 64 65 7c 0a 3c 2f 61 75 74 68 6f 72 3e 0a 0a  ode|.</author>..
0090: 3c 64 65 73 63 72 69 70 74 69 6f 6e 3e 0a 54 65  <description>.Te
00a0: 63 68 6e 69 63 6f 6c 6f 72 20 33 2d 73 74 72 69  chnicolor 3-stri
00b0: 70 7c 41 70 70 6c 79 69 6e 67 20 54 65 63 68 6e  p|Applying Techn
00c0: 69 63 6f 6c 6f 72 20 33 2d 73 74 72 69 70 20 74  icolor 3-strip t
00d0: 6f 7c 31 7c 31 7c 0a 3c 2f 64 65 73 63 72 69 70  o|1|1|.</descrip
00e0: 74 69 6f 6e 3e 0a 0a 3c 72 65 71 75 69 72 65 73  tion>..<requires
00f0: 3e 0a 67 69 6d 70 0a 3c 2f 72 65 71 75 69 72 65  >.gimp.</require
0100: 73 3e 0a 0a 3c 70 61 72 61 6d 73 3e 0a 61 6d 6f  s>..<params>.amo
0110: 75 6e 74 7c 41 6d 6f 75 6e 74 7c 6e 75 6d 30 7c  unt|Amount|num0|
0120: 37 30 7c 30 7c 31 30 30 7c 0a 3c 2f 70 61 72 61  70|0|100|.</para
0130: 6d 73 3e 0a 0a 3c 70 61 72 61 6d 5f 77 69 6e 64  ms>..<param_wind
0140: 6f 77 3e 0a 3c 2f 70 61 72 61 6d 5f 77 69 6e 64  ow>.</param_wind
0150: 6f 77 3e 0a 0a 3c 70 72 6f 70 65 72 74 69 65 73  ow>..<properties
0160: 3e 0a 30 78 30 30 30 31 0a 3c 2f 70 72 6f 70 65  >.0x0001.</prope
0170: 72 74 69 65 73 3e 0a 0a 3c 6c 61 6e 67 75 61 67  rties>..<languag
0180: 65 5f 63 6f 64 65 3e 0a 30 78 46 30 0a 3c 2f 6c  e_code>.0xF0.</l
0190: 61 6e 67 75 61 67 65 5f 63 6f 64 65 3e 0a 0a 3c  anguage_code>..<
01a0: 70 72 65 3e 0a 23 20 54 68 69 73 20 70 72 6f 67  pre>.# This prog
01b0: 72 61 6d 20 69 73 20 66 72 65 65 20 73 6f 66 74  ram is free soft
01c0: 77 61 72 65 3b 20 79 6f 75 20 63 61 6e 20 72 65  ware; you can re
01d0: 64 69 73 74 72 69 62 75 74 65 20 69 74 20 61 6e  distribute it an
01e0: 64 2f 6f 72 20 6d 6f 64 69 66 79 0a 23 20 69 74  d/or modify.# it
01f0: 20 75 6e 64 65 72 20 74 68 65 20 74 65 72 6d 73   under the terms
0200: 20 6f 66 20 74 68 65 20 47 4e 55 20 47 65 6e 65   of the GNU Gene
0210: 72 61 6c 20 50 75 62 6c 69 63 20 4c 69 63 65 6e  ral Public Licen
0220: 73 65 20 76 65 72 73 69 6f 6e 20 33 20 6f 72 20  se version 3 or 
0230: 68 69 67 68 65 72 0a 23 20 61 73 20 70 75 62 6c  higher.# as publ
0240: 69 73 68 65 64 20 62 79 20 74 68 65 20 46 72 65  ished by the Fre
0250: 65 20 53 6f 66 74 77 61 72 65 20 46 6f 75 6e 64  e Software Found
0260: 61 74 69 6f 6e 2e 0a 0a 75 73 65 20 49 4f 3a 3a  ation...use IO::
0270: 53 6f 63 6b 65 74 3b 20 0a 75 73 65 20 54 65 78  Socket; .use Tex
0280: 74 3a 3a 42 61 6c 61 6e 63 65 64 3b 0a 0a 69 66  t::Balanced;..if
0290: 20 28 24 45 4e 56 7b 27 52 46 58 47 49 4d 50 5f   ($ENV{'RFXGIMP_
02a0: 50 4f 52 54 27 7d 29 20 7b 0a 20 20 24 72 66 78  PORT'}) {.  $rfx
02b0: 5f 70 6f 72 74 20 3d 20 24 45 4e 56 7b 27 52 46  _port = $ENV{'RF
02c0: 58 47 49 4d 50 5f 50 4f 52 54 27 7d 3b 0a 20 20  XGIMP_PORT'};.  
02d0: 7d 0a 65 6c 73 65 20 7b 0a 20 20 24 72 66 78 5f  }.else {.  $rfx_
02e0: 70 6f 72 74 20 3d 20 31 30 30 30 38 3b 20 0a 20  port = 10008; . 
02f0: 20 7d 0a 0a 24 73 6f 63 6b 20 3d 20 6e 65 77 20   }..$sock = new 
0300: 49 4f 3a 3a 53 6f 63 6b 65 74 3a 3a 49 4e 45 54  IO::Socket::INET
0310: 20 28 20 50 65 65 72 41 64 64 72 20 3d 3e 20 27   ( PeerAddr => '
0320: 6c 6f 63 61 6c 68 6f 73 74 27 2c 20 0a 20 20 20  localhost', .   
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 20 20 20 20 50 65 65 72              Peer
0350: 50 6f 72 74 20 3d 3e 20 24 72 66 78 5f 70 6f 72  Port => $rfx_por
0360: 74 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20 20  t, .            
0370: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0380: 20 20 20 50 72 6f 74 6f 20 3d 3e 20 27 74 63 70     Proto => 'tcp
0390: 27 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ' .             
03a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
03b0: 20 20 29 3b 0a 69 66 20 28 20 6e 6f 74 20 64 65    );.if ( not de
03c0: 66 69 6e 65 64 20 24 73 6f 63 6b 20 29 20 7b 0a  fined $sock ) {.
03d0: 20 20 6d 79 20 24 72 66 78 5f 70 69 64 20 3d 20    my $rfx_pid = 
03e0: 66 6f 72 6b 28 29 3b 0a 20 20 69 66 20 28 6e 6f  fork();.  if (no
03f0: 74 20 64 65 66 69 6e 65 64 20 24 72 66 78 5f 70  t defined $rfx_p
0400: 69 64 29 20 7b 0a 20 20 20 20 26 73 69 67 5f 65  id) {.    &sig_e
0410: 72 72 6f 72 28 22 55 4e 41 42 4c 45 20 54 4f 20  rror("UNABLE TO 
0420: 45 58 45 43 55 54 45 20 47 49 4d 50 3a 20 4e 6f  EXECUTE GIMP: No
0430: 74 20 65 6e 6f 75 67 68 20 72 65 73 6f 75 72 63  t enough resourc
0440: 65 73 22 29 3b 0a 20 20 20 20 7d 20 0a 20 20 65  es");.    } .  e
0450: 6c 73 69 66 20 28 24 72 66 78 5f 70 69 64 20 3d  lsif ($rfx_pid =
0460: 3d 20 30 29 20 7b 0a 20 20 20 20 69 66 20 28 20  = 0) {.    if ( 
0470: 2d 66 20 24 74 6d 70 64 69 72 20 2e 20 22 72 66  -f $tmpdir . "rf
0480: 78 67 69 6d 70 2e 70 69 64 22 29 20 7b 0a 20 20  xgimp.pid") {.  
0490: 20 20 20 20 6f 70 65 6e 28 50 49 44 46 49 4c 45      open(PIDFILE
04a0: 2c 20 24 74 6d 70 64 69 72 20 2e 20 22 72 66 78  , $tmpdir . "rfx
04b0: 67 69 6d 70 2e 70 69 64 22 29 3b 0a 20 20 20 20  gimp.pid");.    
04c0: 20 20 23 20 73 68 6f 75 6c 64 20 70 72 6f 62 61    # should proba
04d0: 62 6c 79 20 64 6f 20 73 6f 6d 65 20 73 61 6e 69  bly do some sani
04e0: 74 79 20 63 68 65 63 6b 69 6e 67 20 66 6f 72 20  ty checking for 
04f0: 74 68 65 20 6f 66 66 20 63 68 61 6e 63 65 20 74  the off chance t
0500: 68 61 74 0a 20 20 20 20 20 20 23 20 74 68 65 20  hat.      # the 
0510: 50 49 44 20 68 61 73 20 62 65 65 6e 20 72 65 63  PID has been rec
0520: 79 63 6c 65 64 20 6f 72 20 74 68 65 20 73 79 73  ycled or the sys
0530: 74 65 6d 20 68 61 73 20 72 65 62 6f 6f 74 65 64  tem has rebooted
0540: 20 28 65 2e 67 2c 20 63 68 65 63 6b 0a 20 20 20   (e.g, check.   
0550: 20 20 20 23 20 69 66 20 70 72 6f 63 65 73 73 20     # if process 
0560: 77 61 73 20 65 78 65 63 75 74 65 64 20 77 69 74  was executed wit
0570: 68 20 2f 75 73 72 2f 62 69 6e 2f 70 65 72 6c 2e  h /usr/bin/perl.
0580: 20 42 75 74 20 66 6f 72 20 6e 6f 77 2e 2e 2e 0a   But for now....
0590: 20 20 20 20 20 20 6b 69 6c 6c 28 31 35 2c 20 2d        kill(15, -
05a0: 3c 50 49 44 46 49 4c 45 3e 29 3b 20 23 20 74 68  <PIDFILE>); # th
05b0: 65 20 6e 65 67 61 74 69 76 65 20 50 49 44 20 6d  e negative PID m
05c0: 65 61 6e 73 20 6b 69 6c 6c 20 61 6c 6c 20 63 68  eans kill all ch
05d0: 69 6c 64 72 65 6e 2c 20 74 6f 6f 2e 0a 20 20 20  ildren, too..   
05e0: 20 20 20 63 6c 6f 73 65 28 50 49 44 46 49 4c 45     close(PIDFILE
05f0: 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 73  );.      }.    s
0600: 65 74 70 67 69 64 28 24 24 2c 30 29 3b 20 23 20  etpgid($$,0); # 
0610: 63 68 61 6e 67 65 20 74 68 65 20 70 67 72 6f 75  change the pgrou
0620: 70 20 74 6f 20 74 68 69 73 20 66 6f 72 6b 65 64  p to this forked
0630: 20 70 72 6f 63 65 73 73 2c 20 72 61 74 68 65 72   process, rather
0640: 20 74 68 61 6e 0a 20 20 20 20 20 20 20 20 20 20   than.          
0650: 20 20 20 20 20 20 20 20 20 23 20 74 68 65 20 6f           # the o
0660: 72 69 67 69 6e 61 6c 20 4c 69 56 45 53 20 28 73  riginal LiVES (s
0670: 6f 20 74 68 61 74 20 77 65 20 64 6f 6e 27 74 20  o that we don't 
0680: 6b 69 6c 6c 20 4c 69 56 45 53 20 77 68 65 6e 20  kill LiVES when 
0690: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
06a0: 20 20 20 20 23 20 74 68 69 73 20 70 72 67 72 6f      # this prgro
06b0: 75 70 20 69 73 20 6b 69 6c 6c 65 64 29 2e 0a 20  up is killed).. 
06c0: 20 20 20 6f 70 65 6e 28 50 49 44 46 49 4c 45 2c     open(PIDFILE,
06d0: 20 22 3e 22 20 2e 20 24 74 6d 70 64 69 72 20 2e   ">" . $tmpdir .
06e0: 20 22 72 66 78 67 69 6d 70 2e 70 69 64 22 29 3b   "rfxgimp.pid");
06f0: 20 23 20 6f 76 65 72 77 72 69 74 65 20 6f 6c 64   # overwrite old
0700: 20 66 69 6c 65 0a 20 20 20 20 70 72 69 6e 74 20   file.    print 
0710: 50 49 44 46 49 4c 45 20 24 24 3b 0a 20 20 20 20  PIDFILE $$;.    
0720: 63 6c 6f 73 65 28 50 49 44 46 49 4c 45 29 3b 0a  close(PIDFILE);.
0730: 20 20 20 20 6d 79 20 24 73 74 61 72 74 5f 67 69      my $start_gi
0740: 6d 70 20 3d 20 71 71 7b 20 67 69 6d 70 20 2d 69  mp = qq{ gimp -i
0750: 20 2d 62 20 22 28 70 6c 75 67 2d 69 6e 2d 73 63   -b "(plug-in-sc
0760: 72 69 70 74 2d 66 75 2d 73 65 72 76 65 72 20 31  ript-fu-server 1
0770: 20 24 72 66 78 5f 70 6f 72 74 20 5c 5c 5c 22 5c   $rfx_port \\\"\
0780: 5c 5c 22 29 22 20 26 20 7d 3b 0a 20 20 20 20 73  \\")" & };.    s
0790: 79 73 74 65 6d 20 28 20 24 73 74 61 72 74 5f 67  ystem ( $start_g
07a0: 69 6d 70 20 29 3b 20 23 20 74 68 6f 75 67 68 20  imp ); # though 
07b0: 73 74 61 72 74 65 64 20 61 73 20 73 65 70 61 72  started as separ
07c0: 61 74 65 20 70 72 6f 63 65 73 73 2c 20 47 49 4d  ate process, GIM
07d0: 50 20 6e 6f 77 0a 20 20 20 20 20 20 20 20 20 20  P now.          
07e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
07f0: 20 20 23 20 69 73 20 70 61 72 74 20 6f 66 20 74    # is part of t
0800: 68 69 73 20 73 70 61 77 6e 65 64 20 63 68 69 6c  his spawned chil
0810: 64 27 73 20 70 67 72 6f 75 70 2c 20 6e 6f 74 20  d's pgroup, not 
0820: 74 68 65 20 4c 69 56 45 53 20 70 67 72 6f 75 70  the LiVES pgroup
0830: 0a 20 20 20 20 73 6c 65 65 70 28 29 3b 20 23 20  .    sleep(); # 
0840: 64 6f 20 6e 6f 74 68 69 6e 67 2c 20 66 6f 72 65  do nothing, fore
0850: 76 65 72 0a 20 20 20 20 26 73 69 67 5f 65 72 72  ver.    &sig_err
0860: 6f 72 28 22 47 49 4d 50 20 6b 69 6c 6c 65 64 20  or("GIMP killed 
0870: 62 79 20 65 78 74 65 72 6e 61 6c 20 70 72 6f 63  by external proc
0880: 65 73 73 5c 6e 22 29 3b 0a 20 20 20 20 7d 0a 20  ess\n");.    }. 
0890: 20 65 6c 73 65 20 7b 0a 20 20 20 20 77 68 69 6c   else {.    whil
08a0: 65 20 28 6e 6f 74 20 64 65 66 69 6e 65 64 20 24  e (not defined $
08b0: 73 6f 63 6b 29 20 7b 0a 20 20 20 20 20 20 73 6c  sock) {.      sl
08c0: 65 65 70 20 28 31 29 3b 0a 20 20 20 20 20 20 24  eep (1);.      $
08d0: 73 6f 63 6b 20 3d 20 6e 65 77 20 49 4f 3a 3a 53  sock = new IO::S
08e0: 6f 63 6b 65 74 3a 3a 49 4e 45 54 20 28 20 50 65  ocket::INET ( Pe
08f0: 65 72 41 64 64 72 20 3d 3e 20 27 6c 6f 63 61 6c  erAddr => 'local
0900: 68 6f 73 74 27 2c 20 0a 20 20 20 20 20 20 20 20  host', .        
0910: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0920: 20 20 20 20 20 20 20 20 20 20 20 20 20 50 65 65               Pee
0930: 72 50 6f 72 74 20 3d 3e 20 24 72 66 78 5f 70 6f  rPort => $rfx_po
0940: 72 74 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20  rt, .           
0950: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0960: 20 20 20 20 20 20 20 20 20 20 50 72 6f 74 6f 20            Proto 
0970: 3d 3e 20 27 74 63 70 27 20 0a 20 20 20 20 20 20  => 'tcp' .      
0980: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0990: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29                 )
09a0: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
09b0: 20 20 7d 0a 0a 23 20 44 65 66 69 6e 65 20 61 20    }..# Define a 
09c0: 50 65 72 6c 20 73 75 62 72 6f 75 74 69 6e 65 20  Perl subroutine 
09d0: 66 6f 72 20 73 65 6e 64 69 6e 67 20 6d 65 73 73  for sending mess
09e0: 61 67 65 73 20 74 6f 20 74 68 65 20 53 46 20 73  ages to the SF s
09f0: 65 72 76 65 72 20 61 6e 64 20 77 61 69 74 69 6e  erver and waitin
0a00: 67 0a 23 20 66 6f 72 20 61 20 72 65 73 70 6f 6e  g.# for a respon
0a10: 73 65 2e 0a 23 0a 73 75 62 20 72 66 78 5f 73 65  se..#.sub rfx_se
0a20: 6e 64 6d 73 67 20 7b 0a 20 20 6d 79 20 24 6d 65  ndmsg {.  my $me
0a30: 73 73 61 67 65 20 3d 20 24 5f 5b 30 5d 3b 0a 20  ssage = $_[0];. 
0a40: 20 6d 79 20 24 6c 65 6e 20 3d 20 6c 65 6e 67 74   my $len = lengt
0a50: 68 20 28 24 6d 65 73 73 61 67 65 29 3b 0a 20 20  h ($message);.  
0a60: 69 66 20 28 24 6c 65 6e 20 3e 20 36 35 35 33 35  if ($len > 65535
0a70: 29 20 7b 0a 20 20 20 20 26 73 69 67 5f 65 72 72  ) {.    &sig_err
0a80: 6f 72 28 22 45 52 52 4f 52 3a 20 73 63 72 69 70  or("ERROR: scrip
0a90: 74 20 69 73 20 74 6f 6f 20 6c 6f 6e 67 20 66 6f  t is too long fo
0aa0: 72 20 6f 6e 65 20 73 65 72 76 65 72 20 72 65 71  r one server req
0ab0: 75 65 73 74 3a 20 24 6c 65 6e 20 3e 20 36 35 35  uest: $len > 655
0ac0: 33 35 22 29 3b 0a 20 20 20 20 7d 3b 0a 20 20 23  35");.    };.  #
0ad0: 20 73 65 6e 64 20 73 63 72 69 70 74 20 74 6f 20   send script to 
0ae0: 47 49 4d 50 0a 20 20 6d 79 20 24 68 65 61 64 65  GIMP.  my $heade
0af0: 72 20 3d 20 70 61 63 6b 28 20 27 61 6e 27 2c 20  r = pack( 'an', 
0b00: 27 47 27 2c 20 24 6c 65 6e 29 3b 0a 20 20 73 79  'G', $len);.  sy
0b10: 73 77 72 69 74 65 28 20 24 73 6f 63 6b 2c 20 24  swrite( $sock, $
0b20: 5f 20 29 20 66 6f 72 20 28 24 68 65 61 64 65 72  _ ) for ($header
0b30: 2c 20 24 6d 65 73 73 61 67 65 29 3b 0a 20 20 23  , $message);.  #
0b40: 20 77 61 69 74 20 66 6f 72 20 72 65 73 70 6f 6e   wait for respon
0b50: 73 65 0a 20 20 6d 79 20 24 72 69 6e 20 3d 20 27  se.  my $rin = '
0b60: 27 3b 0a 20 20 76 65 63 28 20 24 72 69 6e 2c 20  ';.  vec( $rin, 
0b70: 66 69 6c 65 6e 6f 28 24 73 6f 63 6b 29 2c 20 31  fileno($sock), 1
0b80: 20 29 20 3d 20 31 3b 0a 20 20 73 65 6c 65 63 74   ) = 1;.  select
0b90: 28 20 24 72 69 6e 2c 20 20 75 6e 64 65 66 2c 20  ( $rin,  undef, 
0ba0: 75 6e 64 65 66 2c 20 75 6e 64 65 66 20 29 3b 20  undef, undef ); 
0bb0: 20 20 20 23 20 77 61 69 74 20 28 66 6f 72 65 76     # wait (forev
0bc0: 65 72 29 20 66 6f 72 20 72 65 73 70 6f 6e 73 65  er) for response
0bd0: 20 73 74 61 72 74 0a 20 20 73 65 6c 65 63 74 28   start.  select(
0be0: 20 75 6e 64 65 66 2c 20 75 6e 64 65 66 2c 20 75   undef, undef, u
0bf0: 6e 64 65 66 2c 20 2e 31 20 29 3b 20 20 20 20 20  ndef, .1 );     
0c00: 20 20 23 20 77 61 69 74 20 61 20 62 69 74 20 66    # wait a bit f
0c10: 6f 72 20 72 65 73 70 6f 6e 73 65 20 74 6f 20 66  or response to f
0c20: 69 6e 69 73 68 0a 20 20 20 20 20 20 20 20 20 20  inish.          
0c30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0c40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0c50: 20 23 20 20 69 6e 63 72 65 61 73 65 20 77 61 69   #  increase wai
0c60: 74 20 69 66 20 49 4e 56 41 4c 49 44 2f 49 4e 43  t if INVALID/INC
0c70: 4f 4d 50 4c 45 54 45 20 52 45 53 50 4f 4e 53 45  OMPLETE RESPONSE
0c80: 20 6f 63 63 75 72 73 0a 20 20 23 20 72 65 73 70   occurs.  # resp
0c90: 6f 6e 73 65 0a 20 20 24 6c 65 6e 20 3d 20 73 79  onse.  $len = sy
0ca0: 73 72 65 61 64 28 20 24 73 6f 63 6b 2c 20 24 68  sread( $sock, $h
0cb0: 65 61 64 65 72 2c 20 34 20 29 20 6f 72 20 26 73  eader, 4 ) or &s
0cc0: 69 67 5f 65 72 72 6f 72 28 22 49 4e 56 41 4c 49  ig_error("INVALI
0cd0: 44 20 52 45 53 50 4f 4e 53 45 3a 20 65 6d 70 74  D RESPONSE: empt
0ce0: 79 20 72 65 73 70 6f 6e 73 65 22 29 3b 0a 20 20  y response");.  
0cf0: 28 20 24 6c 65 6e 20 3d 3d 20 34 20 61 6e 64 20  ( $len == 4 and 
0d00: 24 68 65 61 64 65 72 20 3d 7e 20 2f 5e 47 2f 20  $header =~ /^G/ 
0d10: 29 20 6f 72 20 26 73 69 67 5f 65 72 72 6f 72 28  ) or &sig_error(
0d20: 22 49 4e 56 41 4c 49 44 20 52 45 53 50 4f 4e 53  "INVALID RESPONS
0d30: 45 3a 20 62 61 64 20 68 65 61 64 65 72 22 29 3b  E: bad header");
0d40: 0a 20 20 6d 79 20 24 73 74 61 74 75 73 3b 0a 20  .  my $status;. 
0d50: 20 28 24 73 74 61 74 75 73 2c 20 24 6c 65 6e 29   ($status, $len)
0d60: 20 3d 20 75 6e 70 61 63 6b 28 20 27 78 43 6e 27   = unpack( 'xCn'
0d70: 2c 20 24 68 65 61 64 65 72 20 29 3b 0a 20 20 6d  , $header );.  m
0d80: 79 20 24 72 65 73 70 6f 6e 73 65 3b 0a 20 20 28  y $response;.  (
0d90: 20 73 79 73 72 65 61 64 28 20 24 73 6f 63 6b 2c   sysread( $sock,
0da0: 20 24 72 65 73 70 6f 6e 73 65 2c 20 24 6c 65 6e   $response, $len
0db0: 20 29 20 3d 3d 20 24 6c 65 6e 20 29 20 6f 72 20   ) == $len ) or 
0dc0: 26 73 69 67 5f 65 72 72 6f 72 28 22 49 4e 43 4f  &sig_error("INCO
0dd0: 4d 50 4c 45 54 45 20 52 45 53 50 4f 4e 53 45 3a  MPLETE RESPONSE:
0de0: 20 24 72 65 73 70 6f 6e 73 65 22 29 3b 0a 20 20   $response");.  
0df0: 23 20 65 78 69 74 20 69 66 20 72 65 73 70 6f 6e  # exit if respon
0e00: 73 65 20 69 73 20 6e 6f 74 20 22 53 75 63 63 65  se is not "Succe
0e10: 73 73 22 0a 20 20 69 66 20 28 20 24 73 74 61 74  ss".  if ( $stat
0e20: 75 73 20 61 6e 64 20 24 72 65 73 70 6f 6e 73 65  us and $response
0e30: 20 3d 7e 20 2f 5e 45 72 72 6f 72 3a 20 53 75 63   =~ /^Error: Suc
0e40: 63 65 73 73 5c 6e 2f 69 20 29 20 7b 0a 20 20 20  cess\n/i ) {.   
0e50: 20 26 73 69 67 5f 65 72 72 6f 72 28 22 55 4e 53   &sig_error("UNS
0e60: 55 43 43 45 53 53 46 55 4c 20 45 58 45 43 55 54  UCCESSFUL EXECUT
0e70: 49 4f 4e 3a 20 53 63 72 69 70 74 2d 66 75 20 65  ION: Script-fu e
0e80: 72 72 6f 72 22 29 3b 0a 20 20 20 20 7d 0a 20 20  rror");.    }.  
0e90: 24 73 74 61 74 75 73 3b 20 0a 20 20 7d 0a 0a 23  $status; .  }..#
0ea0: 20 64 65 66 69 6e 65 20 61 20 53 63 72 69 70 74   define a Script
0eb0: 2d 66 75 20 75 74 69 6c 69 74 79 20 66 75 6e 63  -fu utility func
0ec0: 74 69 6f 6e 20 74 6f 20 73 61 76 65 20 66 72 61  tion to save fra
0ed0: 6d 65 73 20 75 73 69 6e 67 20 74 68 65 20 50 4e  mes using the PN
0ee0: 47 20 6f 72 20 4a 50 47 0a 23 20 63 6f 6d 70 72  G or JPG.# compr
0ef0: 65 73 73 69 6f 6e 20 6c 65 76 65 6c 73 20 73 70  ession levels sp
0f00: 65 63 69 66 69 65 64 20 69 6e 20 27 67 69 6d 70  ecified in 'gimp
0f10: 72 63 27 2e 20 0a 23 20 54 6f 20 73 70 65 63 69  rc'. .# To speci
0f20: 66 79 20 61 20 50 4e 47 20 63 6f 6d 70 72 65 73  fy a PNG compres
0f30: 73 69 6f 6e 20 6c 65 76 65 6c 20 6f 66 20 35 2c  sion level of 5,
0f40: 20 69 6e 63 6c 75 64 65 20 74 68 65 20 66 6f 6c   include the fol
0f50: 6c 6f 77 69 6e 67 20 6c 69 6e 65 0a 23 20 69 6e  lowing line.# in
0f60: 20 67 69 6d 70 72 63 3a 0a 23 20 20 20 28 72 66   gimprc:.#   (rf
0f70: 78 2d 70 6e 67 2d 63 6f 6d 70 72 65 73 73 69 6f  x-png-compressio
0f80: 6e 20 22 35 22 29 20 0a 23 20 49 66 20 6e 6f 74  n "5") .# If not
0f90: 20 73 70 65 63 69 66 69 65 64 20 74 68 65 6e 20   specified then 
0fa0: 61 20 64 65 66 61 75 6c 74 20 6c 65 76 65 6c 20  a default level 
0fb0: 6f 66 20 22 33 22 20 69 73 20 61 73 73 75 6d 65  of "3" is assume
0fc0: 64 2e 0a 23 20 22 33 22 20 69 73 20 61 20 67 6f  d..# "3" is a go
0fd0: 6f 64 20 63 68 6f 69 63 65 20 66 6f 72 20 50 4e  od choice for PN
0fe0: 47 73 20 62 65 63 61 75 73 65 20 68 69 67 68 65  Gs because highe
0ff0: 72 20 6c 65 76 65 6c 73 20 64 6f 75 62 6c 65 20  r levels double 
1000: 74 68 65 20 77 72 69 74 65 0a 23 20 74 69 6d 65  the write.# time
1010: 73 20 77 68 69 6c 65 20 6f 6e 6c 79 20 6f 66 66  s while only off
1020: 65 72 69 6e 67 20 61 62 6f 75 74 20 31 35 25 20  ering about 15% 
1030: 72 65 64 75 63 74 69 6f 6e 20 69 6e 20 66 69 6c  reduction in fil
1040: 65 20 73 69 7a 65 2e 0a 23 20 54 6f 20 73 70 65  e size..# To spe
1050: 63 69 66 79 20 61 20 4a 50 47 20 63 6f 6d 70 72  cify a JPG compr
1060: 65 73 73 69 6f 6e 20 6c 65 76 65 6c 20 6f 66 20  ession level of 
1070: 38 35 2c 20 69 6e 63 6c 75 64 65 20 74 68 65 20  85, include the 
1080: 66 6f 6c 6c 6f 77 69 6e 67 20 6c 69 6e 65 0a 23  following line.#
1090: 20 69 6e 20 67 69 6d 70 72 63 3a 0a 23 20 20 20   in gimprc:.#   
10a0: 28 72 66 78 2d 6a 70 67 2d 63 6f 6d 70 72 65 73  (rfx-jpg-compres
10b0: 73 69 6f 6e 20 22 38 35 22 29 20 0a 23 20 49 66  sion "85") .# If
10c0: 20 6e 6f 74 20 73 70 65 63 69 66 69 65 64 20 74   not specified t
10d0: 68 65 6e 20 61 20 64 65 66 61 75 6c 74 20 6c 65  hen a default le
10e0: 76 65 6c 20 6f 66 20 22 39 33 22 20 69 73 20 61  vel of "93" is a
10f0: 73 73 75 6d 65 64 2e 0a 0a 23 20 4e 4f 54 45 3a  ssumed...# NOTE:
1100: 20 27 72 66 78 2d 73 61 76 65 2d 66 72 61 6d 65   'rfx-save-frame
1110: 27 20 44 45 4c 45 54 45 53 20 74 68 65 20 69 6d  ' DELETES the im
1120: 61 67 65 2e 20 20 0a 26 72 66 78 5f 73 65 6e 64  age.  .&rfx_send
1130: 6d 73 67 28 20 71 71 7b 0a 20 20 28 62 65 67 69  msg( qq{.  (begi
1140: 6e 0a 20 20 20 20 28 64 65 66 69 6e 65 20 72 66  n.    (define rf
1150: 78 2d 63 75 72 74 6d 70 64 69 72 20 22 24 63 75  x-curtmpdir "$cu
1160: 72 74 6d 70 64 69 72 22 29 0a 20 20 20 20 28 64  rtmpdir").    (d
1170: 65 66 69 6e 65 20 72 66 78 2d 69 6d 67 65 78 74  efine rfx-imgext
1180: 20 22 24 69 6d 67 5f 65 78 74 22 29 0a 20 20 20   "$img_ext").   
1190: 20 28 75 6e 6c 65 73 73 20 28 64 65 66 69 6e 65   (unless (define
11a0: 64 3f 20 27 72 66 78 2d 73 61 76 65 2d 66 72 61  d? 'rfx-save-fra
11b0: 6d 65 29 0a 20 20 20 20 20 20 28 64 65 66 69 6e  me).      (defin
11c0: 65 20 72 66 78 2d 70 6e 67 2d 63 6f 6d 70 72 65  e rfx-png-compre
11d0: 73 73 69 6f 6e 20 28 63 61 74 63 68 20 23 66 20  ssion (catch #f 
11e0: 28 67 69 6d 70 2d 67 69 6d 70 72 63 2d 71 75 65  (gimp-gimprc-que
11f0: 72 79 20 22 72 66 78 2d 70 6e 67 2d 63 6f 6d 70  ry "rfx-png-comp
1200: 72 65 73 73 69 6f 6e 22 29 29 29 0a 20 20 20 20  ression"))).    
1210: 20 20 28 73 65 74 21 20 72 66 78 2d 70 6e 67 2d    (set! rfx-png-
1220: 63 6f 6d 70 72 65 73 73 69 6f 6e 20 28 69 66 20  compression (if 
1230: 72 66 78 2d 70 6e 67 2d 63 6f 6d 70 72 65 73 73  rfx-png-compress
1240: 69 6f 6e 0a 20 20 20 20 20 20 20 20 20 20 20 20  ion.            
1250: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1260: 20 20 20 20 20 20 28 73 74 72 69 6e 67 2d 3e 6e        (string->n
1270: 75 6d 62 65 72 20 28 63 61 72 20 72 66 78 2d 70  umber (car rfx-p
1280: 6e 67 2d 63 6f 6d 70 72 65 73 73 69 6f 6e 29 29  ng-compression))
1290: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
12a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12b0: 20 20 20 33 20 29 29 0a 20 20 20 20 20 20 28 64     3 )).      (d
12c0: 65 66 69 6e 65 20 72 66 78 2d 6a 70 67 2d 63 6f  efine rfx-jpg-co
12d0: 6d 70 72 65 73 73 69 6f 6e 20 28 63 61 74 63 68  mpression (catch
12e0: 20 23 66 20 28 67 69 6d 70 2d 67 69 6d 70 72 63   #f (gimp-gimprc
12f0: 2d 71 75 65 72 79 20 22 72 66 78 2d 6a 70 67 2d  -query "rfx-jpg-
1300: 63 6f 6d 70 72 65 73 73 69 6f 6e 22 29 29 29 0a  compression"))).
1310: 20 20 20 20 20 20 28 73 65 74 21 20 72 66 78 2d        (set! rfx-
1320: 6a 70 67 2d 63 6f 6d 70 72 65 73 73 69 6f 6e 20  jpg-compression 
1330: 28 69 66 20 72 66 78 2d 6a 70 67 2d 63 6f 6d 70  (if rfx-jpg-comp
1340: 72 65 73 73 69 6f 6e 0a 20 20 20 20 20 20 20 20  ression.        
1350: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1360: 20 20 20 20 20 20 20 20 20 20 28 73 74 72 69 6e            (strin
1370: 67 2d 3e 6e 75 6d 62 65 72 20 28 63 61 72 20 72  g->number (car r
1380: 66 78 2d 6a 70 67 2d 63 6f 6d 70 72 65 73 73 69  fx-jpg-compressi
1390: 6f 6e 29 29 0a 20 20 20 20 20 20 20 20 20 20 20  on)).           
13a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13b0: 20 20 20 20 20 20 20 39 33 20 29 29 0a 20 20 20         93 )).   
13c0: 20 20 20 28 64 65 66 69 6e 65 20 28 72 66 78 2d     (define (rfx-
13d0: 73 61 76 65 2d 66 72 61 6d 65 20 69 6d 61 67 65  save-frame image
13e0: 20 62 61 73 65 6e 61 6d 65 29 0a 20 20 20 20 20   basename).     
13f0: 20 20 20 28 6c 65 74 20 28 28 66 69 6c 65 6e 61     (let ((filena
1400: 6d 65 20 28 73 74 72 69 6e 67 2d 61 70 70 65 6e  me (string-appen
1410: 64 20 72 66 78 2d 63 75 72 74 6d 70 64 69 72 20  d rfx-curtmpdir 
1420: 44 49 52 2d 53 45 50 41 52 41 54 4f 52 20 62 61  DIR-SEPARATOR ba
1430: 73 65 6e 61 6d 65 29 29 0a 20 20 20 20 20 20 20  sename)).       
1440: 20 20 20 20 20 20 20 28 6c 61 79 65 72 20 28 63         (layer (c
1450: 61 72 20 28 67 69 6d 70 2d 69 6d 61 67 65 2d 67  ar (gimp-image-g
1460: 65 74 2d 61 63 74 69 76 65 2d 6c 61 79 65 72 20  et-active-layer 
1470: 69 6d 61 67 65 29 29 29 20 29 0a 20 20 20 20 20  image))) ).     
1480: 20 20 20 20 20 28 69 66 20 28 73 74 72 69 6e 67       (if (string
1490: 2d 63 69 3d 3f 20 72 66 78 2d 69 6d 67 65 78 74  -ci=? rfx-imgext
14a0: 20 22 2e 6a 70 67 22 29 0a 20 20 20 20 20 20 20   ".jpg").       
14b0: 20 20 20 20 20 28 62 65 67 69 6e 0a 20 20 20 20       (begin.    
14c0: 20 20 20 20 20 20 20 20 20 20 28 67 69 6d 70 2d            (gimp-
14d0: 63 6f 6e 74 65 78 74 2d 70 75 73 68 29 0a 20 20  context-push).  
14e0: 20 20 20 20 20 20 20 20 20 20 20 20 28 67 69 6d              (gim
14f0: 70 2d 63 6f 6e 74 65 78 74 2d 73 65 74 2d 62 61  p-context-set-ba
1500: 63 6b 67 72 6f 75 6e 64 20 27 28 36 20 36 20 36  ckground '(6 6 6
1510: 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )).             
1520: 20 28 6c 65 74 20 6c 6f 6f 70 20 28 28 6c 61 79   (let loop ((lay
1530: 65 72 73 20 28 76 65 63 74 6f 72 2d 3e 6c 69 73  ers (vector->lis
1540: 74 20 28 63 61 64 72 20 28 67 69 6d 70 2d 69 6d  t (cadr (gimp-im
1550: 61 67 65 2d 67 65 74 2d 6c 61 79 65 72 73 20 69  age-get-layers i
1560: 6d 61 67 65 29 29 29 29 29 0a 20 20 20 20 20 20  mage))))).      
1570: 20 20 20 20 20 20 20 20 20 20 28 75 6e 6c 65 73            (unles
1580: 73 20 28 6e 75 6c 6c 3f 20 6c 61 79 65 72 73 29  s (null? layers)
1590: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
15a0: 20 20 20 28 69 66 20 28 3d 20 28 63 61 72 20 6c     (if (= (car l
15b0: 61 79 65 72 73 29 20 6c 61 79 65 72 29 0a 20 20  ayers) layer).  
15c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15d0: 20 20 28 67 69 6d 70 2d 64 72 61 77 61 62 6c 65    (gimp-drawable
15e0: 2d 73 65 74 2d 76 69 73 69 62 6c 65 20 6c 61 79  -set-visible lay
15f0: 65 72 20 54 52 55 45 29 0a 20 20 20 20 20 20 20  er TRUE).       
1600: 20 20 20 20 20 20 20 20 20 20 20 20 20 28 67 69               (gi
1610: 6d 70 2d 64 72 61 77 61 62 6c 65 2d 73 65 74 2d  mp-drawable-set-
1620: 76 69 73 69 62 6c 65 20 28 63 61 72 20 6c 61 79  visible (car lay
1630: 65 72 73 29 20 46 41 4c 53 45 29 20 29 0a 20 20  ers) FALSE) ).  
1640: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1650: 28 6c 6f 6f 70 20 28 63 64 72 20 6c 61 79 65 72  (loop (cdr layer
1660: 73 29 29 20 29 29 0a 20 20 20 20 20 20 20 20 20  s)) )).         
1670: 20 20 20 20 20 28 73 65 74 21 20 6c 61 79 65 72       (set! layer
1680: 20 28 63 61 72 20 28 67 69 6d 70 2d 69 6d 61 67   (car (gimp-imag
1690: 65 2d 66 6c 61 74 74 65 6e 20 69 6d 61 67 65 29  e-flatten image)
16a0: 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )).             
16b0: 20 28 66 69 6c 65 2d 6a 70 65 67 2d 73 61 76 65   (file-jpeg-save
16c0: 20 52 55 4e 2d 4e 4f 4e 49 4e 54 45 52 41 43 54   RUN-NONINTERACT
16d0: 49 56 45 20 0a 20 20 20 20 20 20 20 20 20 20 20  IVE .           
16e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16f0: 20 20 20 69 6d 61 67 65 20 0a 20 20 20 20 20 20     image .      
1700: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1710: 20 20 20 20 20 20 20 20 6c 61 79 65 72 0a 20 20          layer.  
1720: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1730: 20 20 20 20 20 20 20 20 20 20 20 20 66 69 6c 65              file
1740: 6e 61 6d 65 20 0a 20 20 20 20 20 20 20 20 20 20  name .          
1750: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1760: 20 20 20 20 66 69 6c 65 6e 61 6d 65 20 0a 20 20      filename .  
1770: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1780: 20 20 20 20 20 20 20 20 20 20 20 20 28 2f 20 72              (/ r
1790: 66 78 2d 6a 70 67 2d 63 6f 6d 70 72 65 73 73 69  fx-jpg-compressi
17a0: 6f 6e 20 31 30 30 29 0a 20 20 20 20 20 20 20 20  on 100).        
17b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17c0: 20 20 20 20 20 20 30 20 3b 20 73 6d 6f 6f 74 68        0 ; smooth
17d0: 69 6e 67 20 0a 20 20 20 20 20 20 20 20 20 20 20  ing .           
17e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17f0: 20 20 20 31 20 3b 20 6f 70 74 69 6d 69 7a 65 20     1 ; optimize 
1800: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1810: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 31                 1
1820: 20 3b 20 70 72 6f 67 72 65 73 73 69 76 65 20 0a   ; progressive .
1830: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1840: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 22                ""
1850: 20 3b 20 63 6f 6d 6d 65 6e 74 20 0a 20 20 20 20   ; comment .    
1860: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1870: 20 20 20 20 20 20 20 20 20 20 30 20 3b 20 73 75            0 ; su
1880: 62 73 6d 70 20 28 30 2d 34 29 0a 20 20 20 20 20  bsmp (0-4).     
1890: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18a0: 20 20 20 20 20 20 20 20 20 31 20 3b 20 62 61 73           1 ; bas
18b0: 65 6c 69 6e 65 20 0a 20 20 20 20 20 20 20 20 20  eline .         
18c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18d0: 20 20 20 20 20 30 20 3b 20 72 65 73 74 61 72 74       0 ; restart
18e0: 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20   .              
18f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1900: 30 20 3b 64 63 74 20 0a 20 20 20 20 20 20 20 20  0 ;dct .        
1910: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1920: 20 20 20 20 20 20 29 0a 20 20 20 20 20 20 20 20        ).        
1930: 20 20 20 20 20 20 28 67 69 6d 70 2d 63 6f 6e 74        (gimp-cont
1940: 65 78 74 2d 70 6f 70 29 20 29 0a 20 20 20 20 20  ext-pop) ).     
1950: 20 20 20 20 20 20 20 28 62 65 67 69 6e 0a 20 20         (begin.  
1960: 20 20 20 20 20 20 20 20 20 20 20 20 28 75 6e 6c              (unl
1970: 65 73 73 20 28 7a 65 72 6f 3f 20 28 63 61 72 20  ess (zero? (car 
1980: 28 67 69 6d 70 2d 69 6d 61 67 65 2d 62 61 73 65  (gimp-image-base
1990: 2d 74 79 70 65 20 69 6d 61 67 65 29 29 29 0a 20  -type image))). 
19a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28                 (
19b0: 67 69 6d 70 2d 69 6d 61 67 65 2d 63 6f 6e 76 65  gimp-image-conve
19c0: 72 74 2d 72 67 62 20 69 6d 61 67 65 29 20 29 0a  rt-rgb image) ).
19d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 66                (f
19e0: 69 6c 65 2d 70 6e 67 2d 73 61 76 65 32 20 52 55  ile-png-save2 RU
19f0: 4e 2d 4e 4f 4e 49 4e 54 45 52 41 43 54 49 56 45  N-NONINTERACTIVE
1a00: 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20   .              
1a10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a20: 69 6d 61 67 65 20 0a 20 20 20 20 20 20 20 20 20  image .         
1a30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a40: 20 20 20 20 20 6c 61 79 65 72 0a 20 20 20 20 20       layer.     
1a50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a60: 20 20 20 20 20 20 20 20 20 66 69 6c 65 6e 61 6d           filenam
1a70: 65 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e .             
1a80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a90: 20 66 69 6c 65 6e 61 6d 65 20 0a 20 20 20 20 20   filename .     
1aa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ab0: 20 20 20 20 20 20 20 20 20 46 41 4c 53 45 20 3b           FALSE ;
1ac0: 20 69 6e 74 65 72 6c 61 63 65 0a 20 20 20 20 20   interlace.     
1ad0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ae0: 20 20 20 20 20 20 20 20 20 72 66 78 2d 70 6e 67           rfx-png
1af0: 2d 63 6f 6d 70 72 65 73 73 69 6f 6e 0a 20 20 20  -compression.   
1b00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b10: 20 20 20 20 20 20 20 20 20 20 20 46 41 4c 53 45             FALSE
1b20: 20 3b 20 62 6b 67 64 0a 20 20 20 20 20 20 20 20   ; bkgd.        
1b30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b40: 20 20 20 20 20 20 28 63 61 72 20 28 67 69 6d 70        (car (gimp
1b50: 2d 64 72 61 77 61 62 6c 65 2d 68 61 73 2d 61 6c  -drawable-has-al
1b60: 70 68 61 20 6c 61 79 65 72 29 29 0a 20 20 20 20  pha layer)).    
1b70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b80: 20 20 20 20 20 20 20 20 20 20 46 41 4c 53 45 20            FALSE 
1b90: 3b 20 6f 66 66 73 0a 20 20 20 20 20 20 20 20 20  ; offs.         
1ba0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bb0: 20 20 20 20 20 46 41 4c 53 45 20 3b 20 70 68 79       FALSE ; phy
1bc0: 73 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  s.              
1bd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1be0: 46 41 4c 53 45 20 3b 20 74 69 6d 65 0a 20 20 20  FALSE ; time.   
1bf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c00: 20 20 20 20 20 20 20 20 20 20 20 54 52 55 45 20             TRUE 
1c10: 20 3b 20 63 6f 6d 6d 65 6e 74 0a 20 20 20 20 20   ; comment.     
1c20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c30: 20 20 20 20 20 20 20 20 20 46 41 4c 53 45 20 3b           FALSE ;
1c40: 20 73 76 74 72 61 6e 73 0a 20 20 20 20 20 20 20   svtrans.       
1c50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c60: 20 20 20 20 20 20 20 29 29 29 0a 20 20 20 20 20         ))).     
1c70: 20 20 20 20 20 28 67 69 6d 70 2d 69 6d 61 67 65       (gimp-image
1c80: 2d 64 65 6c 65 74 65 20 69 6d 61 67 65 29 20 29  -delete image) )
1c90: 29 29 0a 20 20 28 64 65 66 69 6e 65 20 28 6d 75  )).  (define (mu
1ca0: 6c 74 69 70 6c 79 2d 6c 61 79 65 72 73 20 69 6d  ltiply-layers im
1cb0: 61 67 65 20 6c 69 73 29 0a 20 20 20 20 28 6c 65  age lis).    (le
1cc0: 74 2a 20 28 28 6e 65 77 2d 6c 61 79 65 72 73 20  t* ((new-layers 
1cd0: 28 6d 61 70 20 28 6c 61 6d 62 64 61 20 28 78 29  (map (lambda (x)
1ce0: 20 28 63 61 72 20 28 67 69 6d 70 2d 6c 61 79 65   (car (gimp-laye
1cf0: 72 2d 63 6f 70 79 20 78 20 46 41 4c 53 45 29 29  r-copy x FALSE))
1d00: 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ).              
1d10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6c 69                li
1d20: 73 20 29 29 20 29 0a 20 20 20 20 20 20 28 67 69  s )) ).      (gi
1d30: 6d 70 2d 69 6d 61 67 65 2d 61 64 64 2d 6c 61 79  mp-image-add-lay
1d40: 65 72 20 69 6d 61 67 65 20 28 63 61 72 20 6e 65  er image (car ne
1d50: 77 2d 6c 61 79 65 72 73 29 20 2d 31 29 0a 20 20  w-layers) -1).  
1d60: 20 20 20 20 28 6c 65 74 20 6c 6f 6f 70 20 28 28      (let loop ((
1d70: 6c 61 79 65 72 73 20 28 63 64 72 20 6e 65 77 2d  layers (cdr new-
1d80: 6c 61 79 65 72 73 29 29 0a 20 20 20 20 20 20 20  layers)).       
1d90: 20 20 20 20 20 20 20 20 20 20 28 6e 65 77 2d 6c            (new-l
1da0: 61 79 65 72 20 28 63 61 72 20 6e 65 77 2d 6c 61  ayer (car new-la
1db0: 79 65 72 73 29 29 20 29 0a 20 20 20 20 20 20 20  yers)) ).       
1dc0: 20 28 69 66 20 28 6e 75 6c 6c 3f 20 6c 61 79 65   (if (null? laye
1dd0: 72 73 29 0a 20 20 20 20 20 20 20 20 20 20 6e 65  rs).          ne
1de0: 77 2d 6c 61 79 65 72 0a 20 20 20 20 20 20 20 20  w-layer.        
1df0: 20 20 28 62 65 67 69 6e 0a 20 20 20 20 20 20 20    (begin.       
1e00: 20 20 20 20 20 28 67 69 6d 70 2d 69 6d 61 67 65       (gimp-image
1e10: 2d 61 64 64 2d 6c 61 79 65 72 20 69 6d 61 67 65  -add-layer image
1e20: 20 28 63 61 72 20 6c 61 79 65 72 73 29 20 2d 31   (car layers) -1
1e30: 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 28 67  ).            (g
1e40: 69 6d 70 2d 6c 61 79 65 72 2d 73 65 74 2d 6d 6f  imp-layer-set-mo
1e50: 64 65 20 28 63 61 72 20 6c 61 79 65 72 73 29 20  de (car layers) 
1e60: 4d 55 4c 54 49 50 4c 59 2d 4d 4f 44 45 29 0a 20  MULTIPLY-MODE). 
1e70: 20 20 20 20 20 20 20 20 20 20 20 28 6c 6f 6f 70             (loop
1e80: 20 28 63 64 72 20 6c 61 79 65 72 73 29 0a 20 20   (cdr layers).  
1e90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ea0: 28 63 61 72 20 28 67 69 6d 70 2d 69 6d 61 67 65  (car (gimp-image
1eb0: 2d 6d 65 72 67 65 2d 64 6f 77 6e 20 69 6d 61 67  -merge-down imag
1ec0: 65 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e.              
1ed0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ee0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ef0: 28 63 61 72 20 6c 61 79 65 72 73 29 0a 20 20 20  (car layers).   
1f00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f20: 20 20 20 20 20 20 20 20 20 20 20 45 58 50 41 4e             EXPAN
1f30: 44 2d 41 53 2d 4e 45 43 45 53 53 41 52 59 20 29  D-AS-NECESSARY )
1f40: 29 29 29 29 29 29 29 29 0a 20 20 7d 0a 20 20 29  )))))))).  }.  )
1f50: 3b 0a 3c 2f 70 72 65 3e 0a 0a 3c 6c 6f 6f 70 3e  ;.</pre>..<loop>
1f60: 0a 23 20 24 70 30 20 2d 20 41 6d 6f 75 6e 74 20  .# $p0 - Amount 
1f70: 28 30 2d 31 30 30 29 20 6f 66 20 74 68 65 20 65  (0-100) of the e
1f80: 66 66 65 63 74 0a 0a 26 72 66 78 5f 73 65 6e 64  ffect..&rfx_send
1f90: 6d 73 67 20 28 0a 20 20 71 71 7b 20 20 20 20 20  msg (.  qq{     
1fa0: 20 20 20 0a 20 20 20 20 28 6c 65 74 2a 20 28 28     .    (let* ((
1fb0: 69 6e 70 75 74 2d 66 69 6c 65 20 28 73 74 72 69  input-file (stri
1fc0: 6e 67 2d 61 70 70 65 6e 64 20 22 24 63 75 72 74  ng-append "$curt
1fd0: 6d 70 64 69 72 22 20 44 49 52 2d 53 45 50 41 52  mpdir" DIR-SEPAR
1fe0: 41 54 4f 52 20 22 24 69 6e 22 29 29 0a 20 20 20  ATOR "$in")).   
1ff0: 20 20 20 20 20 20 20 20 28 69 6d 61 67 65 20 28          (image (
2000: 63 61 72 20 28 67 69 6d 70 2d 66 69 6c 65 2d 6c  car (gimp-file-l
2010: 6f 61 64 20 52 55 4e 2d 4e 4f 4e 49 4e 54 45 52  oad RUN-NONINTER
2020: 41 43 54 49 56 45 20 69 6e 70 75 74 2d 66 69 6c  ACTIVE input-fil
2030: 65 20 69 6e 70 75 74 2d 66 69 6c 65 29 29 29 0a  e input-file))).
2040: 20 20 20 20 20 20 20 20 20 20 20 28 6c 61 79 65             (laye
2050: 72 20 28 63 61 72 20 28 67 69 6d 70 2d 69 6d 61  r (car (gimp-ima
2060: 67 65 2d 67 65 74 2d 61 63 74 69 76 65 2d 6c 61  ge-get-active-la
2070: 79 65 72 20 69 6d 61 67 65 29 29 29 20 29 0a 20  yer image))) ). 
2080: 20 20 20 20 20 28 67 69 6d 70 2d 69 6d 61 67 65       (gimp-image
2090: 2d 75 6e 64 6f 2d 64 69 73 61 62 6c 65 20 69 6d  -undo-disable im
20a0: 61 67 65 29 0a 20 20 20 20 20 20 28 6c 65 74 20  age).      (let 
20b0: 28 28 72 65 64 2d 6d 61 74 74 65 20 28 63 61 72  ((red-matte (car
20c0: 20 28 67 69 6d 70 2d 6c 61 79 65 72 2d 63 6f 70   (gimp-layer-cop
20d0: 79 20 6c 61 79 65 72 20 54 52 55 45 29 29 29 0a  y layer TRUE))).
20e0: 20 20 20 20 20 20 20 20 20 20 20 20 28 67 72 65              (gre
20f0: 65 6e 2d 6d 61 74 74 65 20 28 63 61 72 20 28 67  en-matte (car (g
2100: 69 6d 70 2d 6c 61 79 65 72 2d 63 6f 70 79 20 6c  imp-layer-copy l
2110: 61 79 65 72 20 54 52 55 45 29 29 29 0a 20 20 20  ayer TRUE))).   
2120: 20 20 20 20 20 20 20 20 20 28 62 6c 75 65 2d 6d           (blue-m
2130: 61 74 74 65 20 28 63 61 72 20 28 67 69 6d 70 2d  atte (car (gimp-
2140: 6c 61 79 65 72 2d 63 6f 70 79 20 6c 61 79 65 72  layer-copy layer
2150: 20 54 52 55 45 29 29 29 0a 20 20 20 20 20 20 20   TRUE))).       
2160: 20 20 20 20 20 28 74 65 63 68 6e 69 63 6f 6c 6f       (technicolo
2170: 72 2d 6c 61 79 65 72 20 30 29 20 29 0a 20 20 20  r-layer 0) ).   
2180: 20 20 20 20 20 28 67 69 6d 70 2d 69 6d 61 67 65       (gimp-image
2190: 2d 61 64 64 2d 6c 61 79 65 72 20 69 6d 61 67 65  -add-layer image
21a0: 20 72 65 64 2d 6d 61 74 74 65 20 30 29 20 20 20   red-matte 0)   
21b0: 0a 20 20 20 20 20 20 20 20 28 70 6c 75 67 2d 69  .        (plug-i
21c0: 6e 2d 63 6f 6c 6f 72 73 2d 63 68 61 6e 6e 65 6c  n-colors-channel
21d0: 2d 6d 69 78 65 72 20 52 55 4e 2d 4e 4f 4e 49 4e  -mixer RUN-NONIN
21e0: 54 45 52 41 43 54 49 56 45 0a 20 20 20 20 20 20  TERACTIVE.      
21f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2200: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6d                im
2210: 61 67 65 0a 20 20 20 20 20 20 20 20 20 20 20 20  age.            
2220: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2230: 20 20 20 20 20 20 20 20 72 65 64 2d 6d 61 74 74          red-matt
2240: 65 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e.              
2250: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2260: 20 20 20 20 20 20 46 41 4c 53 45 0a 20 20 20 20        FALSE.    
2270: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2280: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2290: 20 31 2e 30 20 2d 30 2e 35 20 2d 30 2e 35 0a 20   1.0 -0.5 -0.5. 
22a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22c0: 20 20 20 20 31 2e 30 20 2d 30 2e 35 20 2d 30 2e      1.0 -0.5 -0.
22d0: 35 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  5.              
22e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22f0: 20 20 20 20 20 20 20 31 2e 30 20 2d 30 2e 35 20         1.0 -0.5 
2300: 2d 30 2e 35 20 29 0a 20 20 20 20 20 20 20 20 28  -0.5 ).        (
2310: 67 69 6d 70 2d 69 6e 76 65 72 74 20 72 65 64 2d  gimp-invert red-
2320: 6d 61 74 74 65 29 0a 20 20 20 20 20 20 20 20 28  matte).        (
2330: 67 69 6d 70 2d 69 6d 61 67 65 2d 61 64 64 2d 6c  gimp-image-add-l
2340: 61 79 65 72 20 69 6d 61 67 65 20 67 72 65 65 6e  ayer image green
2350: 2d 6d 61 74 74 65 20 2d 31 29 0a 20 20 20 20 20  -matte -1).     
2360: 20 20 20 28 70 6c 75 67 2d 69 6e 2d 63 6f 6c 6f     (plug-in-colo
2370: 72 73 2d 63 68 61 6e 6e 65 6c 2d 6d 69 78 65 72  rs-channel-mixer
2380: 20 52 55 4e 2d 4e 4f 4e 49 4e 54 45 52 41 43 54   RUN-NONINTERACT
2390: 49 56 45 0a 20 20 20 20 20 20 20 20 20 20 20 20  IVE.            
23a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23b0: 20 20 20 20 20 20 20 20 20 20 69 6d 61 67 65 0a            image.
23c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23e0: 20 20 20 20 20 20 67 72 65 65 6e 2d 6d 61 74 74        green-matt
23f0: 65 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e.              
2400: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2410: 20 20 20 20 20 20 20 20 46 41 4c 53 45 0a 20 20          FALSE.  
2420: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2430: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2440: 20 20 20 20 2d 30 2e 35 20 20 31 2e 30 20 2d 30      -0.5  1.0 -0
2450: 2e 35 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  .5.             
2460: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2470: 20 20 20 20 20 20 20 20 20 2d 30 2e 35 20 20 31           -0.5  1
2480: 2e 30 20 2d 30 2e 35 0a 20 20 20 20 20 20 20 20  .0 -0.5.        
2490: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2d 30                -0
24b0: 2e 35 20 20 31 2e 30 20 2d 30 2e 35 20 29 0a 20  .5  1.0 -0.5 ). 
24c0: 20 20 20 20 20 20 20 28 67 69 6d 70 2d 69 6e 76         (gimp-inv
24d0: 65 72 74 20 67 72 65 65 6e 2d 6d 61 74 74 65 29  ert green-matte)
24e0: 0a 20 20 20 20 20 20 20 20 28 67 69 6d 70 2d 69  .        (gimp-i
24f0: 6d 61 67 65 2d 61 64 64 2d 6c 61 79 65 72 20 69  mage-add-layer i
2500: 6d 61 67 65 20 62 6c 75 65 2d 6d 61 74 74 65 20  mage blue-matte 
2510: 2d 31 29 0a 20 20 20 20 20 20 20 20 28 70 6c 75  -1).        (plu
2520: 67 2d 69 6e 2d 63 6f 6c 6f 72 73 2d 63 68 61 6e  g-in-colors-chan
2530: 6e 65 6c 2d 6d 69 78 65 72 20 52 55 4e 2d 4e 4f  nel-mixer RUN-NO
2540: 4e 49 4e 54 45 52 41 43 54 49 56 45 0a 20 20 20  NINTERACTIVE.   
2550: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2560: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2570: 20 20 20 69 6d 61 67 65 0a 20 20 20 20 20 20 20     image.       
2580: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2590: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62                 b
25a0: 6c 75 65 2d 6d 61 74 74 65 0a 20 20 20 20 20 20  lue-matte.      
25b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25d0: 46 41 4c 53 45 0a 20 20 20 20 20 20 20 20 20 20  FALSE.          
25e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25f0: 20 20 20 20 20 20 20 20 20 20 20 20 2d 30 2e 35              -0.5
2600: 20 2d 30 2e 35 20 20 31 2e 30 0a 20 20 20 20 20   -0.5  1.0.     
2610: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2620: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2630: 20 2d 30 2e 35 20 2d 30 2e 35 20 20 31 2e 30 0a   -0.5 -0.5  1.0.
2640: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2650: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2660: 20 20 20 20 20 20 2d 30 2e 35 20 2d 30 2e 35 20        -0.5 -0.5 
2670: 20 31 2e 30 20 29 0a 20 20 20 20 20 20 20 20 28   1.0 ).        (
2680: 67 69 6d 70 2d 69 6e 76 65 72 74 20 62 6c 75 65  gimp-invert blue
2690: 2d 6d 61 74 74 65 29 0a 20 20 20 20 20 20 20 20  -matte).        
26a0: 28 6c 65 74 2a 20 28 28 72 65 64 20 20 20 28 6d  (let* ((red   (m
26b0: 75 6c 74 69 70 6c 79 2d 6c 61 79 65 72 73 20 69  ultiply-layers i
26c0: 6d 61 67 65 20 28 6c 69 73 74 20 6c 61 79 65 72  mage (list layer
26d0: 20 67 72 65 65 6e 2d 6d 61 74 74 65 20 62 6c 75   green-matte blu
26e0: 65 2d 6d 61 74 74 65 29 29 29 0a 20 20 20 20 20  e-matte))).     
26f0: 20 20 20 20 20 20 20 20 20 20 28 67 72 65 65 6e            (green
2700: 20 28 6d 75 6c 74 69 70 6c 79 2d 6c 61 79 65 72   (multiply-layer
2710: 73 20 69 6d 61 67 65 20 28 6c 69 73 74 20 6c 61  s image (list la
2720: 79 65 72 20 72 65 64 2d 6d 61 74 74 65 20 20 20  yer red-matte   
2730: 62 6c 75 65 2d 6d 61 74 74 65 29 29 29 0a 20 20  blue-matte))).  
2740: 20 20 20 20 20 20 20 20 20 20 20 20 20 28 62 6c               (bl
2750: 75 65 20 20 28 6d 75 6c 74 69 70 6c 79 2d 6c 61  ue  (multiply-la
2760: 79 65 72 73 20 69 6d 61 67 65 20 28 6c 69 73 74  yers image (list
2770: 20 6c 61 79 65 72 20 72 65 64 2d 6d 61 74 74 65   layer red-matte
2780: 20 20 20 67 72 65 65 6e 2d 6d 61 74 74 65 29 29     green-matte))
2790: 29 20 29 0a 20 20 20 20 20 20 20 20 20 20 28 70  ) ).          (p
27a0: 6c 75 67 2d 69 6e 2d 63 6f 6c 6f 72 73 2d 63 68  lug-in-colors-ch
27b0: 61 6e 6e 65 6c 2d 6d 69 78 65 72 20 52 55 4e 2d  annel-mixer RUN-
27c0: 4e 4f 4e 49 4e 54 45 52 41 43 54 49 56 45 0a 20  NONINTERACTIVE. 
27d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27f0: 20 20 20 20 20 20 20 69 6d 61 67 65 0a 20 20 20         image.   
2800: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2810: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2820: 20 20 20 20 20 72 65 64 0a 20 20 20 20 20 20 20       red.       
2830: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2840: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2850: 20 46 41 4c 53 45 0a 20 20 20 20 20 20 20 20 20   FALSE.         
2860: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2870: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2880: 31 2e 30 20 20 30 2e 30 20 20 30 2e 30 0a 20 20  1.0  0.0  0.0.  
2890: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28b0: 20 20 20 20 20 20 20 30 2e 30 20 20 30 2e 30 20         0.0  0.0 
28c0: 20 30 2e 30 0a 20 20 20 20 20 20 20 20 20 20 20   0.0.           
28d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 30 2e                0.
28f0: 30 20 20 30 2e 30 20 20 30 2e 30 20 29 0a 20 20  0  0.0  0.0 ).  
2900: 20 20 20 20 20 20 20 20 28 70 6c 75 67 2d 69 6e          (plug-in
2910: 2d 63 6f 6c 6f 72 73 2d 63 68 61 6e 6e 65 6c 2d  -colors-channel-
2920: 6d 69 78 65 72 20 52 55 4e 2d 4e 4f 4e 49 4e 54  mixer RUN-NONINT
2930: 45 52 41 43 54 49 56 45 0a 20 20 20 20 20 20 20  ERACTIVE.       
2940: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2950: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2960: 20 69 6d 61 67 65 0a 20 20 20 20 20 20 20 20 20   image.         
2970: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2980: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67                 g
2990: 72 65 65 6e 0a 20 20 20 20 20 20 20 20 20 20 20  reen.           
29a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 46 41 4c               FAL
29c0: 53 45 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  SE.             
29d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29e0: 20 20 20 20 20 20 20 20 20 20 20 20 30 2e 30 20              0.0 
29f0: 20 30 2e 30 20 20 30 2e 30 0a 20 20 20 20 20 20   0.0  0.0.      
2a00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a20: 20 20 20 30 2e 30 20 20 31 2e 30 20 20 30 2e 30     0.0  1.0  0.0
2a30: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2a40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a50: 20 20 20 20 20 20 20 20 20 20 30 2e 30 20 20 30            0.0  0
2a60: 2e 30 20 20 30 2e 30 20 29 0a 20 20 20 20 20 20  .0  0.0 ).      
2a70: 20 20 20 20 28 67 69 6d 70 2d 6c 61 79 65 72 2d      (gimp-layer-
2a80: 73 65 74 2d 6d 6f 64 65 20 67 72 65 65 6e 20 41  set-mode green A
2a90: 44 44 49 54 49 4f 4e 2d 4d 4f 44 45 29 0a 20 20  DDITION-MODE).  
2aa0: 20 20 20 20 20 20 20 20 28 67 69 6d 70 2d 69 6d          (gimp-im
2ab0: 61 67 65 2d 6d 65 72 67 65 2d 64 6f 77 6e 20 69  age-merge-down i
2ac0: 6d 61 67 65 20 67 72 65 65 6e 20 45 58 50 41 4e  mage green EXPAN
2ad0: 44 2d 41 53 2d 4e 45 43 45 53 53 41 52 59 29 0a  D-AS-NECESSARY).
2ae0: 20 20 20 20 20 20 20 20 20 20 28 70 6c 75 67 2d            (plug-
2af0: 69 6e 2d 63 6f 6c 6f 72 73 2d 63 68 61 6e 6e 65  in-colors-channe
2b00: 6c 2d 6d 69 78 65 72 20 52 55 4e 2d 4e 4f 4e 49  l-mixer RUN-NONI
2b10: 4e 54 45 52 41 43 54 49 56 45 0a 20 20 20 20 20  NTERACTIVE.     
2b20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b40: 20 20 20 69 6d 61 67 65 0a 20 20 20 20 20 20 20     image.       
2b50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b70: 20 62 6c 75 65 0a 20 20 20 20 20 20 20 20 20 20   blue.          
2b80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46 41                FA
2ba0: 4c 53 45 0a 20 20 20 20 20 20 20 20 20 20 20 20  LSE.            
2bb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 30 2e 30               0.0
2bd0: 20 20 30 2e 30 20 20 30 2e 30 0a 20 20 20 20 20    0.0  0.0.     
2be0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c00: 20 20 20 20 30 2e 30 20 20 30 2e 30 20 20 30 2e      0.0  0.0  0.
2c10: 30 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  0.              
2c20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c30: 20 20 20 20 20 20 20 20 20 20 20 30 2e 30 20 20             0.0  
2c40: 30 2e 30 20 20 31 2e 30 20 29 0a 20 20 20 20 20  0.0  1.0 ).     
2c50: 20 20 20 20 20 28 67 69 6d 70 2d 6c 61 79 65 72       (gimp-layer
2c60: 2d 73 65 74 2d 6d 6f 64 65 20 62 6c 75 65 20 41  -set-mode blue A
2c70: 44 44 49 54 49 4f 4e 2d 4d 4f 44 45 29 0a 20 20  DDITION-MODE).  
2c80: 20 20 20 20 20 20 20 20 28 73 65 74 21 20 74 65          (set! te
2c90: 63 68 6e 69 63 6f 6c 6f 72 2d 6c 61 79 65 72 20  chnicolor-layer 
2ca0: 28 63 61 72 20 28 67 69 6d 70 2d 69 6d 61 67 65  (car (gimp-image
2cb0: 2d 6d 65 72 67 65 2d 64 6f 77 6e 20 69 6d 61 67  -merge-down imag
2cc0: 65 20 62 6c 75 65 20 45 58 50 41 4e 44 2d 41 53  e blue EXPAND-AS
2cd0: 2d 4e 45 43 45 53 53 41 52 59 29 29 29 0a 20 20  -NECESSARY))).  
2ce0: 20 20 20 20 20 20 20 20 29 0a 20 20 20 20 20 20          ).      
2cf0: 20 20 28 67 69 6d 70 2d 69 6d 61 67 65 2d 72 65    (gimp-image-re
2d00: 6d 6f 76 65 2d 6c 61 79 65 72 20 69 6d 61 67 65  move-layer image
2d10: 20 72 65 64 2d 6d 61 74 74 65 29 0a 20 20 20 20   red-matte).    
2d20: 20 20 20 20 28 67 69 6d 70 2d 69 6d 61 67 65 2d      (gimp-image-
2d30: 72 65 6d 6f 76 65 2d 6c 61 79 65 72 20 69 6d 61  remove-layer ima
2d40: 67 65 20 67 72 65 65 6e 2d 6d 61 74 74 65 29 0a  ge green-matte).
2d50: 20 20 20 20 20 20 20 20 28 67 69 6d 70 2d 69 6d          (gimp-im
2d60: 61 67 65 2d 72 65 6d 6f 76 65 2d 6c 61 79 65 72  age-remove-layer
2d70: 20 69 6d 61 67 65 20 62 6c 75 65 2d 6d 61 74 74   image blue-matt
2d80: 65 29 0a 20 20 20 20 20 20 20 20 28 67 69 6d 70  e).        (gimp
2d90: 2d 6c 61 79 65 72 2d 73 65 74 2d 6f 70 61 63 69  -layer-set-opaci
2da0: 74 79 20 74 65 63 68 6e 69 63 6f 6c 6f 72 2d 6c  ty technicolor-l
2db0: 61 79 65 72 20 24 70 30 29 0a 20 20 20 20 20 20  ayer $p0).      
2dc0: 20 20 28 67 69 6d 70 2d 69 6d 61 67 65 2d 6d 65    (gimp-image-me
2dd0: 72 67 65 2d 64 6f 77 6e 20 69 6d 61 67 65 20 74  rge-down image t
2de0: 65 63 68 6e 69 63 6f 6c 6f 72 2d 6c 61 79 65 72  echnicolor-layer
2df0: 20 45 58 50 41 4e 44 2d 41 53 2d 4e 45 43 45 53   EXPAND-AS-NECES
2e00: 53 41 52 59 29 0a 20 20 20 20 20 20 20 20 29 0a  SARY).        ).
2e10: 20 20 20 20 20 20 28 72 66 78 2d 73 61 76 65 2d        (rfx-save-
2e20: 66 72 61 6d 65 20 69 6d 61 67 65 20 22 24 6f 75  frame image "$ou
2e30: 74 22 29 20 0a 20 20 20 20 20 20 29 0a 20 20 20  t") .      ).   
2e40: 20 7d 0a 20 20 29 3b 0a 3c 2f 6c 6f 6f 70 3e 0a   }.  );.</loop>.
2e50: 0a 3c 70 6f 73 74 3e 0a 3c 2f 70 6f 73 74 3e 0a  .<post>.</post>.
2e60: 0a 3c 6f 6e 63 68 61 6e 67 65 3e 0a 3c 2f 6f 6e  .<onchange>.</on
2e70: 63 68 61 6e 67 65 3e 0a 0a                       change>..