;;
;; 2012/08/08
;;
;; 全レイヤーを画像サイズに合わせるor自動切抜きするスクリプト
;; http://www.geocities.jp/gimproject/scripts/all-layers-resize-autocrop.html
;; を、GIMP 2.8, GIMP 2.6 のどちらでも動くように改造。
;; GIMP 2.8上では、レイヤーグループ内のレイヤーも対象にして処理をする。
;;
;; オリジナル作者 : Tosi 様
;; 勝手に改造したヤツ : mieki256
;;
;; ※ 改造版を公開することについて、
;; 何か問題がありましたら、連絡していただければと…
;; その場合は削除しますので…。
;;
;; 動作確認環境:
;; - Windows7 x64
;; - GIMP 2.8.0 Portable
;; - GIMP 2.6.11
;; ----------------------------------------
;; GIMP2.6 か GIMP2.4 なら #t を、そうでなければ #f を返す
(define (script-fu-check-gimp26)
(let ((version-head (substring (car (gimp-version)) 0 4)))
(or (string=? version-head "2.6.") (string=? version-head "2.4."))))
;; ----------------------------------------
;; 通常レイヤーのみのレイヤーID一覧(list)を取得する
;; 引数は、(vector->list VECTOR) で、listにして渡すこと。
(define (script-fu-get-layers-list ls)
(if (null? ls)
;; 空リストだった場合
'()
(let* ((layer (car ls)) ;; 今チェックしてるレイヤー
(layer-rest (cdr ls))) ;; 残りのレイヤー
(if (= (car (gimp-item-is-group layer)) 0)
;; 通常レイヤーだった場合
(cons layer (script-fu-get-layers-list layer-rest))
;; レイヤーグループだった場合
(let*
(
;; 子レイヤーの一覧を取得
(child (cadr (gimp-item-get-children layer)))
(child-list (vector->list child)))
(append
(script-fu-get-layers-list child-list)
(script-fu-get-layers-list layer-rest)))))))
;; ----------------------------------------
;; 通常レイヤーのみのレイヤーID一覧(vector)を取得する
(define (script-fu-get-layers-array image)
(if (script-fu-check-gimp26)
;; GIMP 2.6用
(cadr (gimp-image-get-layers image))
;; GIMP 2.8以降用
(let* ((layers (gimp-image-get-layers image))
(layer-array (cadr layers)) ; レイヤーID一覧(vector)
(layer-list (vector->list layer-array)) ; レイヤーIDリスト(list)
)
(list->vector (script-fu-get-layers-list layer-list)))))
;; ----------------------------------------
;; 全レイヤーを画像サイズに合わせる
(define (script-fu-all-layers-resize image drawable)
(let* ((layer-array (script-fu-get-layers-array image))
(number-layers (vector-length layer-array))
(layer-count 0)
(layer 0))
(gimp-image-undo-group-start image)
(set! layer-count 0)
(while (< layer-count number-layers)
(set! layer (vector-ref layer-array layer-count))
(gimp-layer-resize-to-image-size layer)
(set! layer-count (+ layer-count 1)))
(gimp-image-undo-group-end image)
(gimp-displays-flush)))
(script-fu-register "script-fu-all-layers-resize"
"全レイヤーを画像サイズに合わせる"
"すべてのレイヤーを画像サイズに合わせます"
"Tosi, mieki256"
"Tosi, mieki256"
"2007/11, 2012/08"
"*"
SF-IMAGE "Image" 0
SF-DRAWABLE "Drawable" 0 )
(script-fu-menu-register "script-fu-all-layers-resize"
"<Image>/Layer")
;; ---------------------------------------------------------------------------
;; 全レイヤーの自動切り抜き
(define (script-fu-all-layers-autocrop image drawable)
(let* ((active (car (gimp-image-get-active-drawable image)))
(layer-array (script-fu-get-layers-array image))
(number-layers (vector-length layer-array))
(layer-count 0)
(layer 0))
(gimp-image-undo-group-start image)
(set! layer-count 0)
(while (< layer-count number-layers)
(set! layer (vector-ref layer-array layer-count))
(gimp-image-set-active-layer image layer)
(plug-in-autocrop-layer 1 image layer)
(set! layer-count (+ layer-count 1)))
(if (not (= (car (gimp-drawable-is-layer active)) 0))
(gimp-image-set-active-layer image active))
(gimp-image-undo-group-end image)
(gimp-displays-flush)))
(script-fu-register "script-fu-all-layers-autocrop"
"全レイヤーの自動切抜き"
"すべてのレイヤーを自動切抜きして必要最小限のサイズにします"
"Tosi, mieki256"
"Tosi, mieki256"
"2007/11, 2012/08"
"*"
SF-IMAGE "Image" 0
SF-DRAWABLE "Drawable" 0 )
(script-fu-menu-register "script-fu-all-layers-autocrop"
"<Image>/Layer")
最終更新:2012年08月08日 07:34