端末のスクリーンショットからスクフェスのカードを切り出すスクリプトを書いた

端末のスクリーンショットからスクフェスのカードを切り出すスクリプトを書いた話。

先日、友人を煽るためにUR・SRカードをリストアップしたページを作っていたのだが、端末で撮ったスクリーンショットをいちいち手作業で加工するのはどうにも面倒だ、ということで、自動化してみることにした。
普段自分が画像を編集するときはGIMPを使っているのだが、これにはScript-Fuというバッチ処理機能がある。
以前から気になってはいたのだが、別段使う機会がなかったのと文法が取っ付きにくそうだったのとで今まで触ったことがなかった。そこでいい機会なのでこれを使おうということになった。

Script-FuはSchemeというプログラミング言語の派生であるらしくやたら括弧が出てくる文法には目眩がしたが、3,4工程の簡単な処理ならほぼコピペでどうにかなった。
GIMPの各処理は関数(プロシージャ)という形で提供されており、Script-Fuはそれを順に呼び出して実際に処理をさせることになる。 あまり(邦訳の)資料がないようなので、覚え書き程度に簡単な手順を書いておく。

  1. GIMPを起動したら、メニューからフィルター>Script-Fuと進んでScript-Fu コンソールを起動する。
  2. 参照ボタンを押し、Script-Fu プロシージャブラウザーを起動する。
  3. 検索ボックスから適当に検索して行いたい処理に該当する関数を見つけ出す。
    ロケールを英語にして起動し、通常のメニューから処理の名前を調べるといいらしい)
    このとき、右側のボックスには関数が要求する引数とその型が書いてあるので参考にする。
  4. 適用ボタンを押すとScript-Fu コンソールのボックスに関数が引数を伴う形でコピーされるので、これをコピペして使う。

f:id:aiwas:20141122081016j:plain

なんやかんやで出来上がったスクリプトがこちら。

(define (script-fu-CardCut image layer)
        (gimp-image-rotate image 2)
        (gimp-image-resize image 1080 1520 0 -201)
        (gimp-layer-resize-to-image-size layer)
        (gimp-displays-flush)
) ;end of define

(script-fu-register
    "script-fu-CardCut"
    "<Image>/Script-Fu/CardCut"
    "Cut image to the size of cards"
    "aiwas"
    "Copyright 2014, aiwas"
    "Nov 19, 2014"
    "RGB*, GRAY*"

    SF-IMAGE        "Image"     0
    SF-DRAWABLE     "Drawable"  0
) ;end of register

文法を除けば、関数の名前は大体そのまんまなのであまり迷うことはない。
引数についてもプロシージャブラウザに表示される説明を読めばどうにかなる。

最後に実行方法だが、まずはスクリプト.scmファイルとして保存する。
これを.gimp-x.y\scripts\(x.yはバージョン)に配置する。自分の環境(Windows7 Professional 64bit)ではC:\Users\Username\配下にあった。 最後に、メニューバーからフィルター>Script-Fu->スクリプトを再読み込みを実行すると、メニューバーのScript-Fuの配下にスクリプトが出現する。スクリプトが正しくないと、再読み込みの時点でエラーが出る。

とまあこんな次第だが、今回はScript-Fuの存在を紹介するのが目的なので、細かな説明は省かせてもらった(というかできない)。
本当は上書きエクスポートの処理まで加えたかったのだが、今のところうまくいっていない。

ちなみに、実際に上のスクリプトで切り出した画像はここに置いている。