文庫本はpdf化してからKindleで読めばいい。そうやって何冊か読んだ。電車の中で上着の内ポケットからさっとKindleを取り出して読める。元が骰子のように分厚い文庫本であっても。素晴らしい。感動に打ち震えながらKindleで自分でpdf化した本だとか、Amazonから購入した電子書籍を読んでいたのだ、しばらくすると打ち震える感動はなくなってきた。飽きるのは早い方である。
さて、問題はカラー画像である。写真がたくさん載っている本は、Kindleには向かない。モノクロだから。しかし、私は活字中心の本だけでなく、画像中心の本も持っている。部屋の内装の本などがそのよい例である。そういう本はたいてい重い。だからこそ電子化する意味があるのだ。
例えばこんな本だ。150 Best Apartment Ideasという。『シェリー詩集』(新潮文庫)と並べてみた。
カバーを取るとこんな感じ。
このどっしりした感じや、紙とインクの匂いは、電子化すると完全に失われてしまう。それが電子化というものである。
思い切って本を切った。一度切り始めてしまえばあとは繰り返し作業であった。切ってScanSnapでスキャンする。早速iPadに入れてみよう。iBooksを使って。
こんな感じである。写真だとよく判らないがなかなか綺麗に見えるものだと感心する。これは私個人の所有物ではないので、これに自分の本を入れて持って帰ってしまってはいけないのだ。しかし、やや大きい本(Kindleでは到底読めない大きさ)でも読みやすいことがよく判った。iPadが欲しくなってきた。iPd2が出たら買いたいものだ。KindleにはKindleの良さが、iPadにはiPadの良さがある。
pdf化された本も溜まってきた。pdfで買った本もある。だたファイルをフォルダに放り込んでおくだけでは、何があるのか判らなくなってしまう。電子書籍閲覧&管理ソフトを使えばいいのかも知れないけれど、どうも私の思うようには動いてくれない。Calibreはいろいろなファイル形式に対応して形式変換もできて素晴らしいのだが、私にもいろいろ事情があるのだ。
文字情報としては、MySQLのデータベースとしてだいたい準備できた。しかし、表紙画像がない。本というものは表紙で覚えていたりするものだ。表紙画像一覧とか出てこないと困る。どうしても困る。そのためには、pdfファイルの第一頁だけをjpegに変換できたらいい。まあ、pngファイルなんかでもいいけれど。難しいのかなと思っていたが、何とImageMagickがインストールされていれば、
convert ebook.pdf[0] bkimg.jpgとするだけでebook.pdfの表紙画像をbkimg.jpgというjpeg画像として出力できる。素晴らしい。
今、私がやりたいことは、あるフォルダ(例えばebooksという名前)の中にあるpdfファイルと別のフォルダ(例えばimagesという名前)の中にあるjpegファイルを照合して、pdfファイルに対応するjpegファイルがなかったら、jpegファイルを作成するというスクリプトを書くということである。だが、私はシェルスクリプトは苦手なのだ。phpかpythonしか使えない。rubyは頑張ろうと思ったけれど、すぐに挫折。というわけでまずは、php5-imagickをインストールする。Ubuntuならapt-get install php5-imagickとするだけでいい。もとのpdfの大きさはさまざまだろうが、出力するjpegファイルは長辺が180pxになるように指定してやる。
foreach (glob("*.pdf") as $filename) { $jname = preg_replace("/\.pdf/",".jpg",$filename); $jnmpath = "/xxx/images/".$jname; if(!file_exists($jnmpath)){ $img = new Imagick($filename); $img->setImageIndex(0); $img->thumbnailimage(180,180,true); $img->writeImage($jnmpath); $img->destroy(); } }
ときどきこんなエラーが出るのだが、どういうことだろう。
Error: /undefined in findresource Operand stack: --dict:9/18(L)-- C2_0 1 --dict:5/5(L)-- --dict:5/5(L)-- MSGothic --dict:11/12(ro)(G)-- --nostringval-- CIDFontObject --dict:7/7(L)-- --dict:7/7(L)-- Adobe-Japan1 Execution stack: %interp_exit .runexec2 --nostringval-- --nostringval-- --nostringval-- 2 %stopped_push --nostringval-- --nostringval-- --nostringval-- false 1 %stopped_push 1878 1 3 %oparray_pop 1877 1 3 %oparray_pop 1861 1 3 %oparray_pop --nostringval-- --nostringval-- 305 1 306 --nostringval-- %for_pos_int_continue --nostringval-- --nostringval-- --nostringval-- --nostringval-- %array_continue --nostringval-- false 1 %stopped_push --nostringval-- %loop_continue --nostringval-- --nostringval-- --nostringval-- --nostringval-- --nostringval-- --nostringval-- %array_continue --nostringval-- --nostringval-- --nostringval-- --nostringval-- --nostringval-- %loop_continue Dictionary stack: --dict:1160/1684(ro)(G)-- --dict:1/20(G)-- --dict:75/200(L)-- --dict:75/200(L)-- --dict:108/127(ro)(G)-- --dict:287/300(ro)(G)-- --dict:22/25(L)-- --dict:6/8(L)-- --dict:26/40(L)-- Current allocation mode is local Last OS error: 2 GPL Ghostscript 8.71: Unrecoverable error, exit code 1 Fatal error: Uncaught exception 'ImagickException' with message 'Postscript delegate failed `/tmp/magick-XX4zKuX7': @ error/pdf.c/ReadPDFImage/645'
仕方がないので、エラーが出たらそのファイルはconvertコマンドで手動で処理している。