本の電子化を補助するために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
上記記事を書いていただいた方には感謝を表明します。