Sorry for being unclear - when I said "this line" I was referring to:
(set! num-layers (car (gimp-image-get-layers newimage))) On Sat, Jul 24, 2010 at 9:50 AM, Dillon <dillonontheco...@gmail.com> wrote: > I think that this line is not returning the number of layers as we're > expecting. I tried using gimp-message to write the number of layers out to > the console, but it generates another batch execution error. > > Here is the code: > > (define (batch-save-as-xcf pattern) > (let* ( > (filelist (cadr (file-glob pattern 1))) > (fileparts) > (xcfname) > (filename) > (image) > (newimage) > (drawable) > (num-layers) > (layerIDs) > (pos) > (layerToKeep) > (i) > ) > (gimp-message-set-handler 2) > (gimp-message "Preparing to act on the following files") > (gimp-message pattern) > > (while (pair? filelist) > ; set filename to the name of the current file in the glob > (set! filename (car filelist)) > (gimp-message "The current file is: ") > (gimp-message filename) > > ; set xcfname by tokenizing on "." and taking everything but the last part > (set! fileparts (strbreakup filename ".")) > (set! fileparts (butlast fileparts)) > (set! xcfname (string-append (unbreakupstr fileparts ".") ".xcf")) > (gimp-message "The new filename will be: ") > (gimp-message xcfname) > ; set image from the file, and then get the first layer and set it to > newimage > (gimp-message "Loading File.") > (set! newimage (car (gimp-file-load RUN-NONINTERACTIVE filename > filename))) > (set! num-layers (car (gimp-image-get-layers newimage))) > (set! layerIDs (cadr (gimp-image-get-layers newimage))) > (gimp-message "The current file has the following number of layers: ") > (gimp-message num-layers) > > ;(set! layerToKeep 0) > ;(set! pos 0) > ;(while (< pos num-layers) > ;(unless (= pos layerToKeep) > ;(gimp-image-remove-layer newimage (vector-ref layerIDs pos)) > ;) > ; (set! i (+ i 1)) > ; ) > > ; set drawable to the newimage > (gimp-message "Setting the Drawable.") > (set! drawable (car (gimp-image-flatten newimage))) > > ; save the drawable from newimage as xcfname > (gimp-message "Saving the new file.") > (gimp-file-save RUN-NONINTERACTIVE newimage drawable xcfname xcfname) > > ;(gimp-image-delete image) > ;(gimp-image-delete newimage) > (set! filelist (cdr filelist)) > ) > ) > ) > > > Here is the output: > > script-fu.exe-Warning: Preparing to act on the following files > > script-fu.exe-Warning: c:\test\ArroyoSanJose-014.tif > > script-fu.exe-Warning: The current file is: > > script-fu.exe-Warning: c:\test\ArroyoSanJose-014.tif > > script-fu.exe-Warning: The new filename will be: > > script-fu.exe-Warning: c:\test\ArroyoSanJose-014.xcf > > script-fu.exe-Warning: Loading File. > > TIFF image-Warning: Warning: > The image you are loading has 16 bits per channel. GIMP can only handle 8 > bit, s > o it will be converted for you. Information will be lost because of this > convers > ion. > > script-fu.exe-Warning: The current file has the following number of layers: > > batch command experienced an execution error > > (Type any character to close this window) > > > On Sat, Jul 24, 2010 at 9:39 AM, Dillon <dillonontheco...@gmail.com>wrote: > >> It just says: >> >> batch command experienced an execution error >> >> (Type any character to close this window) >> >> >> Is there a way to get the batch engine to provide more verbose output? >> >> You're probably right about the variable declarations. Doh! >> >> On Sat, Jul 24, 2010 at 4:11 AM, Cameron Gregory <c...@bloke.com> wrote: >> >>> what is the error? >>> >>> But you need to declare num-layers and layerID's at the top (like >>> newimage and drawable) >>> >>> Cameron >>> >>> On 24/07/2010, at 3:35 PM, Dillon wrote: >>> >>> As soon as I add in either of these lines: >>> >>> (set! num-layers (car (gimp-image-get-layers newimage))) >>> (set! layerIDs (cadr (gimp-image-get-layers newimage))) >>> >>> >>> I get batch command execution errors. >>> >>> The full script is: >>> >>> (define (batch-save-as-xcf pattern) >>> (let* ( >>> (filelist (cadr (file-glob pattern 1))) >>> (fileparts) >>> (xcfname) >>> (filename) >>> (image) >>> (newimage) >>> (drawable) >>> ) >>> (gimp-message-set-handler 2) >>> (gimp-message "Preparing to act on the following files") >>> (gimp-message pattern) >>> >>> (while (pair? filelist) >>> ; set filename to the name of the current file in the glob >>> (set! filename (car filelist)) >>> (gimp-message "The current file is: ") >>> (gimp-message filename) >>> >>> ; set xcfname by tokenizing on "." and taking everything but the last >>> part >>> (set! fileparts (strbreakup filename ".")) >>> (set! fileparts (butlast fileparts)) >>> (set! xcfname (string-append (unbreakupstr fileparts ".") ".xcf")) >>> (gimp-message "The new filename will be: ") >>> (gimp-message xcfname) >>> ; set image from the file, and then get the first layer and set it to >>> newimage >>> (gimp-message "Loading File.") >>> (set! newimage (car (gimp-file-load RUN-NONINTERACTIVE filename >>> filename))) >>> (set! num-layers (car (gimp-image-get-layers newimage))) >>> (set! layerIDs (cadr (gimp-image-get-layers newimage))) >>> >>> ; set drawable to the newimage >>> (gimp-message "Setting the Drawable.") >>> >>> (set! drawable (car (gimp-image-flatten newimage))) >>> >>> >>> ; save the drawable from newimage as xcfname >>> (gimp-message "Saving the new file.") >>> (gimp-file-save RUN-NONINTERACTIVE newimage drawable xcfname xcfname) >>> >>> (set! filelist (cdr filelist)) >>> ) >>> ) >>> ) >>> >>> >>> >>> >>> Date: Sun, 06 Jun 2010 17:46:15 -0400 >>> From: saulgo...@flashingtwelve.brickfilms.com >>> Subject: Re: [Gimp-user] Script-Fu for batch image conversion >>> To: gimp-user@lists.XCF.Berkeley.EDU >>> Message-ID: >>> <20100606174615.awibbw09xk44k...@flashingtwelve.brickfilms.com> >>> Content-Type: text/plain; charset=ISO-8859-1; DelSp="Yes"; >>> format="flowed" >>> >>> Quoting Dillon <dillonontheco...@gmail.com>: >>> >>> > The reason I'm writing my own script-fu, rather than using Daves Batch >>> > Processor, is that my TIF files are multi-page, and when I load the >>> image >>> > and flatten it to a drawable, I end up with both pages flattened into >>> one >>> > drawable. I only want one of the pages (I think the first). >>> > >>> > I need to find a way to select that page (which I assume is turned into >>> a >>> > layer when the TIF is loaded), and just set that layer to be my >>> drawable. >>> >>> In that case, you were on the right track originally with using >>> 'gimp-image-get-layers' (I am also assuming multi-page TIFFs load as >>> separate layers). However, you had incorrectly handled the value >>> returned by the function. >>> >>> 'gimp-image-get-layers' returns returns a list containing two >>> elements: the number of layers in the image and an array of the >>> layerIDs of those layers: >>> >>> (set! num-layers (car (gimp-image-get-layers image))) >>> (set! layerIDs (cadr (gimp-image-get-layers image))) >>> >>> You can obtain the layerID of the top layer with: >>> >>> (set! top-layer (vector-ref layerIDs 0)) >>> >>> The next down with: >>> >>> (set! next-layer (vector-ref layerIDs 1)) >>> >>> And so on: >>> >>> (set! bottom-layer (vector-ref layerIDs (- num-layers 1))) >>> >>> >>> If you know the position of the layer you wish to keep (the TIFF >>> page), you can then remove all of the other layers from the image with: >>> >>> (set! pos 0) >>> (while (< pos num-layers) >>> (unless (= pos TIFFpage) >>> (gimp-image-remove-layer image (vector-ref layerIDs pos)) >>> ) >>> (set! i (+ i 1)) >>> ) >>> >>> _______________________________________________ >>> Gimp-user mailing list >>> >>> Gimp-user@lists.XCF.Berkeley.EDU >>> https://lists.XCF.Berkeley.EDU/mailman/listinfo/gimp-user >>> >>> >>> >> >
_______________________________________________ Gimp-user mailing list Gimp-user@lists.XCF.Berkeley.EDU https://lists.XCF.Berkeley.EDU/mailman/listinfo/gimp-user