本の電子化を補助するためにGimpとpython-fuを使ってみた。

python-fuはpythonで作成したスクリプトGimpを自動化するための仕組みだ。
そんなことに手を出した訳は、本をスキャナーで取り込んで電子化してやろうと目論んだのだが、スキャナーの扱いが下手なのか取り込んだデータのコントラストが弱くて見るに耐えない。
印刷してみてもぼやけた感じでこれでは使えないという印象だ。

なんとかならないかとGIMPでいろいろとなぶっていたら、「トーンカーブの調整」というのが具合がいい。
紙面の凹凸による薄墨のような暗さも除去できるし、ぼやけた字の輪郭もはっきりする。
ただし、700ページにも及ぶスキャンデータをいちいち手作業で変換するのは苦行でしかない。

そこで、誰かがどこかで書いていた「GIMPではスクリプトが使える」という記事についての記憶をたよりに調べてみるとscript-fuというのとpython-fuというのが見つかった。
しかし、script-fuはLispの流れをくむらしく私には読めない。
かろうじてpythonは少しだけかじったことがあるのでこちらでいくことにしたが、これまた日本語の情報が少なく困ったもんだ。

すったもんだの挙句、やっと動くものが出来たのでメモがきしておく。
ホストはWindowsXP pro搭載機を使った。
全体の流れとしては
1.python2.5のインストール(他のバージョンの使用可否は未確認)
2.python-fuが依存するパッケージのインストール
3.GIMPのインストール(インストール時にのみpython-fuの使用登録が可能なようだ。……未確認)
4.スクリプトを作成しGIMPインストールディレクトリ配下のplug-insディレクトリに置く
5.GIMPを立ち上げフィルターメニューに現れるスクリプト名をクリックするとスクリプトが実行される。

my-sharp.py (ほぼ下記のITプロ記事内で紹介されているスクリプトのコピペです。)

#!/usr/bin/env python
# -*- coding: utf-8 -*-

from gimpfu import *
import os, glob

def do_sharp_batch(dirname, ext, suffix):
  if os.path.exists(dirname):
    fnames = [f for f in glob.glob(os.path.join(dirname, '*'+ext))
               if suffix not in f]
    control_points = [0,0, 160,0, 240,255, 255,255]
    for fname in fnames:
      new_filename = fname[:0-len(ext)]+suffix+ext
      img = pdb.gimp_file_load(fname, '')
      pdb.gimp_curves_spline(img.layers[0], HISTOGRAM_VALUE, 8, control_points)
      pdb.gimp_file_save(img, img.active_layer, new_filename, '')
  else:
    pdb.gimp_message("No such directory: %s" %(dirname))

register(
  "sharp-batch", "Batch image sharper", "", "Yasushi Masuda, Oiller",
  "Placed on Public Domain", "2010", "SharpBatch", "",
  [(PF_DIRNAME, "directory", "Directory", os.getcwd()),
   (PF_STRING, "ext", "File extension, including dot", '.png'),
   (PF_STRING, "suffix", "Suffix for sharped file", "_sharp")],
  [],
  do_sharp_batch, menu="/Xtns/MySharp")

main()

python-fuのインストールについてはITpro下記を参考にした。

  http://itpro.nikkeibp.co.jp/article/COLUMN/20090218/324989/

gimp_curves_splien()の使い方については下記を参考にした。

  http://forum.meetthegimp.org/index.php/topic,42.0.html

上記記事を書いていただいた方には感謝を表明します。