漢字智慧型編碼與應用研討會

中央研究院 資訊科學研究所 2003/3/17~19

動態字形產生器之原理與實作

易符智慧科技 葉健欣

[email protected]

前言:

解決缺字的根本方法,是在計算機中建立字形的制式表達,有限部件排列組合,理論上可以描述任何字形。資訊所文獻處理實驗室做了大量的工作,解決了所有漢字的表達、排序、查詢、交換等問題。由於「漢語大字典」54000字形是以TrueType 格式儲存,佔據空間太大,不利在網路上使用,最大的缺憾是,受限於系統的架構,無法顯示所有構字式能描述的字形。

有鑒於此,我們以「漢字字形資料庫」為基礎,製成了「動態字形產生器」,有「構字式」即有「字形」,擺脫了「字形檔」和「造字檔」的限制。

在開發的過程中,得到謝清俊教授、莊德明先生的鼎力支持,戚桐欣老先生的中易系統,啟發了我們對筆劃筆順的分類索引方法,在此一並致謝。

 

目標:

「字形產生器」並不是新穎的觀念,早在 1971 年,謝清俊教授就提出這個想法,倉頡輸入法的發明人朱邦復先生,多前就有了具體的成果。

我們最初的動機,是希望做出一個容量小,耗電低,適用於嵌入式設備的向量中文字庫,Bitmap 功能有限,而 TrueType 又太複雜,最後決定不理會現有方案,由中文的本質出發,從頭打造一個理想的中文環境。

我們訂下了以下的目標:

1)    滿足異體字,避諱字,錯別字,新字的顯示、交換及輸入的需求。

2) 與平台無關,容易移植

3) 內含筆劃筆順訊息

4) 結構精簡,方便用硬體線路加速

5) 符合Unicode標準

6) 容量小

7) 速度快

 

 

字形產生器架構:

輸入:Unicode 內碼,構字式(含比例參數,字框),字級,字體等。

輸出:Bitmap 字形或向量字形(座標)

 

資料結構:

字形資料只有兩種,一「複合部件」可以由其他部件組合而成,二「末級部件」無法再分解的部件。

a)複合部件

=部件[異字面]字框, 部件[異體字面]字框

其中,[部件]為Unicode 內碼,異體字面為1byte,字框為4byte,定義了256*256空間中的一個矩形。字框的結為:左上角x座標,左上角y座標,寬度,高度。

例:

00=日00191645B0月00661183DF

b)末級部件

三種基本指令:0=MoveTo , 1=LineTo, 2=Curve

繪圖動作:指令,X,Y  ( 共 4bytes)

末級部件=繪圖動作,繪圖動作,繪圖動作…

曲線公式採用二次貝氏(Quadric Bezier)。

例:

00=00003C1A00013CE900003C280001C
1280001C1E800003C770001C17700003CCD0001C1CD

00=00005B15000267DB000124F400005E160001CB160001
CBE20002C4F200019DE800005E520001
CB5200005E920001CB92

每個 MoveTo 指令,可視為筆劃起點,MoveTo 指令數,即筆劃數,根據筆劃的控制點數量及相對位置,很容易得知筆劃的種類,目前可以由程式自動算出「中易八法:直、橫、直點、橫點、順彎、逆彎、撇、捺」及大陸的標準「五筆字形:橫、直、撇、點、折」。此資訊可做為筆劃和手寫輸入法的基礎。

描述末級部件的骨架,資料量少,省下填充筆劃的步驟,並可以自由指定粗細。

描述末級部件的外框,資料量和運算量大增,不過可以得到豐富美觀的字體。

 

組字原理:

利用「遞迴」的方式,逐步將構字訊息還原為字形。

Procedure 繪製末級件 ( 部件內碼 , 字框 )

  根據「繪圖動作」,畫出字形

 

procedure 畫字 ( 內碼 , 字框 )

   若為 末級部件 繪製末級部件 結束

   讀取字形結資料

   對每一個子部(進入迴圈)

       計算子字

       遞迴呼叫畫字 (子部件內碼, 子字框 )

   迴圈結束

部件、筆劃變化:

  將基本筆劃也視作「末部件」,並加上兩個指令,便可以描述所有筆劃變異及部件變異。以此為基礎,可自由定義「避諱字」。

部件及筆劃的變化可以歸納為以下情況:

1)    增加筆劃、增加部件:按部件方式在構字式中處理。筆劃也是「末級部件」。

2) 刪除某個筆劃:指令後帶1byte 參數,表示減去第n個筆劃。

3) 移動或縮放某個筆劃:指令後帶5byte,示第n個筆劃,差值和縮放系數。

4) 減去某個部件:指令後帶1byte 參數,表示減去第n個部件。

5)  移動某個部件:指令後帶5byte,示第n個部件,差值和縮放系數。

 

字形容量:

以「骨架字體」為例,20000字只需 300K,Unicode CJK 82000 字集,僅佔1.5MB左右。並且可以有「宋、黑、圓」粗細變化。字形產生速度為 TrueType 的十倍以上。

 

應用:

1)    TrueType模擬器:將此字形產生器,在Windows 模擬成標準TrueType字形檔,讓所有應用程式調用。缺點是程式只能在 Windows 2000/XP 下執行。

2) 編輯器元件:支援將構字式轉換成字形,並可動態製作缺字。(展示)

3) IE 模組:將網頁的構字式,於客戶端轉換為成字形。

 

展望

1)    更多更精美的字型:感謝北京中易公司提供了宋體部件庫。

2) 更多系統的支援:目前正進行Free-Type及Oberon的移植工作。

 

參考資料:

1) 漢字綜合索引字典(民國68.10.10)-字根形碼索引說明 page 27.

2) 漢字字形資料庫 http://www.sinica.edu.tw/~cdp

3) 朱邦復 中文字形產生器 http://www.cbflabs.com/down/show.php?id=25

4) 中易系統 戚桐欣 http://www.cbs.com.tw

5) 北京中易 http://www.zhongyicts.com.cn

 

上一頁