適応障害で退職、そして転職へ

40代、元システムエンジニアの日記です。 適応障害、転職活動など日々のことを書いています。

【GIMP】イメージ幅を統一するスクリプト(Script-Fu)

f:id:kzms4126:20180606151012j:plain

ブログに載せる画像を編集するために作りました。

機能

ファイルパターンにマッチするファイルを、縦横比を維持したまま指定した幅になるよう拡大・縮小します。

使い方と実行例

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))
      )
    )
  )
)

実装で苦戦したところ

最初、スクリプトで出力した画像が拡大・縮小されませんでした。実行時エラーは発生していなかったので、拡大・縮小に使っている命令が間違っていると考えました。使えそうな他の命令に変えてみましたが、結果は変わりません。

ソースを確認しなおしたら、拡大・縮小の処理が変数の宣言ブロック内に書かれていました。それを外に出したら拡大・縮小されるようになりました。