某大老曾經說過「都 2006 年了還在搞輸入法. XD」,可是都 2011 年了,包含 Linux 下許多地方的細明體與標楷體,顯示破碎的問題還是都沒有解決。
背景知識
目前流通最廣的字型,是稱之為True Type Font (TTF)的格式。TTF 是採用向量的方式,以二階貝茲曲線來描述字符的外框(outline),如此一來,無論是多大多小的字型,都可以透過數學式產生,不會有點陣字型放大時出現鋸齒方格的問題。
但這畢竟只是在有足夠解析度的理想情況,當需要顯示小字型的時候,問題就來了。TTF有幾種解決的辦法:直接使用最佳化過的點陣字型取代、採用半色調抗鋸齒、設計者提供筆劃資訊讓字型描繪器做最佳化(hinting)。最後者是將筆劃以bytecode來描述,需要一個直譯器來解讀。(bytecode interpreter, 簡稱 BCI)
開放源碼的FreeType引擎,完整支援這些最佳化的手段。在 Linux 下,過去普遍採用第一種解決法:螢火飛(id: firefly)以純手工的方式,補足文鼎字型的沒有內嵌點陣字的缺點。中國大陸的網友也發起了文泉驛點陣字型補足的計畫,在firefly的基礎上,由眾網友補足至Unicode約27842個漢字。因為單單使用半色調的方式,很容易在筆劃落在兩個圖素中時,造成朦朧不易閱讀的困擾。而不採用筆劃資訊最佳化的理由,是在於有三個蘋果電腦(Apple)的軟體專利。即是FreeType採用「無塵室」逆向工程開發出來,並不能讓 Linux 發行商免於權利金的支出。
相對來說,英文的問題小得多,主要是筆劃少且結構簡單,筆劃歪一點或糊一點也都還看得出來。當然後來發展出了次像素描繪(sub-pixel rendering),甚至用特殊的演算法去「猜」得筆劃的骨幹,再進一步微調筆劃的位置到像素的中央(grid-fitting),這個技術稱之為autohinting或autofitting。如此一來就避過的BCI的專利權問題。
參考資料:
http://tldp.org/HOWTO/Font-HOWTO/notgood.html
http://tldp.org/HOWTO/Font-HOWTO/bci.html
http://www.freetype.org/patents.html
http://avi.alkalay.net/2007/01/freetype-with-bytecode-interpreter.html
http://www.freetype.org/autohinting/background.html
http://www.linuxfans.org/bbs/archiver/?tid-92200.html
http://www.grc.com/cleartype.htm
No comments:
Post a Comment