zimg は、テキストファイルやバイナリーファイルから2次元のデータを読みとって 2Dイメージマップを生成します。画像フォーマットは PNG (デフォルト) と JPEG がサポートされています。
同様の機能は汎用のデータ処理ソフトにも備えられていることが多いですが zimg は専用のプログラムのため使い勝手に優れ、かつコンパクトです。
作者: Johannes Zellner さん
ホームページ:
http://zimg.sourceforge.net/
バージョン: 4.19.1 (2002/10/29)
ライセンス: BSD-like
(COPYING)
README を読む
付属ドキュメント man page を読む
作者の Zellner さんの専門は X 線回折のようで、zimg
は
ESRF
(The European Synchrotron Radiation Facility)
Data Format を扱えるようになっています。
インストールしたら、早速使ってみましょう。 サンプルデータは用意されていないので、 次の perl スクリプトで簡単なデータを作ってみます。
for ($i = 0; $i < 20; $i++) { for ($j = 0; $j < 40; $j++) { print "$j $j $j $j\n"; } }
このスクリプトを例えば makedata.pl の名前で保存し、次のように実行します。
$ perl makedata.pl > ex1.dat $ zimg --column --size=160,20 ex1.dat > ex1_c.png $ display ex1_c.png
PNG を表示するのにここでは ImageMagick の display を使っています (LinuxMLD 7 では DVD-ROM から追加インストールしてください)。 次のような画像が表示されます。
zimg はデフォルトで 240 色のカラーマップを持っています。特に指定しなければ 読み込んだデータの最小値から最大値までがカラーマップの対象となりますが、 範囲を指定することもできます。またカラーマップを変更することも可能です。
データが ascii
テキストの場合、デフォルトでは各行の最初のカラムのみ読み込まれます。
オプション --column
はすべてのカラムをデータとして読み込むよう
指示します。また
--column=1 --column=3
... のようにすると、指定した位置のカラムを
ピックアップすることができます。
--column
の代わりに短い1文字のオプション -n
が
使えます。カラム位置を指定する場合は -n1
のようにオプション文字と引数の間に空白を入れないようにします。
引数が省略できないオプションの場合
(例えば --size
に対する -r
)
は空白を置いても構いません。
オプション --jpeg
を付けると JPEG フォーマットで画像を生成します。
オプション --output
で出力先を指定していなければ標準出力に画像データを出力しますが、標準出力が
tty になっていると
(つまり、リダイレクトやパイプしていない場合)
デフォルトでは画像 viewer として
xv
を起動 (popen) して表示しようとします
(MLD には xv は収録されていません)。
この viewer は環境変数 ZIMG_VIEWER
で変更できます。
当然ながら、指定する viewer
は標準入力から画像データを読み込めるものであることが必要です
(こんな機能がなくても自分でパイプすれば済みます。でも
tty にバイナリーデータを流さないのは利点かもしれない)。
次の例では、display
を viewer に指定し、
オプション --gray
を使ってグレイスケールで表示します。
$ export ZIMG_VIEWER=display $ zimg --column --size=160,20 --gray ex1.dat
もうすこし面白みのある例として
sin2(x) - cos2(y)
を 0 <= x, y < 2π の範囲で表示してみます。 今度は perl で生成したデータを標準入力から読むように実行してみましょう。
$ perl -e ' > for ($y=0; $y<180; $y++) { > for ($x=0; $x<180; $x++) { > print sin($x*3.14159/90.0)**2 - cos($y*3.14159/90.0)**2,"\n"; > }}' | zimg --size=180,180 > ex2.png
このページの冒頭に掲げている画像が得られます。
バイナリーデータを読み込むには次のようなオプションでデータの型を指定します。
-f, --float -d, --double --char --short --int --long-int -c, --unsigned-char -s, --unsigned-short -i, --unsigned-int --unsigned-long-int --complex-float=(abs/length|phase|real|imaginary) [abs] --complex-double=(abs/length|phase|real|imaginary) [abs]
バイト順を指定するオプションも用意されています。
--swap --big-endian --little-endian
次の例は、
Gri のページ
の冒頭で御紹介しているサンプルのデータを使ったものです。
オプション --cbox
でカラーボックスを同時に表示しています。
$ zimg --unsigned-char --size=128,128 --cbox example6image.dat > example6.png
LinuxMLD 7 では
zimg-4.19.1-1_mlb2.i386.rpm (68,710 bytes)
を、
MLD 5、MLD 6 では
zimg-4.19.1-1_mlb1.i386.rpm (67,831 bytes)
をインストールします。
rpm コマンドでインストールするにはスーパーユーザになって
# rpm -i zimg-4.19.1-1_mlb2.i386.rpm
のようにします。
MLD 5,6 では
Gnome の GUI でインストールすることもできます。
MLD 5 では gd ライブラリは標準でインストールされていますが、 libgd がリンクしている他のライブラリの関係で libfreetype.so.6 が無いという依存性のエラーになります。 このエラーは無視して構いません。
# rpm -i --nodeps zimg-4.19.1-1_mlb1.i386.rpm
としてインストールしてください。
いつも決まったオプションを指定する (例えば自分用のカラーマップを使うなど)
場合は、~/.zimgrc
に書いておくことができます。またデータが
ascii テキストファイルの場合はファイル自身にオプションを書いておく
modelines という機能があります。
zimg
は C で書いたデータのフィルタープログラムを動的にコンパイル、
リンクすることができます。詳しくは man ページでオプション
--expr
、--expr-source
の項を参照してください。
man ページには書かれていませんが、一時的に作成されるオブジェクトファイル
(.so) は、環境変数 TMPDIR が定義されていればそのディレクトリに、
そうでない場合はカレントディレクトリに作成されます。
オリジナルのままでは、オプション --dump-colormap
でデフォルトのカラーマップを出力すると逆順で出力されてしまう
などの不具合があるので修正
(zimg-4.19.1.patch)
を加えています。
(ChangeLog によると 2002-09-27 に
* color.c: inverted the default map, so that it has red vor high values
という修正がされていて、その副作用ではないかと思います。)
Web 上の参考になるページを御紹介します。
岡本さんのページは移転したのですが、上記のページはまだ移転先にはないようです。