GIMP-全レイヤーを画像サイズに合わせるor自動切抜きするスクリプト改造版(GIMP2.8対応)

GIMP-全レイヤーを画像サイズに合わせるor自動切抜きするスクリプト改造版(GIMP2.8対応)

最終更新 : 2012/08/08

動作確認環境

    • Windows7 x64

    • GIMP 2.8.0 Portable

    • GIMP 2.6.11

概要

Tosi様作成の、全レイヤーを画像サイズに合わせるor自動切抜きするスクリプト を改造して、GIMP 2.8 のレイヤーグループに対応させてみました。

    • GIMP 2.6 と GIMP 2.8 のどちらでも動作します。

    • GIMP 2.8上では、レイヤーグループ内のレイヤーも処理の対象にします。

    • Script-fu のスクリプトです。(Python-fu が動作しない環境でも動くはず…)

※ 公開について問題があるようでしたら、連絡していただければ削除しますので…。

使い方

全レイヤーを画像サイズに合わせるor自動切抜きするスクリプト と同じです。

導入方法

    1. all-layers-resize-autocrop_gimp28.scm.txt をダウンロード。

    2. ~.scm.txt を ~.scm にリネーム。

    3. 所定のフォルダ(ユーザフォルダ\.gimp-2.x\scripts\ 等)にコピーする。

Download

all-layers-resize-autocrop_gimp28.scm.txt



all-layers-resize-autocrop_gimp28.scm


;;

;; 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")