>> 古い記事: GBUCの音源ファイルへのダウンロード用リンクを表示するブックマークレット
<< 新しい記事: gimp-shell.el / gimp-mode を使ってみた

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

Script-Fu: 任意のタイミングで自動で連番ファイル名を決定して保存

本をスキャンし、連番を付けて保存したい。 ScanSnap みたいなスキャナが必要なほど大量ではないが、 十数枚程度でも「ファイル名を付けて保存」する工程が非常にだるい。 連番の次の番号を確認するのが面倒だし、ファイル名をタイプするのも面倒、毎回拡張子を手打ちするのも不毛。 ものすごくだるい。

という訳でショートカットキー一発であらかじめ指定したフォルダに連番で保存するための Script-Fu を書いてみました。 保存した後画像を閉じるとこまでできれば良かったんですが、 gimp-display-delete が使えないようだったのでそこは手動になります。

あとは保存フォルダ・桁数・増分値を変更しようと思ったら スクリプトを開いて修正しないといけないのがいけてませんが、ここも我慢です。 保存フォルダと桁数に関しては、自分で使う分には保存フォルダ固定で問題なく、 増分値は手軽に変更できると良いのですが今後の課題ということで。

使い方・手順

作業開始時に

  • 必要ならスクリプトを開き作業用フォルダのパスと桁数、連番の増分値を修正
  • 必要なら保存フォルダの next-number.txt を開き、次に保存するファイルの番号を入力して保存

しておき、あとは以下の手順を繰り返す。

  • 画像をスキャン(または画像を修正するなど)
  • 通常の Script-Fu と同様に使う。ショートカットキーを割り当てておくと吉。
  • (Ctrl+W で画像を閉じる)

番号を間違えて保存するなど、ミスったときは next-number.txt の番号を修正してやり直す。

スクリプト


;; anbt-continuous-save.scm

;; The MIT License

;; Copyright (c) 2009 sonota

;; Permission is hereby granted, free of charge, to any person obtaining a copy
;; of this software and associated documentation files (the "Software"), to deal
;; in the Software without restriction, including without limitation the rights
;; to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
;; copies of the Software, and to permit persons to whom the Software is
;; furnished to do so, subject to the following conditions:

;; The above copyright notice and this permission notice shall be included in
;; all copies or substantial portions of the Software.

;; THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
;; IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
;; FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
;; AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
;; LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
;; OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
;; THE SOFTWARE.


(define (script-fu-anbt-continuous-save img drw)
  (let*
	  ((fr nil)
	   (fw nil)
	   (digits 4) ; 桁数
	   (step 1) ; 増分値
	   (work-dir "/home/USER/gimp-continuous-save-temp/") ; 作業用フォルダ
	   (next-number-file (string-append work-dir "next-number.txt")) ; 番号保存用ファイル名
	   (next-number nil)
	   (save-file-name nil))

	;; 桁数と数を指定して整形
	;; 000xx
	;; ----- digits
	;; ---   zero-length
	;;    -- n-length
	(define (zero-padding-number digits n)
	  (let*
		  ((n-str (number->string n))
		   (n-length (string-length n-str))
		   (zeros-str "")
		   (zero-length (- digits n-length))
		   (i 0))
		
		(while (< i zero-length)
			   (set! zeros-str (string-append zeros-str "0"))
			   (set! i (+ i 1)))
		(string-append zeros-str n-str)))

	;; アンドゥしたらここに戻る
	(gimp-image-undo-group-start img)
	
	;; ファイルから番号読み込み
	(set! fr (open-input-file next-number-file))
	(set! next-number (read fr))

	;; ファイル名生成
	(set! save-file-name (string-append work-dir (zero-padding-number digits next-number) ".jpg"))

	;; 画像にファイル名をセット
	(gimp-image-set-filename img save-file-name)

	;; 必要ならここに処理を適宜追加する
	;; ここでは例として画像を右90度回転
	(gimp-image-rotate img ROTATE-90)

	;; 保存
	(file-jpeg-save 1 ; 保存ダイアログを開かない
					img drw
					save-file-name
					save-file-name ; raw-filename
					0.95
					0 ; smoothing
					1 ; optimize
					0 ; progressive
					"" ; comment
					0 ; subsmp
					0 ; baseline
					0 ; restart
					0 ; dct
					)
	
	;; 増分値を加算
	(set! next-number (+ step next-number))

	;; ファイルに番号書き込み
	(set! fw (open-output-file next-number-file))
	(display next-number fw)

	;; 「修正なし」状態にする
	;; (画像を閉じる時にダイアログを出さないようにするため)
	(gimp-image-clean-all img) 

	;; ここまでがアンドゥの対象
	(gimp-image-undo-group-end img)))


(script-fu-register
  "script-fu-anbt-continuous-save"
  "<Image>/Script-Fu/misc/連番で保存" ; このスクリプトのメニュー位置
  "連番で保存" ; このスクリプトの説明
  "sonota" ; 作者名
  "(c) 2009" ; コピーライト
  "2009-10-11" ; 日付
  "RGB*, GRAY*, INDEXED*"  ; スクリプトが動作可能なモード
  SF-IMAGE "Image" 0       ; 引数1
  SF-DRAWABLE "Drawable" 0 ; 引数2
)

その他

桁数と数を指定して整形する関数 zero-padding-number は □置きざり保管庫: GIMPをscript-fuで自動化(2008-07-22) を参考にさせてもらいました。ありがとうございます。

次のように動作します。

> (zero-padding-number 4 12)
"0012"
> (zero-padding-number 16 12)
"0000000000000012"
> (zero-padding-number 1 12)
"12"

Gimpに関する記事のもくじ

>> 古い記事: GBUCの音源ファイルへのダウンロード用リンクを表示するブックマークレット
<< 新しい記事: gimp-shell.el / gimp-mode を使ってみた
** ホームに戻る

コメント

コメントの投稿

管理者にだけ表示を許可する

|
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。