linux 下的字體引擎

linux下主要使用xtt freetype xfs xft這四種字體引擎,以下是這四種字體引擎的區別,
xtt, freetype, xfs, xft等的區別
X Window是所謂client-server結構,這裏的server管顯示(輸出)、鍵盤和鼠標(輸入)部分,而client則是你正在用的程序,比如編輯器。Server收集鍵盤和鼠標的輸入,送到編輯器這一client,編輯器經過處理後,回過來再讓server去顯示一些字到屏幕上,來回折騰。
怎樣顯示一個字呢?
一個字實際上就是一個小圖,如果小圖上的點非黑即白,就稱爲黑白點陣;如果小圖上的點可以有不同的亮度甚至顏色,則稱爲AA點陣。每個字,也就是每個小圖都有固定的編號,編輯器(client)可以只告訴server某個編號,server根據該編號去找出對應的小圖,這種方案就是所謂的server side font,如FreeType,X-TrueType等backend就屬此類;如果編輯器自己去找小圖,乾脆把小圖送給server去顯示,這種方案就是所謂client side font,Xft屬這一類。
        server side font
    FreeType backend: 即XF86Config中的freetype模塊
    X-TrueType backend: 即XF86Config中的xtt模塊
      client side font
    Xft: 設置文件是fonts.conf
還有一類,xfs,跟server side font一樣,client把字編碼傳給server,但server並不直接從字庫中讀出對應該編碼的小圖,而是把編碼再傳給另外的所謂font server,由font server去字庫找出對應的圖,返回給X server去顯示,姑且將這種方式稱爲font server font:
  font server font
    xfs: 設置文件是X11/fs/config
不管是哪一類,最終都要去字庫文件讀出對應編碼的小圖,至少對TrueType格式的字庫文件而言,xtt也好,freetype也好,Xft也好,幾乎都用到了FreeType這一字庫engine,雖然xtt沒人繼續改進,還是用FreeType 1,別人都改用FreeType 2了。正因爲大家都用FreeType字庫engine,使得xtt,freetype,Xft這些名字容易弄混,讓人頭大。解決的辦法很簡單:不要再去管什麼xtt,不要再去管什麼freetype,不要再去管什麼xfs:只要弄清Xft就夠了。

X字庫設置必讀: Juliusz Chroboczek的Fonts in XFree86
  http://www.xfree86.org/~dawes/4.3.0/fonts.html 

 

理論知識
freetype分兩個主要階段的版本:1.x和2.x。Freetype 是開源字體渲染引擎,並不只爲X設計。它的功能就是讀取Truetype字體信息,如大小、分辨率、編碼等,然後渲染成所需的位圖數據輸出。2.x與1.x 相比最大的差別就是加入了抗鋸齒功能。
其中freetype和xtt是X的內部模塊,都是使用freetype1來渲染字體。
xfs以服務的形式出現,也可以作爲X的內部模塊,使用freetype2來渲染字體。
xft也屬於一個外部服務程序,以動態鏈接的形式提供,也就是說在需要的時候才被加載,同時也只有xft支持antialias。xft使用FontConfig來自定義和選擇字體。
freetype、xtt和xfs可在X下用xlsfonts列出當前可用的X核心字體,xft可用fc-list列舉當前可用字體。
這麼多引擎到底用哪個好呢?freetype推薦使用2.x版本,所以如果當你使用的程序不支持xft的時候最好使用xfs。而對於中文的支持其實xtt的效果最好,因爲對於小字體用函數描述法算出來的中文字體效果不能讓人滿意,所以很多中文字體公司就在Truetype字體裏嵌入了位圖字體。這些位圖字體需要用特殊的方式讀出來,所有的引擎中就只有xtt能做到這一點。但xtt有個問題就是速度太慢,反正我使用debian時使用xtt的時候使用 SimSun字體很慢的,但願是我的配置有問題吧。當然了,能使用xft的時候一定要使用xft哦,xft顯示出來的字體確實很漂亮,尤其是使用 Microsoft的Tahoma字體效果特別明顯,你可以用fvwm配置着試一下,使用X核心字體-microsoft-tahoma-medium- r-normal--12-*-*-*-*-*-iso8859-1,然後再使用FontConfig來渲染試下xft:Tahoma:Medium: Size=12:encoding=iso8859-1,看看效果就知道了,gtk2和kde目前都採用xft來顯示字體。

配置
freetype 和xtt的配置很簡單,只要在/etc/X11/XF86Config-4(XFree86)或/etc/X11/xorg.conf(xorg)文件中加入FontPath 您的字體目錄然後加載相應的引擎模塊即可,注意的一點是freetype和xtt都是用freetype1來渲染字體不能同時使用的,只能加載其中一個模塊。添加新字體時只需要在你新加的字體目錄中創建fonts.dir和fonts.scale文件即可,創建方法可使用mkfontdir和 mkfontscale或者ttmkfdir,據說mkfontdir和mkfontscale創建的fonts.dir和fonts.scale有問題,但我使用時好象沒遇到過問題,如果不行的話就用ttmkfdir創建fonts.scale然後再複製一個fonts.scale爲 fonts.dir,具體操作可以看看man pages,進入你新建的字體目錄下執行mkfontdir和mkfontscale或者執行ttmkfdir && cp fonts.scale fonts.dir即可。(注:如果你不知道將FontPath和LoadModule加在什麼地方的話就別用X了哈)
xfs 的配置大同小異,xfs的配置文件爲/etc/X11/fs/config。如果需要添加字體也需要創建fonts.dir和fonts.scale,創建方法同上,注意這兒字體目錄不是添加在/etc/X11/XF86Config-4或/etc/X11/xorg.conf,而是將字體目錄添加到 /etc/X11/fs/config中的catalogue那一行中,然後重啓xfs服務/etc/init.d/xfs restart,不過你要注意在你的/etc/X11/XF86Config-4或/etc/X11/xorg.conf中是否加過了FontPath "Unix/:7100",如果沒有的話自己手動加上吧。
xft的配置稍微麻煩一些,配置文件爲/etc/fonts/fonts.conf,有點累了,看看我的另外一篇文章“ ”吧。添加新字體的話執行一下fc-cache -fv 你的新字體目錄即可。
添加了新字體後,如果是xft可以用fc-list看看你新添加的字體應該已經列出來了(這個程序是基於console的,你在控制檯就可以檢查),如果是使用freetype、xtt或xfs的話你需要進入X然後執行xlsfonts檢查是否列出了你新加的字體。

使用
用fvwm來檢驗效果是最好的了,你可以打開~/.fvwm/.fvwm2rc也可以在fvwm下打開fvwm的console模塊進行試驗,舉個例子可以簡單地加一箇中文的菜單條目,然後配置菜單的樣式。
如果只試驗freetype你可以編輯你的XF86Config-4或xorg.conf加載freetype,註釋掉FontPath "unix/:7100",如果只試驗xtt也是編輯它但不同的是加載xtt而不是freetype(如果有LoadModule freetype請註釋掉),如果只試驗xfs的話就只留下FontPath "unix/:7100"同時去掉加載freetype或xtt的行。
對於freetype、xtt或xfs的使用都是一樣的,設置fvwm的菜單樣式可以這樣設置MenuStyle * Font "-adobe-helvetica-medium-r-normal--12-*-*-*-*-*-iso8859-1,-misc-simsun-medium -r-normal--12-*-*-*-*-*-gbk-0,-*-"(對於iso8859-1字符集的文字使用helvetica字體顯示,對於 gbk-0字符集的文字使用simsun顯示,其它的自動查找吧)。
如果你要在fvwm中使用xft的話不用修改XF86Config- 4或xorg.conf,直接這樣設置fvwm的菜單樣式MenuStyle * Font "xft:Tahoma:Medium:Size=12:encoding=iso8859-1",如果要顯示中文則這樣設置MenuStyle * Font "StringEncoding=gbk-0:xft:SimSun:Medium:Size=12:encoding=iso10646-1",使用 xft實現剛纔的功能(中英文使用不同的字體顯示)我一直沒找到方法,如果你知道的話一定記得告訴我,在此謝過了。

 

本篇文章來源於 www.phpzy.com 原文鏈接:http://www.phpzy.com/php/449881.html

 

發佈了137 篇原創文章 · 獲贊 31 · 訪問量 116萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章