linux字体技术原理
发表于:2007-07-04来源:作者:点击数:
标签:
我们要理解X的字体引擎. X中支持Truetype字体(一种可放缩字体) 的主要有四种引擎. freetype, xtt, xfs和Xft. 首先, 我们要理解X的字体引擎. X中支持Truetype字体(一种可放缩字体) 的主要有四种引擎. freetype, xtt, xfs和Xft. 其中freetype 和 xtt 是 X 的内
我们要理解X的字体引擎. X中支持Truetype字体(一种可放缩字体) 的主要有四种引擎. freetype, xtt, xfs和Xft.
首先, 我们要理解X的字体引擎. X中支持Truetype字体(一种可放缩字体) 的主要有四种引擎. freetype, xtt, xfs和Xft.
其中freetype 和 xtt 是 X 的内部模块. 使用的都是freetype1渲染引擎.
Xfs 和xft 是外部服务程序. xfs 是系统级的字体服务程序, 也可以作为X的内部模块, 使用的是X 内部的freetype2. Xft 和其他类库一样, 只有被调用的时候才被加载. 其中只有xft才有antialias 支持.
这里有必要讲讲freetype. Freetype 是
开源字体渲染引擎, 并不只为X设计. 它的功能就是读取Truetype字体信息, 如大小, 分辨率, 编码等, 然后渲染成所需的位图数据输出. Freetype 现在的版本是 2.x, 与1.0 相比, 最大的差别就是加入了抗锯齿功能.
有这么多引擎,到底要用哪个好? 其实我们目前为止, 支持中文最好的还是xtt. 因为小字体的时候, 用函数描述法算出来的中文字体效果不能让人满意, 所以很多中文字体公司就在Truetype字体里嵌入了位图字体. 这些位图字体需要用特殊的方式读出来, 所有的引擎中就只有xtt能做到这一点.
我们下一步就是将字体添加到X中, 使xtt可以正确读取, 这样就可以了.
首先, 由于要配置
Linux系统文件, 我们需要用root帐号进入, 相当于
windows下的administrator.
X的配置文件是/etc/XF86Config-4 (比较新的显卡) 或者是 XF86Config (比较老的显卡). 用你喜欢的文本编辑器打开, 如 kedit或gedit.
打开后我们发现配置文件分成很多个Section, 我们首先要配置的就是 Section "Files" , 这个部分描述了X所要调用的文件信息.
要加入一个字体目录, 只需在里面插入一行 FontPath "目录名" 就可以了, 如:
Section "Files"
# Multiple FontPath entries are allowed (they are concatenated together)
# By default, Mandrake 6.0 and later now use a font server independent of
# the X server to render fonts.
FontPath "
unix/:-1"
FontPath "/truetype" # 插入一个字体目录
EndSection
然后, 我们让X加载xtt字体引擎:
找到Section "Module", 像这样修改:
Section "Module"
# Load "dbe" # Double-Buffering Extension
# Load "v4l" # Video for Linux
Load "extmod"
Load "glx
# Load "type1" # type1 模组是渲染type1字体的, 和xtt冲突, 必需屏蔽
# Load "freetype" # freetype 模组是渲染Truetype字体的, 和xtt冲突, 必需屏蔽
Load "xtt" # 加入xtt模组引擎
EndSection
好了, 现在xtt会自动去 /truetype 里找字体.
现在开始拷贝字体到 /truetype里去, 先要在根目录建一个truetype目录, 打
mkdir /truetype
就可以了.
从
windows分区拷贝要先mount, 就是作一个联接, 将Linux目录连到
windows分区. 在根目录下建一个"c"目录.
mkdir /c
然后
mount /dev/hda1 /c
这样就将
windows下的C盘 联接到我们Linux下的/c目录了, 进入/c, 应该可以看到你C盘的文件.
然后, 进入/c 中的字体文件目录, 一般在window下面的Fonts里, 注意目录名大小写在Linux下面是有区别的.
拷贝字体文件到 /truetype里, 打
cp simsun.ttc /truetype/simsun.ttf
cp tahoma* /truetype/
这样就将我们所需要的字体文件拷贝到truetype 里了.
下一步我们要设置字体文件, Linux中X的字体设置很烦锁, 不像
windows一拷贝就完事, 初级阶段嘛, 大家还是忍忍吧, 呵呵.
1. 建立字体信息文件fonts.dir
如下
24
simsun.ttf -misc-SimSun-medium-r-normal--0-0-0-0-c-0-gb2312.1980-0
ai=0.3:simsun.ttf -misc-SimSun-medium-i-normal--0-0-0-0-c-0-gb2312.1980-0
ds=y:simsun.ttf -misc-SimSun-bold-r-normal--0-0-0-0-c-0-gb2312.1980-0
ds=y:ai=0.3:simsun.ttf -misc-SimSun-bold-i-normal--0-0-0-0-c-0-gb2312.1980-0
tahoma.ttf -misc-SimSun-medium-r-normal--0-0-0-0-p-0-iso8859-1
ai=0.3:tahoma.ttf -misc-SimSun-medium-i-normal--0-0-0-0-p-0-iso8859-1
tahomabd.ttf -misc-SimSun-bold-r-normal--0-0-0-0-p-0-iso8859-1
ai=0.3:tahomabd.ttf -misc-SimSun-bold-i-normal--0-0-0-0-p-0-iso8859-1
simsun.ttf -misc-SimSun-medium-r-normal--0-0-0-0-p-0-gbk-0
ai=0.3:simsun.ttf -misc-SimSun-medium-i-normal--0-0-0-0-p-0-gbk-0
ds=y:simsun.ttf -misc-SimSun-bold-r-normal--0-0-0-0-p-0-gbk-0
ds=y:ai=0.3:simsun.ttf -misc-SimSun-bold-i-normal--0-0-0-0-p-0-gbk-0
simsun.ttf -misc-SimSun-medium-r-normal--0-0-0-0-p-0-fcd8859-15
ai=0.3:simsun.ttf -misc-SimSun-medium-i-normal--0-0-0-0-p-0-fcd8859-15
ds=y:simsun.ttf -misc-SimSun-bold-r-normal--0-0-0-0-p-0-fcd8859-15
ds=y:ai=0.3:simsun.ttf -misc-SimSun-bold-i-normal--0-0-0-0-p-0-fcd8859-15
simsun.ttf -misc-SimSun-medium-r-normal--0-0-0-0-p-0-iso8859-15
ai=0.3:simsun.ttf -misc-SimSun-medium-i-normal--0-0-0-0-p-0-iso8859-15
ds=y:simsun.ttf -misc-SimSun-bold-r-normal--0-0-0-0-p-0-iso8859-15
ds=y:ai=0.3:simsun.ttf -misc-SimSun-bold-i-normal--0-0-0-0-p-0-iso8859-15
simsun.ttf -misc-SimSun-medium-r-normal--0-0-0-0-c-0-iso10646-1
ai=0.3:simsun.ttf -misc-SimSun-medium-i-normal--0-0-0-0-c-0-iso10646-1
ds=y:simsun.ttf -misc-SimSun-bold-r-normal--0-0-0-0-c-0-iso10646-1
ds=y:ai=0.3:simsun.ttf -misc-SimSun-bold-i-normal--0-0-0-0-c-0-iso10646-1
第一行的24表示下面一共有24行设置 (好像有点傻) , 其他的格式都差不多:
ds=y:ai=0.3:simsun.ttf -misc-SimSun-bold-i-normal--0-0-0-0-p-0-gbk-0
说明:
simsun.ttf: 字体文件名
ds=[yn]: ds是xtt的功能, 设成"y" 表示粗体, "n" 表示正常.
ai=Real_number: 表示倾斜度. 不设表示自动.
misc : 表示字体的类别
SimSun : 是字体的名称
bold : bold 表示粗体, 其他如medium表示正常,
i : 表示斜体, r 是正常
p: 可变长度, c 是正方形, m是固定宽度
gbk: 字体编码
这里大家发现我们还使用了tahoma英文字体, 这样替换, 系统读取Simsun英文字体的时候, 就会用pp的tahoma替代.
好了, 现在存盘. 然后拷贝一个到fonts.scale
cp fonts.dir fonts.scale
然后拷贝编码文件 encodings.dir 到目录里来.
cp /usr/X11R6/lib/X11/fonts/encodings/encodings.dir /truetype
好, 重起, 把KDE, mozilla, galeon 等等所有默认字体都改成simsun, 哈哈, 是不是比从前漂亮了很多?
大家还是把这几个配置文件备份起来, 以后安装的时候就不用再设置了.
这里顺带说一下其他几个字体引擎的配置:
xfs : 配置文件是 /etc/X11/fs/config
xft : 配置文件是 /etc/X11/Xftconfig
xft 的配置相对来说比较容易, 只要将字体拷到配置文件中dir 指定的任何一个目录就可以了. 如果要小字体不显示AA, 可以在末尾加入:
match
any size > 8
any size < 17
edit
antialias = false;
match
any pixelsize > 8
any pixelsize < 17
edit
antialias = false;
这样 8~17号的字体就不会用抗锯齿功能了.
原文转自:http://www.ltesting.net