【GIMP】イメージ幅を統一するスクリプト(Script-Fu)
ブログに載せる画像を編集するために作りました。
機能
ファイルパターンにマッチするファイルを、縦横比を維持したまま指定した幅になるよう拡大・縮小します。
使い方と実行例
GIMPにスクリプトをバッチコマンドで渡して実行します。
(Windows環境の場合はバックスラッシュを円記号に読み替えてください)
gimp-2.8 -i -b "(batch-unify-image-width \"ファイルパターン\" \"出力フォルダ\" 新しいイメージ幅)" -b "(gimp-quit 0)"
【実行例】
ファイルパターン c:\users\test\Desktop\temp\*.jpg に合致するファイルを幅 650px に拡大・縮小し、c:\users\test\Desktop\temp\output に出力します。
gimp-2.8 -i -b "(batch-unify-image-width \"c:\\users\\test\\Desktop\\temp\\*.jpg\" \"c:\\users\\test\\Desktop\\temp\\output\" 650)" -b "(gimp-quit 0)"
セットアップ方法
ソースコードをファイル「batch-unify-image-width.scm」に保存します。そのファイルをGIMPのスクリプトフォルダ(C:\Users\ユーザ名\.gimp-2.8\scripts)に置きます。
ソースコード
;イメージ幅統一スクリプト ;ファイルパターンにマッチするファイルを、縦横比を維持したまま指定した幅になるよう拡大・縮小します。 ; ;【使い方】 ;gimp-2.8 -i -b "(batch-unify-image-width \"ファイルパターン\" \"出力フォルダ\" 新しいイメージ幅px)" -b "(gimp-quit 0)" ; ;【例】 ;ファイルパターン c:\users\test\Desktop\temp\*.jpg に合致するファイルを幅 650px に拡大・縮小 ;c:\users\test\Desktop\temp\output に出力します。 ;gimp-2.8 -i -b "(batch-unify-image-width \"c:\\users\\test\\Desktop\\temp\\*.jpg\" \"c:\\users\\test\\Desktop\\temp\\output\" 650)" -b "(gimp-quit 0)" ; (define (batch-unify-image-width filePattern outputDir newWidth ) (let* ( ; define local variables (filelist (cadr (file-glob filePattern 1))) ; end of local variables ) (while (not (null? filelist)) (let* ( (fileFullPath (car filelist)) (image (car (gimp-file-load RUN-NONINTERACTIVE fileFullPath ""))) (drawable (car (gimp-image-get-active-drawable image))) (height (car (gimp-image-height image))) (width (car (gimp-image-width image))) (newHeight (* (/ newWidth width) height)) (filename (car (reverse (strbreakup fileFullPath "\\")))) (outFile (string-append outputDir "\\" filename)) ) (gimp-image-scale-full image newWidth newHeight INTERPOLATION-CUBIC) (gimp-file-save RUN-NONINTERACTIVE image drawable outFile "") (gimp-image-delete image) (set! filelist (cdr filelist)) ) ) ) )
実装で苦戦したところ
最初、スクリプトで出力した画像が拡大・縮小されませんでした。実行時エラーは発生していなかったので、拡大・縮小に使っている命令が間違っていると考えました。使えそうな他の命令に変えてみましたが、結果は変わりません。
ソースを確認しなおしたら、拡大・縮小の処理が変数の宣言ブロック内に書かれていました。それを外に出したら拡大・縮小されるようになりました。