codepad
[
create a new paste
]
login
|
about
Language:
C
C++
D
Haskell
Lua
OCaml
PHP
Perl
Plain Text
Python
Ruby
Scheme
Tcl
; 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 )
Private
[
?
]
Run code
Submit