tabstop Annex B

GIMPでイラストを描いていくよ!

レイヤーをガイドで分割するScript-fu

2006-11-23 |  -Script-Fu
Studio GPグリッド(フィルタとScript)という記事が書かれていました。

Gimpを使っているときに、一定間隔でグリッドを引いていくのは面倒な作業の1つですが、
指定した比率でグリッドを引いていってくれる便利なScript-fuがあって、この面倒な作業をかなり簡単にしてくれるようでした。

残念ながら、Script-fuのグリッドは絵として線を引くそうで、ガイドを直接引いてくれないそうです。
でも、似たような方法でガイドを引くことができるはずなので、Script-fuの中身をちょっとのぞいて改造してみました。

といっても、このブログではファイルをそのままアップロードできないんですよね。。。
とりあえず、Scriptの中身だけ晒しておきます。
中身を"guide-system.scm"という名前で保存して、Gimpのスクリプトフォルダに入れれば、”「フィルタ→Grid Guide...」が追加されるはずです。

使い方はStudio GPで紹介されている方法とおんなじです。比率に"g"、"1/g"と書くと黄金比の値を使ってくれるようです。

更新履歴



Ver.0.1.1
公開するときにエラーを混ぜちゃったようなのでアップデートしました。



スクリプトの中身

;;; guide-system.scm -*-scheme-*-
;;; This file is a part of:
;;;   The GIMP (Copyright (C) 1995-1997 Spencer Kimball and Peter Mattis)
;;; Author: Sigetch (Derived from grid-system.scm)
;;; Version 0.1.1

;;; Code:
(if (not (symbol-bound? 'script-fu-guide-system-x-divides (the-environment)))
    (define script-fu-guide-system-x-divides "'(1 g 1)"))
(if (not (symbol-bound? 'script-fu-guide-system-y-divides (the-environment)))
    (define script-fu-guide-system-y-divides "'(1 g 1)"))

(define (script-fu-guide-system img drw x-divides-orig y-divides-orig)

  (define (convert-g l)
    (mapcar (lambda (x) 
              (cond ((eq? x 'g) 1.618) ((eq? x '1/g) 0.618) ('else x)))
            l))

  (define (list->str l)
      (define (strjoin list delim) (apply string-append (mapcar (lambda(x) (string-append x delim)) list)))
      (define (enclose-brackets expr) (string-append "'(" expr ")"))
      (define (strjoin-space list) (strjoin list " "))
      (enclose-brackets (strjoin-space
                          (mapcar (lambda (obj)
                            (cond ((number? obj)  (number->string obj))
	                          ((eq? obj 'g)   "g")
	                          ((eq? obj '1/g) "1/g"))) l))))

  ;;; Erase all guides from the drawable
  (define (erase-guides prev-guide)
    (let ( (guide (car (gimp-image-find-next-guide img prev-guide))) )
      (if (not (= guide 0)) 
        (begin 
          (erase-guides guide)
          (gimp-image-delete-guide img guide)))))

  ;;; Add guides to the drawable
  (define (make-guides guide-proc initial-offset drw-length divides)
    (let* ( (total-step (apply + divides)) )
      (define (make-guides-recur prev-step rest-divides)
        (let* ((step (+ prev-step (car rest-divides)) ))
          (guide-proc img (+ initial-offset (* drw-length (/ step total-step)))) 
          (if (not (null? (cdr rest-divides))) 
            (make-guides-recur step (cdr rest-divides)))))
      (make-guides-recur 0 divides)))

  ;;; Main Routine
  (gimp-image-undo-group-start img)
    
  (erase-guides 0)
  ;;; Add vertical guides
  (make-guides gimp-image-add-vguide 
               (nth 0 (gimp-drawable-offsets drw))
               (car (gimp-drawable-width drw))
               (convert-g x-divides-orig))
  ;;; Add horizontal guides
  (make-guides gimp-image-add-hguide 
               (nth 1 (gimp-drawable-offsets drw))
               (car (gimp-drawable-height drw))
               (convert-g y-divides-orig))
     
  (gimp-image-undo-group-end img)

  (set! script-fu-guide-system-x-divides (list->str x-divides-orig))
  (set! script-fu-guide-system-y-divides (list->str y-divides-orig))
  (gimp-displays-flush))

(script-fu-register "script-fu-guide-system"
		    _"_Grid Guide..."
		    "Add guide as specified by X-DIVIDES (list of propotions relative to the drawable) and Y-DIVIDES."
		    "Sigetch <sigetch._{at}_.hotmail.com>"
		    "Sigetch"
		    "2006"
		    "RGB*, INDEXED*, GRAY*"
		    SF-IMAGE     "Image to use"          0
		    SF-DRAWABLE  "Drawable to draw guide" 0
		    SF-VALUE    _"X divisions" script-fu-guide-system-x-divides
		    SF-VALUE    _"Y divisions" script-fu-guide-system-y-divides)

(script-fu-menu-register "script-fu-guide-system" "<Image>/Filters")


中身ここまで

最新の画像もっと見る

2 コメント

コメント日が  古い順  |   新しい順
Unknown (めりい)
2006-11-23 12:35:55
わ~~すごいです!!!
感動しました!!!
元はチュートリアルを訳していて気がついたことだったんですけど、
こういうふうに発展させていただけるなんてすごく嬉しいです。
私のとこのブログ記事にも紹介で載せてもいいですか?
これだと画像→変換→ギロチン作業がすごく楽になります。
GIMP2を使おうサイトに、ガイド引いて9分割までして保存してくれるというスクリプトがありましたが、これはきっちり等分割なんですよ。
Unknown (しげっち)
2006-11-23 14:12:53
ちょっとでもお役に立ってくれればうれしいです~

>私のとこのブログ記事にも紹介で載せてもいいですか?
はい。構いません。便利な情報はみんなで共有したいから、紹介してもらえるとうれしいです!

>GIMP2を使おうサイトに、ガイド引いて9分割までして保存してくれるというスクリプトがありましたが、これはきっちり等分割なんですよ。
分割して保存までしてくれるのは便利ですね。

コメントを投稿