漢字智慧型編碼與應用研討會 中央研究院 資訊科學研究所 2003/3/17~19 動態字形產生器之原理與實作 易符智慧科技 葉健欣 前言: 解決缺字的根本方法,是在計算機中建立字形的制式表達,有限部件排列組合,理論上可以描述任何字形。資訊所文獻處理實驗室做了大量的工作,解決了所有漢字的表達、排序、查詢、交換等問題。由於「漢語大字典」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
月00=00005B15000267DB000124F400005E160001CB160001 每個 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
|