作者 主題: rrtool 可以畫中文字??  (閱讀 4076 次)

0 會員 與 1 訪客 正在閱讀本文。

路人甲

  • 可愛的小學生
  • *
  • 文章數: 27
    • 檢視個人資料
rrtool 可以畫中文字??
« 於: 2003-08-16 18:29 »
疑~~
看了 http://phorum.study-area.org/viewtopic.php?t=17336&highlight=rrd
為什麼 rrtool 可以畫中文字??

可否請 abelyang 大哥 解疑

以下是小弟的版本(用rpm裝的)
[root@mrtg rrd_cfg]# rpm -qa|grep rrdtool
rrdtool-1-33

abelyang

  • 酷!學園 學長們
  • 俺是博士!
  • *****
  • 文章數: 1097
    • 檢視個人資料
rrtool 可以畫中文字??
« 回覆 #1 於: 2003-08-16 21:59 »
rrdtool 不能畫中文字~~至少目前所有的版本皆不行
我是自己改程式寫出來的.不然我英文不好 :oops: ,有時有些字詞不知如何表示
所以所幸花點時間去研究 rrdtool 的 source code,將其改成 TTF (TureType Font)版本...

以自己有餘補 rrdtool 之不足而以,畢竟這類東西都沒有 support 中文,
當初我也是找了老半天,確定無解才自己寫的,至於星期幾,幾月這種字詞
是 strftime 本來就有支援 setlocale , 所以他自己會將 Sun -> 日...Jun -> 一月
我想你若懂程式就大概知到我在說什麼,若不懂程式,就是不支援中文這個答案..

我的簽名檔也是 rrdtool 畫的,再用其他的指令將圖縮小為 250 size
再用 script 來學園抓這兩數字畫出來的

路人甲

  • 可愛的小學生
  • *
  • 文章數: 27
    • 檢視個人資料
rrtool 可以畫中文字??
« 回覆 #2 於: 2003-08-18 13:07 »

abelyang

  • 酷!學園 學長們
  • 俺是博士!
  • *****
  • 文章數: 1097
    • 檢視個人資料
rrtool 可以畫中文字??
« 回覆 #3 於: 2003-08-18 14:13 »
我想這較屬於 L10N 吧~
且原來 rrdtool 即巳附
gd 1.3, 我想要作者去改變其原來架構我想是有困難的,為什麼他會用 gd1.3
其內的文件即巳說明,而 gd13 對中文的處理是有問題的,
我將其 MakeFile 中的 gcc link 改到系統的 gd2.0.25,
並且要再加 像 freetype/libiconv/libpng/libjpeg ,大概都換到最新的
原因是因為要讓 gd support 更多功能~

就 source 而言我只改了 rrdtool tarball 解開後的
gd1.3/gd.c 中這個部份

void gdImageString(gdImagePtr im, gdFontPtr f,
        int x, int y, unsigned char *s, int color)
{
        int i;
        int l;
        int bg;
        int brect[8];
        l = strlen(s);
        bg=gdImageGetPixel(im,x,y);
        bg=bg*-1;
        gdImageStringTTF(im,&brect[0], color, "/usr/share/fonts/zh_TW/TrueType/bkai00mp.ttf",10,0.0,x-2,y+10,UTF8_String((char *)s));
       
}
static char* UTF8_String(char *s)
{
 static char ob[256];
 size_t ileft,oleft;
 iconv_t cd;
 int r;
 char *ip,*op;
 cd=iconv_open("UTF-8","BIG5");
 ileft=strlen(s);
 ip=s;
 op=ob;
 oleft=256;
 memset(ob,0x00,256);
 r=iconv(cd,&ip,&ileft,&op,&oleft);
 iconv_close(cd);
 return (ob);
}

gd1.3/gd.h 中的 struct gdImagePtr 換成你系統用的 libgd 的 struct


再修改
src 及 gd1.3 目錄下的 MakeFile 中的這一行即可
LIBS = -lm -L/usr/lib -lgd -liconv


你若有興趣去找 tarball 來稍微修改一下即可,有問題我們再根據現況來討論看看..
最近在研究 SNMP/MIB , 打算將每一個 C2900 Switch Port Status 都畫在rrdtool graphic 上

路人甲對 rrdtool 有什麼心得也可以分享給大家看看~~
貢獻一篇教學文章如何呢 ? 有問題我也可以幫您看看,
或從中學習您的心得

路人甲

  • 可愛的小學生
  • *
  • 文章數: 27
    • 檢視個人資料
rrtool 可以畫中文字??
« 回覆 #4 於: 2003-08-19 23:34 »
喔!原來是要改畫圖的gd
真是感謝得到abelyang大哥寶貴的經驗 :D .

玩rrdtool是因為mrtg只能畫到兩條線,數值好像超過2G就有問題(數值一直表現為 4)
且rrtool的資料型態,圖形可自行定義(真炫) :D

對於rrdtool的了解,只在門中窺月
幾乎都是用範例來改的,再進一步的技巧可就不會了
還有一些概念也弄不清,這是很重要的.
實在沒能力能貢獻一篇文章

就小弟的感想
rrdtool要搞清楚,自己所要表現的值,該用哪種型態儲存,
時間儲存的格式會影響資料的精確度,要怎麼計算數值,
還有如何表現數值,表現很多數值也很清楚,
不會蓋過或被蓋過其他數值(好複雜的rrdtool判斷式)

因為小弟也沒什麼複雜的數值要表現,用mrtg就可解決
又方便,且還可以偷懶用mrtg把log改成RRDs格式,
就不用寫script建RRD,只需畫圖即可,
所以rrdtool一直沒進步~哈哈

還是需要abelyang大哥來幫大家解疑授教!

abelyang

  • 酷!學園 學長們
  • 俺是博士!
  • *****
  • 文章數: 1097
    • 檢視個人資料
rrtool 可以畫中文字??
« 回覆 #5 於: 2003-08-20 00:00 »
嗯~~
我也是心有餘而力不足 ~~
當初我也是先用 mrtg , 但是覺得只有二條線而感到不足
後來改用 mrtg+rrd , 發現還不錯用,但是少了數值運算的部份
(也就是 CDEF 這一部份,我覺得這一部份做得實在不錯)

我是有一個 rrdtool 教學的草稿了,不過寫得尚不完整,也是不敢貼出來
因為覺得會有許多人問一大堆問題而懶得看官方網站上詳細的說明
一般來說 mrtg+rrd 的確是很足夠了

jeffery

  • 可愛的小學生
  • *
  • 文章數: 20
    • 檢視個人資料
rrtool 可以畫中文字??
« 回覆 #6 於: 2004-02-18 22:43 »
引述: "abelyang"


gd1.3/gd.h 中的 struct gdImagePtr 換成你系統用的 libgd 的 struct


請教一下
上面這句是什麼意思 ?
因為我找了一下系統裡面本來沒有libgd
那是不是表示我要自己去抓?


剛用linux幾天而已..:p

adrianmak

  • 懷疑的國中生
  • **
  • 文章數: 69
    • 檢視個人資料
rrtool 可以畫中文字??
« 回覆 #7 於: 2004-12-07 10:47 »
我想問這修改以rrdtool 支持出中文,
但好像修改的部份是hard code的,e.g. font, char coding