|
|
- Welcome to
Hiroshi's Home Page - |
|
|
|
||
|
||
|
▼ ▼ ▼ |
||
|
||
|
▼ ▼ ▼ |
||
|
||
|
▼ ▼ ▼ |
||
|
||
RRDTOOL日本語化…
はじめに
RRDTOOLで作成するグラフ中に日本語(漢字)を表示させることを目的とします。(>>サンプル)
今回は、作図時に設定できる文字列について、EUC漢字コードが通り、漢字フォントを表示するようにしたもので、もともと自動で表示しているもの(例えば、"Week"、"Sun"、"Mon"など)については、手をつけていません。
※このパッチによる障害等に対して、一切責任を負いません。
入手元
RRDTOOLの本家は、http://people.ee.ethz.ch/~oetiker/webtools/rrdtool/です。
日本語フォントには、東雲ビットマップフォントと、漢字12x10ドットフォントを利用しています。
ソースの解析
まず、フォント出力方法について調べます。
rrdtool-1.0.33には、gd1.3が入っており、文字列の出力には、これが用いられていることがわかりました。
そこで、アルファベットのフォントには、何を使われているかを確認したところ、src/rrd_graph.cの先頭付近で、
#define SmallFont gdLucidaNormal10 #define LargeFont gdLucidaBold12と宣言されています。
gdLucidaNormal10のフォント情報は、gd1.3/gdlucidan10.cにあり、フォントサイズは6x11です。
また、gdLucidaBold12のフォント情報は、gd1.3/gdlucidab12.cにあり、フォントサイズは7x13です。
RRDTOOLでは固定長フォントを用いているので、漢字の横幅は、アルファベットの整数倍が良いと考えました。
そこで、漢字の横幅を、アルファベットの横幅x2と決めると、このときに必要とされるフォントサイズは、12と14と決まります。
ただし、サイズいっぱいのフォントを用意すると、アルファベットに比べ高さもあり不釣合いとなってしまい、見た目が悪くなってしまったので、それぞれ10と12のフォントを用意し、周囲に空白を入れることにしましました。
次に、フォント出力の処理について調べると、gd.cのgdImageString()、gdImageStringUp()、gdImageString16()及びgdImageStringUp16()で文字列を表示する処理を行っており、そこから、実際に、個々のフォントを出力しているのは、gdImageChar()及びgdImageCharUp()であることがわかります。
今回は、文字列出力関数中で、EUCの漢字コードを見つけたときに、それぞれのサイズに該当する日本語フォントの構造体を渡し、それ用のキャラクタコードに変換、フォント出力関数に渡してやるという処理を、それぞれに追加しました。
詳しくはgd.cを参照してください。
ソース及びパッケージ
rrdtool-1.0.40に対するパッチのみ rrdtool-1.0.33-kanji.patch.gz 356,162 bytes バイナリパッケージ rrdtool-1.0.40-1.7.3j.i386.rpm 1,278,200 bytes rrdtool-devel-1.0.40-1.7.3j.i386.rpm 392,741 bytes ソースパッケージ rrdtool-1.0.40-1.7.3j.src.rpm 1,493,739 bytes 2002/11/07
現在、最新版は1.0.40です。1.0.40に同梱されているgdも1.3のため、本パッチが適用できます。
(2002/11/07)
|
||
|
▲ ▲ ▲ |
||
|
||
|
▲ ▲ ▲ |
||
|
||
|
▲ ▲ ▲ |
||
|
||
|
|
||
|
(c) Copyright 1998-2002 Hiroshi OHNO All
right reserved. |
||