Netpbmは、様々な画像形式を扱うためのプログラムと
ライブラリを含む、オープンソースのパッケージです。特に
Unixプラットフォームを中心に広く利用されており、その移植性の高さから、Windows、macOS、VMS、Amiga OSなど、多様な環境で動作します。
UnixライクなオープンソースOSでも利用可能です。
ファイル形式とプログラム
Netpbmでは、独自の画像ファイル形式群を「netpbm format」と総称しています。これには、以下の主要な形式が含まれます。
PPM (Portable Pixmap Format): カラー画像を扱う形式。
PGM (Portable Graymap Format): グレースケール画像を扱う形式。
PBM (Portable Bitmap Format): 白黒二値画像を扱う形式。
これらの形式はまとめてPNMと呼ばれます。
さらに、これらの拡張版として、PAM (Portable Arbitrary Map) があります。これは、PNM形式を拡張したもので、より多様な画像データを扱うことができます。
Netpbmパッケージには、220以上のプログラムが含まれており、そのほとんどの名前には「pbm」「pgm」「ppm」「pam」「pnm」といった接頭辞が付いています。これらのプログラムは、画像の拡大縮小、合成、テキスト描画、減色など、多岐にわたる画像処理タスクを実行できます。
`pamscale`: 画像を縮小するプログラム。
`pamcomp`: 画像を重ねて合成するプログラム。
`pbmtext`: 文字列を画像として描画するプログラム。
`pnmquant`: 画像の色数を減らすプログラム。
Netpbmの大きな特徴は、変換プログラムを連続して使用できる点です。例えば、PBM形式の画像をBMP形式に変換する際、以下のような流れで処理を行います。
bash
pgmtoppm "#FFFFFF" somepic.pbm > somepic.ppm
ppmtobmp somepic.ppm > somepic.bmp
しかし、Netpbmはパイプラインを活用することで、中間ファイルを作成せずに、コマンド入力を減らすことができます。
bash
pgmtoppm "#FFFFFF" somepic.pbm | ppmtobmp > somepic.bmp
このように、NetpbmはUNIX哲学に則り、パイプラインを駆使した柔軟な画像処理を実現します。これは、カーニハンとプラウガーの著書『Software Tools』で紹介されたアプローチに合致します。
また、Netpbmでは、異なる画像形式間の変換を容易にするため、中間形式としてPNMを採用しています。例えば、ABCという画像形式があった場合、`ABCtopnm` と `pnmtoABC` という変換プログラムが提供されます。これにより、PNMを共通の形式とすることで、さまざまな画像形式を相互に変換できます。例えば、X11のダンプ形式(XWD)をMacintoshのPICTに変換するには、以下のコマンドを実行します。
bash
cat myscreenshot.xwd | xwdtopnm | ppmtopict > myscreenshot.pct
XWDコマンドの標準出力を直接パイプへ入力することで、中間ファイルを一切作成せずに変換処理を完結できます。
bash
xwd | xwdtopnm | ppmtopict > myscreenshot.pct
開発の経緯
Netpbmのルーツは、1980年代にJef Poskanzerが考案したPBM形式にあります。これは、プレーンテキストとして電子メールで送受信可能な画像形式の開発を目指したものでした。Poskanzerは、PBM形式を扱うためのツールを開発するために、Pbmplusというライブラリを1988年にリリースしました。その後、PGM形式とPPM形式を提唱し、それらを扱うための拡張版Pbmplusをリリースしました。
1993年には、Pbmplusの代替としてNetpbmが開発されました。Netpbmは、Pbmplusに寄せられた世界各地からの修正案をまとめ直したものでした。開発は1995年に中断しましたが、1999年からはBryan Hendersonが開発を引き継ぎ、現在もメンテナンスを続けています。
「Netpbm」という名前は、インターネットを通じて多くのプログラマが共同作業を行ったことに由来しています。NetBSDやNethackといったプロジェクトと同様の命名規則です。
関連項目
GraphicsMagick
ImageMagick
GD Graphics Library
UNIXユーティリティ一覧
外部リンク
Netpbm homepage
SourceForge project page
List of Netpbm programs