QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 880|回复: 3

支持TrueType的X字体引擎大盘点

[复制链接]
发表于 2005-3-2 13:51:17 | 显示全部楼层 |阅读模式
本文来自http://lidaibin.kmip.net/index.p ... d=a_20050219_172300

支持TrueType的X字体引擎主要包括freetype、xtt、xfs和xft四种。


理论知识

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,有点累了,不想讲了,看看我的另外一篇文章“X的中文显示配置”吧。添加新字体的话执行一下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-0ft:SimSun:Medium:Size=12:encoding=iso10646-1",使用 xft实现刚才的功能(中英文使用不同的字体显示)我一直没找到方法,如果你知道的话一定记得告诉我,在此谢过了。


结束语

呵呵,大概知道的就这些了,其中某些理解或许还是错误的,如果你发现了其中的错误还请不吝赐教。
发表于 2005-3-3 13:40:14 | 显示全部楼层
眼熟
回复

使用道具 举报

 楼主| 发表于 2005-3-3 13:51:15 | 显示全部楼层
呵呵,两边都发了一次^_^
回复

使用道具 举报

发表于 2005-3-3 16:43:36 | 显示全部楼层
跟本不是一回事,不能混为一谈。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-10-5 02:22 , Processed in 0.076977 second(s), 15 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表