png画像ファイルがあることがわかったので、それを一括でjpg画像ファイルに変換したい。GIMPのバッチファイル script-fuをPowershellでグルグルキックしてやろうと思ったのだけど、バッチモードで起動してもコマンドプロンプトが立ち上がって、自動的に閉じることが出来ない。
初めそれでもいいやとばかりにやってみたら、GIMPがウィルス感染したかのように立ち上がって(そりゃそうだ)、メモリーエラーになってしまった。結局、 script-fuの中でグルグル回したほうがいいのだろうけど、良いサンプルが見つからなかったので、リテラルでパスをグルグル回す script-fuを書いて誤魔化すこととした。
script-fuでは\は\\とエスケープしないと正しく読み取ってくれない。まずはパスだけを羅列し、pngからjpgに変換する script-fuを呼ぶscriptと、入出力の画像ファイルパスを受け取り変換だけを行う script-fuの2つを用意した。
script-conv-all.scm
(define (script-conv-all)
(script-conv-jpeg "C:\\User\arimasou16\Music\\1349\\Liberation\\folder.png" "C:\\User\arimasou16\Music\\1349\\Liberation\\folder.jpg")
(script-conv-jpeg "C:\\User\arimasou16\Music\\Björk\\Vespertine\\folder.png" "C:\\User\arimasou16\Music\\Björk\\Vespertine\\folder.jpg")
…中略…
(script-conv-jpeg "C:\\User\arimasou16\Music\\서문탁\\Asura\\folder.png" "C:\\User\arimasou16\Music\\서문탁\\Asura\\folder.jpg")
(script-conv-jpeg "C:\\User\arimasou16\Music\\소녀시대\\THE BEST\\folder.png" "C:\\User\arimasou16\Music\\서문탁\\Asura\\folder.jpg")
)
(script-fu-register "script-conv-all"
"/Xtns/Script-Fu/script-conv-all"
"Converts all jpg files"
"arimasou16"
"arimasou16"
"2015"
""
)
script-conv-jpeg.scm
(define (script-conv-jpeg infile outfile)
(let* (
(img (car (gimp-file-load 1 infile infile)))
(layer (car (gimp-image-active-drawable img)))
)
(file-jpeg-save 1 img layer outfile outfile 1.00 0.00 1 0 "" 0 1 0 0)
)
)
Powershellで script-fuを呼び出す。Powershellではダブルコーテーションの中のダブルコーテーションは`でエスケープする。
PS C:\Users\arimasou16> $GimpParams = @("-i", "-b", "`"(script-conv-all 1`")`"", "`"(gimp-quit 0)`"")
PS C:\Users\arimasou16>
PS C:\Users\arimasou16> Start-Process -FilePath "C:\Program Files\GIMP 2\bin\gimp-2.8.exe" -ArgumentList $GimpParams -wait
PS C:\Users\arimasou16>
成功した。