【まだ書きかえます。どこをいつ書きかえたか、かならずしも明示しません。】
- 1 -
[2020-09-20 データの可視化の道具「NCARグラフィックス」および「GKS標準」とわたしのかかわり] と [2023-11-15 Ubuntu で NCAR Graphics を インストールする] のつづき。
わたしは、アメリカ合衆国の National Center for Atmospheric Research (NCAR) でつくられた作図プログラム「NCAR Graphics」を、1980-1990年代にはよくつかっていたが、2000年ごろ以後はあまりつかわなくなっていた。しかし、同じ NCAR (ちがう部門ではあるが) が中心になってつくられた気象モデル WRF (Weather Research & Forecast) model の出力を作図するプログラム「RIP」が下うけとして NCAR Graphics をつかっているので、Linux 上に NCAR Graphics をいれた。(そのときの悪戦苦闘のメモを 2023-11-15 の記事にした。もしかすると、Ubuntu用のパッケージをバグにかまわずつかえばよかったのかもしれないが。)
1986年以後のバージョンのNCAR Graphics は、図形情報を CGM (Computer Graphics Metafile) という形式のファイルに書きだす。これは1980年代に ISO の標準ともなった形式で、基本的には2次元のベクターグラフィックス (点の位置の x座標とy座標の組で図形をあらわす) の図形を記録するものだ。計算機上の表現として、character encoding, binary encoding, clear text の3種類が定義されていた。1980年代末ごろの東京大学 教育用計算機センターでは character encoding の CGM を採用していた。NCAR Graphics では binary encoding が採用されている。くわしくいうと NCAR Grapihcs のつくる CGM は 標準の binary encoding に皮をかぶせたようなもので、区別のために NCAR CGM または NCGM とよばれることもある。
NCAR Graphics には、NCAR CGM を画面で表示したり他の形式のファイルに変換したりするプログラムが付属している。Command line interface の ctrans と graphical user interface の idt だ。これによって、X Window System の窓に表示することと、PostScript のファイルに出力することができる。そのほか、HP-GL など、1980年代によくつかわれていたベクターグラフィックスの図形ファイルをつくれるが、画像 (ラスター) ファイルをつくる機能はない。わたしは、他のプログラムでは画像を PNG 形式でつくっている。NCAR CGM を PNG に変換したいのだが、どうしたらよいか。
- 2 -
わたしは、画像ファイルの形式変換に ImageMagick をつかってきた。いまでは、それから分岐した GraphicsMagick をつかうことがおおい。ImageMagick や Graphics Magick の convert で CGM をあつかえたというおぼろげな記憶があった。NCAR CGM と標準CGMのちがいは、NCAR Graphics に付属する ncgm2cgm で前処理しておけばよいだろう。
しかし、標準的にインストールした convert では「.cgm」のファイルをうけつけない。GraphicsMagick のウェブサイトを見たら、CGM をサポートするのには RAL-CGM というソフトウェアが必要だ。これはイギリスの物理学の国立研究所 Rutherford Appleton Laboratory (RAL) で開発されたものだそうだ。RAL ともうひとつの FTP サイトへのリンクがあったが、ひとつはサイトがすでになく、もうひとつもディレクトリ構成がかわっていて ralcgm にたどりつけない。
いろいろとウェブ検索してみると、ralcgm-3.50.tar.Z というソースプログラムパッケージがみつかった。展開してみると、機種・OSの指定をする必要があるようだ。ralcgm はハードウェアを操作しないのだが、ビット操作のかたまりなので、機種やコンパイラごとの整数型・浮動小数点型・文字型の内部表現にあわせてプログラムを調整する必要があるのだろう。わたしがほしいのは linux-x86-gcc というくみあわせだが、それはみあたらない。
さらにさがすと、同様なソースパッケージと Linux 用パッチファイルを提供しているものがある。CPUとコンパイラがわからないが、すくなくとも x86, gcc には対応しているだろうとおもう。Linux の Slackware というディストリビューションに対応するものらしい。2000年ごろだったら、わたしも Slackware ユーザーだったから、それをコンパイルしてインストールしていたにちがいない。
- 3 -
いまのわたしも、RAL-CGM がなければどうにもならないのならば試行錯誤してそれをインストールするのだが、NCAR Graphics の ctrans でつくれる PostScript を利用することに方向転換した。
「ctrans -device ps.color aaa.cgm > aaa.ps」で PostScriptファイルができる。つづいて GraphicsMagick の convert で「convert aaa.ps aaa.png」とすれば PNG 画像ファイルができる。ところが、PostScriptファイルに複数のページがあっても、できる画像ファイルはひとつだけで、最初のページの画像しかみえない。これはたぶん、ctrans がつくる PostScript には最小限の情報しかはいっていないせいで、convert がページのきれめをよみとれないのだ。
NCAR Graphics にはその対策はいちおうふくまれている。psplit (pssplit ではなく s がひとつ) というコマンドで、ctrans がつくったPostScriptファイルを ページごとにわけることができる。できたファイルには pict0001.ps, pict0002.ps ... のように、とおし番号をふくむ なまえがつく。
できた PostScript ファイルをひとつずつ convert で PNG に変換すればよい。ファイル名が規則的につけられているから、convert をよびだすプログラムをかけばコマンド入力は簡単にできる。とりあえず、Python で os.system から convert をよびだすスクリプトをかいた。(「os.system は古い、subprocess.call をつかうべきだ」と主張する記事も読んだのだが、対応できていない。)
PostScript からつくった画像ファイルには、画面でみるには余白がひろすぎるなどの不満もあるが、gimp などの画像ファイルを加工するソフトウェアで対応することにしよう。