GIMP Script-fu

Artifact [092fb9a6aa]
Login

Artifact 092fb9a6aae1be697ae3895e1884efee293d2182:


     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
; This program is free software; you can redistribute it and/or modify
; it under the terms of the GNU General Public License as published by
; the Free Software Foundation; either version 2 of the License, or
; (at your option) any later version.
;
; This program is distributed in the hope that it will be useful,
; but WITHOUT ANY WARRANTY; without even the implied warranty of
; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
; GNU General Public License for more details.

(define (script-fu-sg-numbered-frames image filedir basename number-of-frames)
  (let* ((layers (vector->list (cadr (gimp-image-get-layers image))))
         (template (car layers))
         (orig-layer (cadr layers))
         (x (car (gimp-drawable-offsets template)))
         (y (cadr (gimp-drawable-offsets template)))
         (font (car (gimp-text-layer-get-font template)))
         (font-size (car (gimp-text-layer-get-font-size template)))
         (number-of-digits (string-length (car (gimp-text-layer-get-text template))))
         )
    (gimp-drawable-set-visible template FALSE)
    (gimp-image-lower-layer-to-bottom image template)
    (let loop ((frame-number 1))
      (unless (> frame-number number-of-frames)
        (gimp-image-set-active-layer image orig-layer)
        (let* ((number-text (string-append (make-string number-of-digits #\0)
                                           (number->string frame-number) ))
               (frame-text (substring number-text (- (string-length number-text) 
                                                     number-of-digits )))
               (filename (string-append filedir DIR-SEPARATOR basename frame-text ".jpg"))
               (text-layer (car (gimp-text-fontname image -1 
                                                    x y 
                                                    frame-text 
                                                    0 TRUE 
                                                    font-size PIXELS
                                                    (car (gimp-context-get-font)) )))
               (frame-layer (car (gimp-layer-copy orig-layer TRUE)))
               )
          (gimp-image-set-active-layer image template)
          (gimp-image-add-layer image frame-layer 1)
          (set! frame-layer (car (gimp-image-merge-down image text-layer CLIP-TO-IMAGE)) )
          (gimp-file-save RUN-NONINTERACTIVE 
                          image 
                          frame-layer
                          filename 
                          filename )
          (gimp-image-remove-layer image frame-layer)
          (loop (+ frame-number 1)) )))
          
    (gimp-image-raise-layer-to-top image template)
    (gimp-drawable-set-visible template TRUE) ))
             
(script-fu-register "script-fu-sg-numbered-frames"
  "Numbered frames"
  "Save image as numbered frames "
  "Saul Goode"
  "saulgoode"
  "April 2012"
  "*"
  SF-IMAGE    "Image"    0
  SF-DIRNAME "Directory" "/home/saul/tmp-frames"
  SF-TEXT "Base filename" "frame_"
  SF-ADJUSTMENT "Number of frames" '( 500 1 2000 1 1 0 1 )
  )
(script-fu-menu-register "script-fu-sg-numbered-frames"
  "<Image>/Filters/Misc"
  )