年末進行もやっと一段落、人心地がついたところで今度は忘年会ラッシュですよ! 私は酔って電車に乗ると高確率で寝過ごしてしまうので、iOS 5の新機能「リマインダー」を活用しようかと考えています。リマインダーを設定するまで正気を保っていられればの話ですが。
さて、今回は「Netpbm」について。なにそれ? という向きも多いだろうが、まずはこのページにある画像をご覧いただきたい。そう、こんなことを可能にするコマンド集なのだ。
What's Netpbm?
イメージファイルの扱いは、なにも画像編集ソフトの専売特許ではない。UNIX系OSでもX Window Systemが普及するにつれ、次第にGUIベースのXクライアントを利用するようになったが、それ以前はシェル上でコマンドを使い画像を加工/変換することが一般的だった。その頃誕生したのが、今回取り上げる「Netpbm」だ。
Netpbmは、画像を電子メールで扱えるようプレインテキスト化することを目的に開発された「Pbmplus」の後継プロジェクトだ。当初より、PPM(Portable PixMap)とPGM(Portable GrayMap)、PBM(Portable BitMap)の3形式を中心に構成されるが、現在ではPNGやGIF、JPEGなど多様な画像フォーマットをサポートしている。現在の位置づけをもとにわかりやすくいえば、画像変換コマンド/ライブラリ集、といったところだ。
画像編集ツールやコンバータは、OS X向けに多数公開されているが、「テキストへの変換」を意識したものは意外に少ない。Netpbmはその誕生経緯からして、テキストで出力することが目的であり、その意味で他にない特色を持っていると言っていい。
たとえば、OS X標準装備のアスキーアート作成用コマンド「banner」はASCII以外の文字を扱えないが、Netpbmに収録のコマンドを使えば、(画像化された)漢字をアスキーアート化できる。CUIのため、抵抗を感じる向きもあるだろうが、使い方自体は単純だ。
Netpbmで「漢字アスキーアート作り」
筆者と長年の付き合いがある人はご存知だろうが、写真など一部要素を除き、年賀状はTermial内(EmacsのM-x shellを含む)だけで作成している。宛名印刷はPerlとLaTeXのコンビネーション、裏面はLaTeXで(picture環境やPSTricksを駆使しつつ)デザイン、という決まりだ。当初は明確な理由があったはずだが、いまや年の瀬の餅つきのごとき恒例行事と化している。こうなれば、意地でもコマンドオンリーで作り続けるしかない。
そのデザインだが、締め切り等で切羽詰まって時間切れとなってしまった場合は、やむなくイラスト(EPS)を貼り付けてお茶を濁している。しかし、来年はいい年にしたい。多少の労力はかけるべきでは?
そこで思いついたのが、アスキーアート。行書体かなにかのフォントで、大きめに「賀正」などと印刷するのはわけないことだが、よくみればアスキーアート! というのがいいかと。しかも、1文字1文字が「龍」で構成されているとか。
となれば、Netpbmの出番。LaTeXでフォントサイズの大きい「賀正」を用意して、それをPNG画像に変換、さらにいくつかの段階を経てASCIIに、という流れにはNetpbmに含まれるコマンド群が役に立つからだ。なにより、Terminal内で完結させる、という自らに課した掟も守ることができる。
Netpbmはいくつかのライブラリに依存するため、導入には「MacPorts」を利用する。基礎部分の導入はインストーラを使うしかないためやむをえないが、以後のメンテナンスはすべてTerminal上で済ませることができる。Netpbmも、以下のコマンドを実行するだけで導入完了だ。
$ sudo port -v selfupdate
$ sudo port install netpbm
次に用意するのは「賀正」の文字。筆者はLaTeXを利用するが、フォントの設定まで風呂敷を広げると収拾がつかなくなるので、ここではテキストエディットに書いた文字(フォントサイズ288)をスクリーンショットに撮り、それを素材に使うこととした。
あとはかんたん。素材のファイル名が「input.png」だとすると、以下のとおりコマンドを実行すればいいのだ。これで、「M」や「o」などASCIIで構成された「賀正」の2文字が、プレインテキストファイル「output.txt」として出力される(出力されたファイルはこちら)。「龍」などの文字で試してみては?
$ pngtopnm input.png | ppmtopgm | pgmtopbm -dither8 | pbmtoascii > output.txt