スポンサーリンク

Gimp Script-fuですべてのレイヤーをマージした画像をpngにエクスポート

file-png-save-defaults関数を使うのだが、画像番号と一緒にdrawableを指定しなければならず、したがってそのdrawableのレイヤーしか保存できない。

全てのレイヤーをマージするにはgimp-image-merge-visible-layers関数を使えばいいが、エクスポートしたいだけでマージするわけにいかないので、gimp-image-duplicateで現在の画像をコピーし、それに対してマージを行い、保存した後でgimp-image-deleteで削除する

; 画像をPNG保存する自作関数。
; Image 画像番号
; Drawable レイヤー番号
; outpath 保存先(ファイル名を含まない)
; filename ファイル名(.pngを含まない)
(define (my-save-to-png Image Drawable outpath filename)
  ; 保存処理
  (file-png-save-defaults
    RUN-NONINTERACTIVE
    Image
    Drawable
    (string-append outpath filename ".png")
    (string-append filename ".png") 
  )
)

      
; 全てのレイヤーを統合してpngにエクスポート
; Image 画像番号 (gimp-image-list) で取得可能
; outpath 出力先のパス。C:\\test\\
(define (my-save-png-as-single-image Image outpath )
  (begin
  
    ; 現在の画像をコピーする
    (define dummydup   '())
    (set! dummydup   (car (gimp-image-duplicate Image ) ) )
    
    ; コピーした画像の全レイヤーをマージして一つの画像にする
    (gimp-image-merge-visible-layers dummydup CLIP-TO-IMAGE )
    
    ; 保存に必要な、dummydupのdrawableを取得する
    (define activedrawable   '())
    (set! activedrawable (car (gimp-image-get-active-drawable dummydup ) ) )
    
    (my-save-to-png
      dummydup
      activedrawable
      outpath
      (car (gimp-image-get-name Image) ); 画像の名前を取得してファイル名に指定
    )
    
    (gimp-image-delete dummydup)
    
  )
)
;; usage :
;; (gimp-image-list)
;; > (1 #(5))
;; (my-save-png-as-single-image 5 "C:\\test\\")
;; > (#t)

Gimp側

出力

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)


この記事のトラックバックURL: