英文矢量字型的Hinting 技術
那為什麼英文矢量字型就可以直接使用 ClearType 來進行平滑顯示呢?這是因為大多數優秀的英文字型並不是採用內嵌點陣的方式來進行最佳化的,它們採用的是一種叫做 Hinting (字形微調)的技術來對小字號的顯示進行最佳化。
我們知道,矢量字型是可以無限平滑縮放的,在使用的時候,要通過作業系統的字型引擎自動的解析渲染為實際的像素,才能在螢幕上顯示出來。但是在字號很小的時候,由於能使用的像素非常有限,這種自動解析會出現很多問題,例如筆畫粗細不勻,文字之間高低不齊,甚至筆畫模糊無法識別等。因此必須由字型設計師人工干預,在矢量字型檔中嵌入一些附加的提示信息,來告訴字型渲染引擎在某個特定的字號下面,應該如何對這個字元的細節進行修正,才能準確的顯示。這種在矢量字型中嵌入的提示信息,就叫做 Hinting 。
中文字型套用Hinting技術的複雜與難點
對於中文字型來說,這種提示就更為重要,因為中文的筆畫繁多,自動解析的錯誤也就更多更嚴重。在字號更小的情況下,根本無法顯示全部的筆畫,這時候還需要設計師在不影響整體的情況下,對筆畫進行取捨,去掉一些不影響識別的筆畫,否則這個文字就會因糊成一團無法識別。 Hinting 調整的範圍需要涵蓋各級小字號,一般最少要包括 9px - 18px 這個常用的字號區間。這種 Hinting ,即使是對於非常有經驗的設計師,也是非常高難度而且費時費力的工作。
我們知道英文只有 26 個字母,但是對於中文的漢字情況就複雜的多了,僅僅是最常用的漢字就有 6000 個,然後為了在簡繁體混排時候能完美的顯示,就必須同時包含繁體和簡體兩套字元,再加上眾多的不常用但是會在古籍文獻中非常重要的生僻字,一套比較完整的大字元集字型檔所包含的字元數目將接近 3 萬個。僅僅是這矢量造字的工作就是非常浩大的。
這還不算,作為一套功能完整的正文字型,還需要考慮到斜體和粗體的顯示。所有的斜體狀態,也同樣必須由設計師對不同的字號指定不同的 Hinting ,否則就會有顯示問題。為了更完美的顯示粗體,微軟決定將標準體和粗體分開,作為兩套單獨的字型來設計,安裝時也是兩套字型,但在系統中使用時是顯示為一套字型的不同狀態。這套單獨的黑體也同樣需要單獨造字,然後指定一系列的Hinting和斜體Hinting 。因此要開發一套優秀的中文大型字型檔,耗費的人力物力是驚人的。這也正是這套字型會如此昂貴的原因之一。
開發包含完善 Hinting 信息中文字型的必要
Hinting信息是評價一款優秀矢量字型的一個重要指標,良好的Hinting能在小字號下面提供和內嵌點陣字一樣優秀的顯示質量,同時又降低記憶體的消耗。雖然我們現在已經擁有不少不錯的矢量中文字型,但適合螢幕顯示的正文字型很少,而包含完善 Hinting 信息的,一個也沒有。
CJK 地區Vista 版本全新設計的專用字型
實際上不僅僅是中國大陸,整個 CJK 地區(中日韓)都要面臨這個全新設計字型的問題。從現在已經發布的版本來看,各國的 Vista 版本都有全新設計的專用字型,中國大陸地區的是我們已經知道的的微軟雅黑,中國台灣地區的是微軟正黑體,日文地區的是 Meiryo (據說這個名稱來源於“明了”或者“明流”的讀音),韓國地區的則是 Malgun 。
對於微軟雅黑和微軟正黑,我們不好簡單的用簡體或者繁體來區分他們,因為這兩套字型都同時包含了比較完整的簡繁體漢字,以確保在簡體和繁體混排的頁面上都能夠完美的顯示。但由於兩岸的文教部門在各自的文字規範中對漢字的寫法規定有很多細節上的不同,所以這兩套字形在正式場合是不能混淆使用的。同樣的,日文的Meiryo字型中也包含了大量的繁體漢字,不過由於漢字在日本也經過了上千年的演變,日文中的漢字寫法和中國大陸和台灣也有著相當的區別。