中文字處理

Wednesday, March 15, 2006

Xf2、Freetype2、Fontconfig 的區別

細明體和 Freetype2 有什麼關係呀?
(新)細明體、標楷體使用 bytecode 組字法,與一般的 TrueType 格式不一樣,一般的 TrueType 是存放「筆劃」,所以字型引擎只要依照筆劃指引,就可以繪出字形,而 bytecode 則是一些虛擬指令(類似 java 的虛擬指令),這時候,字型引擎就必須化身為一個解譯器,來解釋並執行這些虛擬指令,就像 JVM 一樣,bytecode 的好處是減少字型檔案的大小。

bytecode 有三個部份為 Apple 專利,正是因為這個緣故,freetype2 預設並未打開這個 bytecode 解譯功能,所以當遇到了 bytecode 組字的字型時,就會不正常(破碎),幸好此類字型不常見,有個好消息是:freetype unstable 版已經避開了 Apple 專利部份,而且預設也是開啟 bytecode 解譯功能,可見專利問題已解決了(猜測),所以才會預設開啟。

Fontconfig 部份
1、除了中文字型名稱(嚴格來說,應是非英文字型名稱)的修改外,還有容許 CJK 漏字 1%,以及增加 CJK CharMaps,以支援較早期沒有 Unicode 的字型。
2、對系統的 fonts.conf 做了少需修改。
如果您對中文字型名稱沒有需求,小弟還是建議還是更新了吧,避免一些麻煩。

Xft2 部份
1、增加控制內嵌 bitmap 選項。
2、模擬粗體。
3、等寬字英文變寬問題。
4、AA 與非 AA 混雜造成字形糊掉問題,就是您所謂的"沙沙文字"。

Freetype 部份
1、autohint 採用日本 Akito 的 Patch。
2、啟用 gamma table,並修改了 gamma 值,讓 AA 狀態的字型更清楚,但 hinting 必須開啟,若要讓字型更細,則必須開啟 autohint,這都在 fonts.conf 中加以描述,所以小弟才建議 Fontconfig 也要更新,不單只是字型名稱需求而已。
3、啟用 bytecode 解譯功能。

Xf2 和 Freetype2 到底有什麼關係呢?
Freetype2 是字型引擎,被動地等待應用程式呼叫,而 Xft2 只是應用程式的一種,也就是說,只要您了解 Freetype2 提供的 API 函數、資料結構、模組,您事實上也可以得到 Freetype 回覆的字型資料,進而繪製在螢幕甚至是報表,Xft2 就是做類似的事情,只不過 Xft2 不是獨立的應用程式,它是一種介於應用程式與 Freetype2 之間的橋樑,它提供更高階 API 介面給應用程式開發者,讓程式開發人員不必了解複雜的 Freetype2,Xft2 可以節省程式設計很多時間。

0 Comments:

Post a Comment

<< Home