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

Reply via email to