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)