[ create a new paste ] login | about

Link: http://codepad.org/CWevEk4S    [ raw code | output | fork ]

ironsand - Scheme, pasted on Oct 1:
; This program is free software; you can redistribute it and/or modify
; it under the terms of the GNU General Public License Version 3.
; This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
; See the attached file or the link below.
; http://www.gnu.org/licenses/gpl-3.0.html
;
; Copyright (C) 2012 鉄(Tetsu) <web@ironsand.net>
; Webpage : http://gimp.ironsand.net/ (lang:jp)

;透明度を設定してlayerを返す
(define (fe-layer-set-opacity layer opacity)
        (gimp-layer-set-opacity layer opacity)
        layer)
;gimp-image-add-layerの処理後に追加したlayerを返すようにする
(define (fe-image-add-layer img layer position)
        (gimp-image-add-layer img layer position)
        layer)
;2つのレイヤーを指定した透明度で合成して作成
(define (fe-add-merged-transparent-layers img layer1 layer2 opacity1 opacity2)
        (fe-image-add-layer img
                            (fe-layer-set-opacity
                             (car (gimp-layer-copy layer1 TRUE))
                             opacity1)
                            0)
        (gimp-image-merge-down img (fe-image-add-layer img
                                                       (fe-layer-set-opacity
                                                        (car (gimp-layer-copy layer2 TRUE))
                                                        opacity2)
                                                       0) EXPAND-AS-NECESSARY))
(define (fe-opacity-list num)
        (let ((quo (quotient 100 (+ 1 num)))
              (re (remainder 100 (+ 1 num)))
              (vec (make-vector (+ num 2) 0))
              (i 1))
          (while (< i (+ num 1))
            (vector-set! vec i (+ (* quo i) (quotient re 2)))
            (set! i (+ i 1)))
          (vector-set! vec (+ num 1) 100)
          (vector->list vec)))
(define (fe-add-reverse-opacity-list opacities)
        (append opacities (cdr (reverse opacities))))

(define (script-fu-fe-gifanime-morph img drawable num time howlongstop fadeout?)
        (if (= 2 (car (gimp-image-get-layers img)))
            (begin
             (let ((layer1 (vector-ref (car (cdr (gimp-image-get-layers img))) 0))
                   (layer2 (vector-ref (car (cdr (gimp-image-get-layers img))) 1)))
               (gimp-image-undo-group-start img)
               (map (lambda (opacity)
                      (fe-add-merged-transparent-layers img layer1 layer2 (- 100 opacity) opacity))
                    (if (eqv? fadeout? TRUE)
                        (fe-add-reverse-opacity-list (fe-opacity-list num))
                      (reverse (fe-opacity-list num)))
                    )
               ;レイヤーにGifアニメに必要な名前をつける
               (let ((i 0)
                     (layers (cadr (gimp-image-get-layers img)))
                     (layer-num (- (car (gimp-image-get-layers img)) 2)))
                 (while (< i layer-num)
                   (gimp-drawable-set-name (vector-ref layers i)
                                           (string-append "Frame " (number->string (- layer-num i)) " ("
                                                          (number->string (if (or (= (- layer-num (+ num 2)) i);変化後の画像でちょっと止める
                                                                                  (= (- layer-num 1) i))
                                                                              howlongstop time))
                                                          "ms)"))
                   (set! i (+ i 1))))
               (gimp-image-remove-layer img layer1)
               (gimp-image-remove-layer img layer2)
               (plug-in-animationoptimize 1 img (vector-ref (cadr (gimp-image-get-layers img)) 0))
               (gimp-displays-flush)
               (gimp-image-undo-group-end img)))))

(script-fu-register
 "script-fu-fe-gifanime-morph"
 "<Image>/Filters/Animation/Gif Anime Morph"
 "Gif Anime Morph"
 "Tetsu" ; Writer
 "Tetsu" ; Copywrite
 "2012/06"
 ""
 SF-IMAGE   "Image" 0
 SF-DRAWABLE   "Drawable" 0
 SF-ADJUSTMENT "枚数" '(5 1 30 1 10 0 1)
 SF-ADJUSTMENT "変化時間(ms)" '(200 50 3000 1 10 0 1)
 SF-ADJUSTMENT "画像を止める時間(ms)" '(1500 100 10000 1 10 0 1)
 SF-TOGGLE "フェードアウトもする" TRUE
 )


Output:
1
reference to undefined identifier: script-fu-register


Create a new paste based on this one


Comments: