2012年10月6日土曜日

ImageMagickを使って自炊文庫本を読みやすくする

ギークレベル3になりました。そろそろ呪文のひとつも覚えたいですね。
ということで、せっせとインストールしたImageMagickとxpdfを使ってみます。
そもそもは自炊本整備のために入れたので、そのあたりの使い方を覚えたいと思います。

まずImageMagickの概要ですが、ザックリ言うと画像をお手入れするソフトです。
トリミングしたり、レタッチしたり、リサイズしたり、ひと通りのことはできるみたい。
それを踏まえて、今回は自炊文庫本をこれでもかと最適化したいと思います。

そもそもの問題は、このPDFです。

IMG_0196

なんなのこの読みづらさ。自炊はじめたばかりの頃の本だけど、それにしても酷い。
せっかくiPadが大画面でも、これじゃ余計に読む気が失せます。
これをどうにかこうにか読みやすくしていきましょう。


PDFからjpgに変換



ImageMagickは"画像"編集がモットーなので、PDFでは編集できません。
なので、まずはPDFをjpgに書き出します。
僕は大体300dpiでスキャンしてるので、300dpiで書きだすよう指定しました。
(本当はPDFと同じ画質にするようにしたいけど、いい方法が思いつかなかった・・・)
そこまで画質を気にしないのなら、dpiを小さくすれば実行時間が短くなりますよ。

さて、変換自体はImageMagickを使ってもできるんですが、とても見れたもんじゃない出来になるのは前に実験したとおりです。
なのでここではpdfdtoppmとmogrifyを使います。

コードはこちら。
xpdf-pdftoppm -r 300 test.pdf test
mogrify -format jpg *.ppm




ImageMagickでjpgを編集しまくる!



ここからはImageMagickで編集します。
「どんな端末からも読みやすく」をモットーにしました。

読みやすい画質にする



スキャンするときの設定が疎かだと、裏写りしたり、紙焼けが残ったりしますよね。
読みやすさの大半を占める部分なので、一番大切なステージです。
粗い部分を除去して、グレースケールにします。

文字の角度を合わせる



傾いてスキャンしてることを想定してみました。そんなケースあまりない気もするけど。
読み切れないほどあるImageMagickのコマンド集を眺めていると、そういうコマンドを用意してくれてたので使ってみただけです。

余白を切り取る



読書アプリによってはページ外周をカットしてくれたりしますが、どのアプリやガジェットでも読めるように機能に頼らないよう余白をカットします。
ただ、文字が縁ギリギリだと読みづらいので、ほんの少し余白をつけます。

と、ここまでの内容を全部表したコードがこちら。
mogrify -level 0%,75%,0.8 -type grayscale -deskew 40% -trim -bordercolor '#ffffff' -border 5%x5% test*.jpg


全ページの大きさを合わせる



ページ毎に微妙にサイズ差があるので統一します。
一番小さいページに合わせて余白を切り取ります。
厳密に言えばセンターがズレる仕様です。数ピクセルなので気にすんなです。

この内容を表したコードはこちら。
var=$(identify -format "%w %h " test*.jpg)
i=0
j=0
k=0
x=9999999
y=9999999
for num in $var
do
if test `expr $i % 2` -eq 0 ; then
if test $x -gt $num ; then
x=$num
j=`expr $j + 1`
fi
else
if test $y -gt $num ; then
y=$num
k=`expr $k + 1`
fi
fi
i=`expr $i + 1`
done

mogrify -crop $x test*.jpg
rm -rf test*1.jpg
mogrify -crop 0x$y test*.jpg
rm -rf test*1.jpg


最後にクロップ(切り取り)するとき、1行で実行する手段が分からず・・・
xとyのサイズ指定に変数を入れるとどうもうまく動きません。
ご存知の方いたら教えてくださいm(_ _)m


jpgからPDFに戻す



ひと通り終わったので、PDFに戻します。

コードにするとこんな感じ。

covert test*.jpg comp.pdf


完成!



これで思いつく工程は完了です。
全部終わった後のPDFがこちら。

IMG_0205

うおおおおお見やすい!!!!
素晴らしいですね!!!
正直ここまで綺麗になるとは思ってなかったので大大大満足です(●´ω`●)


ただひとつ問題が・・・



これで自炊本の最適化がパパっとできるようになった!
いろいろと加工するので時間はかかりますが、放置でいいってのは素敵。
・・・と思ったら、実は一工程飛ばしてるんですね。

それはカラーとモノクロを分ける方法です。
当たり前ですが、表紙はカラーで他のページはモノクロなんですよね。
このカラー/モノクロの仕分けを無視すると、表紙までモノクロになってしまうのです。

さすがにそれはつらい!ということで、カラーとモノクロの見分け方を調べてみました。
今回はPDFからjpgに書きだすので、jpgファイルにはカラーかモノクロかを判別する情報などが書き込まれていないのです。
なので、なんらかの処理をして判別しないといけないんですが、これがかなり面倒で難航してます。
目で見れば一発で分かるというのにねぇ・・・

一応、この辺の記事を読んだらOpenCVってライブラリを入れるとできるそうですが、どうやらPeytonとかCで書くかXcodeを使うかしないといけないみたい・・・
カラー/モノクロを自動判別して美白化するAutomatorスクリプト | tsukihito.dip.jp
とても僕には敷居高すぎる!ということで、今回は諦めました。
ってことで、先に書いたコードを少しアレンジして、手作業の間を作って試用してます。
Xcodeの使い方とかObject-Cの書き方を覚えたらもう一度チャレンジしたいですね。


GUIベースなImageMagick



ところで、まとめて画質を調整するときは便利だけど、一枚ずつ調整するときって使いづらそう・・・とは思ってました。だいたい僕がCUIとか無理無理です。
そんなところに颯爽とあらわれたのがこちら。GUIで使えるImageMagickです。

ImageMagick for Mac OS X



MacPortsしかり、有名なソフトにはGUIベースのものが用意されてるんですかね。
2003年製ですか、更新が止まって随分経ちますね。
はい。お察しのとおりOS Xでは動きません。というか、PowerPCでしか動かないです。
対応する気もまったくない、というか2003年で止まってますからね。
「こんなの開発してたこともあったよ」っておまけ知識程度でした。

あと、本家を見てて気づいたんですが、iOS版もあるんですね。
パパっと調べた感じだと、こっちは最近でも使われてるらしいです。
コマンドラインからザックリ使った感じだとそれほど繊細なイメージはなかったですが、卓越したおもしろい使い方もあるのかもしれませんね。


参考にしたページなどなど


UNIXの知識がなさすぎたので、ImageMagickよりも基礎に悩まされました(´・ω・`)
UNIX使えるようになりたいですねー・・・
UNIX : bash
if 文と test コマンド - UNIX & Linux コマンド・シェルスクリプト リファレンス
ImageMagick v6 Examples
ImageMagick | anobota

0 件のコメント:

コメントを投稿