- 论坛徽章:
- 0
|
引言
「為什麼我把 xxx 升了之後字就變難看了?」
「X 的字真是又醜又難設」
「Fontconfig Xft Freetype 到底是什麼關係啊!?!?」
螢幕上的字是用電腦的人整天會看到的,而用螢幕上有限的像素來有效顯示文字,又要提高文字的可讀性一直不容易。除了點陣字外,早在 80 年代就有的 anti-alias 也使得情況變得很複雜,即使已經過了 20 年,由於
1、各人的視覺喜好不同 - 沒有一種樣式可以使每一個人都滿意
2、不同的操作環境與平台以及顯示用的裝置 (CRT || LCD)
3、多國語言文字的同時顯示
所以能夠隨著自己的喜好而設定的字型是挺重要的。在各家 X desktop, toolkit 與瀏覽器的戰國時代,前後出現了許多解決方案,而
Fontconfig 是到目前為止,算是廣為被支援的一種新的不錯的方式,姑且一試,也許它還不能完全令你滿意,不過比起從前是來得有彈性多了。
警告
萬一本文有更新的版本, 也許可以在
http://fractal.csie.org/~eric/fontconfig
找到,任何使用本文中提及的方法所造成之社會成本損失將不會被負責。
版權聲明
在保留此版權聲明及原作者的情況下, 本文可以被任意轉錄。有關於更詳細的條件請見:
http://creativecommons.org/licenses/by-nc-sa/1.0/
-- EricCheng
See also:
Wprint 中文列印 Patch 與 freetype
Fontconfig
晚近的 XFree86 除了有了 freetype 的內建,加強了對於 TrueType 等向量字型的支援外,最近 Keith Packard
的 Xft 與 Fontconfig 也是一個對於字型整合所做的嘗試,在最新的 XFree86 4.3.x 與
freetype/Xft2/Fontconfig 的支援下,X 下的程式對於一個統一的字型選擇與繪製介面又進了一步。
雖然 XFree86 本身包含 Fontconfig, Fontconfig 事實上是一個可以獨立出來的介面,它是一個 library
不是一套 user app, 它所做的就是提供一套 font matching 的機制,讓使用 Fontconfig
的程式可以不必自己實作一套字型的選取方法。如此只要使用 Fontconfig
的程式愈多,單一的一套設定檔就可以被用在愈多的應用程式,應用程式本身可以利用 Fontconfig
所得到的字型名稱去畫字,也可以架構在自己原先的字型選擇架構之上 (如 Qt), 以達成對舊的設定的一定的向後相容性。
Fontconfig 有許多好處,例如:
字型的安裝。與其把要用的字型拿來放在一個目錄, 然後用 ttfmkdir / defoma / ttfm 等東西生出 fonts.dir
再指給 xtt/freetype, 再重新啟動 X font server 或 xset fp rehash, 現在只要把字型丟或
symlink 到 ~/.fonts 或任何其他經過指定的目錄, 就可以 _立即_ 開始使用了。當然在使用沒有支援 Fontconfig
的程式時, 仍然要用傳統的方法。Fontconfig 除了可以吃 TrueType, 也可以吃 Type1 或 pcf 等等傳統的點陣字。
字型 matching 的設定。雖然 Fontconfig 已經附上了一套不錯的設定檔讓在未被設定的情況下也都能夠有一個可以使用的系統,但其實對於個別字型的設定更有彈性。這個是透過 Fontconfig 所使用的 xml 設定檔達成的。稍後再說。
Fontconfig 會儘可能找出一套字,可以滿足顯示不同語言的需求。
Xft
Xft 也是一套 library, 它使用 Fontconfig match 到了所要的字型之後, 來決定該如何畫這些字。Xft
會看情況而決定要不要使用 core protocol 或 XRender 來畫字。XRender 是 XFree86 4.x 新增的
extension, 我認為這是為了保留 X 的向後相容性所新增的一個 hack, 不過因為它可以用來畫 anti-aliased
的字,目前的使用愈來愈廣泛。不過 anti-aliased text 只有在使用向量字型的時候有用, 繪製點陣字的時候就要使用 core
lib. Core library(以 x-truetype 或 freetype 作為
backend)自然也是可以畫向量字,只不過畫出來的就不能有 anti-aliased 的效果了。
有時當 XRender 不能使用時(如你是透過網路用一個舊的 X server 來執行 X apps), Xft 也可以使用 core lib 來畫字。應用程式不必為這些問題操心,達到資訊隱藏、各制湔?哪康摹 |
|