玩式草子─ソフトウェアとたわむれる日々

第49回 自炊データとnetpbm

この記事を読むのに必要な時間:およそ 4 分

日中は厳しい残暑が続くものの,朝夕は多少過しやすくなり,夜の時間もずいぶん長くなってきました。⁠読書の秋」への準備,というわけでもありませんが,授業で使う参考資料をまとめて自炊した勢いで,本棚に眠っていた重い本も何冊か電子化してみました。

それらの中には数百ページのハードカバー本も含まれます。ハードカバー本は値段も高く,作りもしっかりしているので,分解することに心理的,物理的な抵抗はあったものの,思いきって電子化してサイズや重さの制約から解き放ってみると,以前よりもずっと頻繁に目を通せるようになりました。移動中や外出先での空き時間に,数百ページもあるハードカバー本を手軽に読めるのは,電子書籍ならでは魅力でしょう。

しかし,自炊電子書籍が増えてくるにつれ,それらをもっと読みやすくできないだろうか,と思うようになりました。たとえば,紙の本では製本上の都合もあって,本文の周囲にはかなり広い余裕(マージン)が取られています。これらマージンは紙の本では必須だったのでしょうが,電子書籍には不要で,無い方が本文部分を大きく表示できそうです。

図1 スキャンした元ページの表示

図1 スキャンした元ページの表示

ComittoN等の電子書籍ビューワでは,画面サイズに合わせてページを自動的に拡大縮小するズーム機能が用意されているので,その機能を使えば本文部分のみで画面一杯使うことも可能です。しかし,その場合でもページごとに表示範囲を微調整する必要はありますし,2ページを見開きで表示したい,といった場合は,ページ単位でのズーム機能は役に立ちません。

自炊時にあらかじめマージン部分をスキャン範囲外にすることも考えましたが,⁠マージンの大きさ」というのも元の紙のページが持っていた情報として保存したいものです。そこで,大元のスキャンデータは従来通りページ全体を取ることにして,そこから電子書籍用により適したデータを生成する方法を考えてみました。

画像処理ツールnetpbm

GIMPのような画像処理ツールを使えば,マウス操作のみでページの本文部分を切り出したり,画像のサイズや解像度を変更することができます。

しかし,1枚の写真を修正するならともかく,数百ページを超えるような電子書籍の各ページを手作業で修正することは現実的ではありません。そこでコマンドラインから使える画像変換・編集ソフトであるnetpbmというツールを使ってみました。

netpbmは多種多様な画像形式を相互変換するツールや,画像に対してさまざまな処理を加えるためのツールをまとめた,画像処理用ツールの一大パッケージです。

最近では「コンピュータ用の画像形式」と言うと,写真向けのJPEG形式かCG等でよく使われるPNG形式が主流で,Web上で目にする画像は,たいていどちらかの形式になっているようです。しかし,WindowsやOS/2ではBMP形式が標準の画像形式ですし,MacintoshではPICT形式がOSに組み込まれた標準の画像形式でした。一方,X Windows Systemでは白黒2値のXBM形式やカラーに対応したXPM形式がアイコンや背景用の画像形式として広く利用されてきました。最近ではWeb上のアニメ程度にしか利用されていないGIF形式も,元々はパソコン通信用に開発された画像形式でしたし,スキャナやFAXなどではTIFF形式も広く利用されています。

netpbmはこれらメジャーな画像形式を含め,最近ではほとんど使われなくなった画像形式もサポートしている,歴史的な重みを感じさせるツールです。

netpbmの前身にはpbmplusというツールがありました。pbmplusの開発が停滞し,インターネット上の有志がその開発を引き継いだ際に,パッケージ名がnetpbmに変更されました。

多数の画像形式に対応する場合,⁠BMP形式をPICT形式に変換するツール」⁠JPEG形式をXPM形式に変換するツール」という風に,それぞれの形式を一対一で変換しようとすると,膨大な数のツールが必要になります。そのためnetpbmでは,中間的な画像形式を定めて,各画像形式を中間的な画像形式に変換するためのツールと中間的な画像形式から各画像形式に変換するためのツールを用意することで,組み合わせの爆発的な増加を回避しています。

たとえば先に紹介した8種(JPEG,PNG,BMP,PICT,XBM,XPM,GIF,TIFF)の画像形式だけを考えても,一対一で変換するツールを作ろうとすれば BMP->PICT,PICT->BMP,JPEG->XPM,XPM->JPEG…… のように8×7=56種類のツールが必要になります。一方,中間形式を用いて各形式と中間形式を変換するようにすれば,各形式ごとに中間形式と相互変換するためのツールを用意すればいいので,8×2=16種類のツールで済むことになります。

新しい画像形式をサポートする際も,一対一で変換しようとすると,新しい形式と既知の形式を相互変換するために8×2=16種類のツールを追加する必要がありますが,中間形式を用いれば,中間形式と新しい画像形式を相互変換するための2つのツールを書くだけで済みます。

実のところ,netpbmの中間形式にはフルカラー用のPPM(Portable Pixel Map)形式,グレースケール用のPGM(Portable Gray Map)形式,白黒2値のみのPBM(Portable Bit Map)形式の3種類が用意されているので,相互変換はもう少し複雑になります。また,最近ではこれらの形式と上位互換性を持つPAM(Portable Arbitrary Map)という新しい形式も提案され,この形式でコマンド類を整理し直そうとしているようです。

画像の拡大縮小や切り出し,強調といった処理も,それぞれの画像形式ごとに対応しようとすれば大変な作業になりますが,中間形式を介することにしておけば,中間形式に対して処理するツールを開発するだけで,それぞれの画像形式に直接対応する必要はなくなります。

netpbmはこういうアイデアで開発された300を超える小さなツール(コマンド)を集めたソフトウェアパッケージで,PC上で利用されているたいていの画像形式を処理することができます。

netpbmパッケージに含まれているツールは,数が多すぎて全体を把握しづらくなっているものの,基本的にjpegtopnmgiftopnmのように"XXXtopnm"になっているのがnetpbmの中間形式(カラーならばPPM,グレースケールならばPGM)に変換するためのツールで,pnmtojpegpnmtopngのように"pnmtoXXX"になっているのが中間形式から各画像形式に変換するためのツールです。

一方,画像サイズを変更するpnmscaleや色数を調整するpnmquant画像の角度を変えるpnmrotateのように,"pnmXXX"になっているのは中間形式の画像を操作するためのツールです。

なお,これらの名称に含まれている"pnm"とは"Portable aNy Map"の略で,netpbmが採用している中間形式(PBM/PGM/PPM)の総称であって,PNMと言う画像形式が存在するわけではありません。そのためpnmscaleやpnmquantのように"pnm"を名前の一部に持つツールは,PBM/PGM/PPMの各形式を区別することなく操作できます。それに対し,pgmenhancepbmcleanのように"pgm"や"pbm"を名前の一部に持つツールは,それぞれの画像形式を前提にしており,異なる形式のデータを扱う場合は事前に変換処理をしておく必要があります。

著者プロフィール

こじまみつひろ

Plamo Linuxとりまとめ役。もともとは人類学的にハッカー文化を研究しようとしていたものの,いつの間にかミイラ取りがミイラになってOSSの世界にどっぷりと漬かってしまいました。最近は田舎に隠棲して半農半自営な生活をしながらソフトウェアと戯れています。

URLhttp://www.linet.gr.jp/~kojima/Plamo/index.html

コメント

コメントの記入