QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 1702|回复: 3

freetype2的X-TT中文显示。

[复制链接]
发表于 2004-12-13 15:24:37 | 显示全部楼层 |阅读模式
今天看了一下有关xtt2的中文显示方法,感觉使用该方法因该可以解决中文粗体和斜体的问题。(我在RH7.2中使用过)

但为什么现在的人越来越避免谈论xtt呢?我猜想可能xft的AA和fontconfig的方便使得我们不愿意在使用“古老”的xtt吧。但他们对cjk的支持如此之差,以至有像firefly的高手不断修正才能正确的显示中文粗体和斜体。

从x11R6.8以后xtt字体模块已经正式退休,而xtt2的代码被更好的集成在freetype2中。我们无需再在x的configuration中使用"load xtt"之类的东西。而由于xtt2的引入,新的“very lazy" method将会更好的加快cjk文字显示速度。原有的TTcap亦保留下来,这样就能正常显示粗体和斜体。(参见:http://x-tt.sourceforge.jp/documentation_gb.htm)

我虽然还未用过新的x11R68,但我想这又何尝不是一个值得推荐的中文美化的途径呢?

附上一篇旧的如何使用xtt的文章:http://www.linuxfans.org/nuke/modules.php?name=News&file=article&sid=396
发表于 2004-12-13 17:02:25 | 显示全部楼层
有关新了的 FreeType(libfreetype-xtt2) 的资料
After X-TT Project 进行了,为了在CJKV环境下,FreeType back-end 也能使用必须的X-TT的功能而进行了改良工作。其成果被吸取到 The XFree86 Project 中, 在 XFree86-4.4.0 版中,”freetype”组件,进而 xfs,Xnest同样也完全可以选择利用 TTCap 以下,列举了关于该新的 FreeType(libfreetype-xtt2)back-end 的资料。

新的 FreeType back-end 的威力
读入如日语字体和 unicode 字体一样的文字数多的 proportional 字体时,以往的 FreeType back-end 表示文字所用时间过长。为了解决此问题,新的 FreeType(libfreetype-xtt2) back-end`改良并装备了 X-TT 的 `very lazy' method 。

对以下表现调查了那个表演的结果。使用了以下单纯的编码作为试验的:
[code:1]
/* bench.c */
#include <X11/Xlib.h>
int main( int argc, char *argv[] )
{
    Display* dis;
    dis=XOpenDisplay(NULL);
    XLoadQueryFont( dis, argv[1] );
    return 0;
}
[/code:1]

字体用 Cyberbit unicode 字体。以下是在测量中使用的指令:

% time ./bench "-bitstream-cyberbit-medium-r-normal--0-0-0-0-p-0-iso10646-1"

将结果显示为图表为:


可以看出新的 FreeType back-end 的 `very lazy' method 有着令人惊异的速度。新的 FreeType back-end, 读入multi-byte字体时,该 `very lazy' method 成为有效的默认值。因此,即使不设定TTCap选项,只要使用了 FreeType back-end,就算是显示有数万的文字的 proportional 字体也不会等得着急的。


TTCap选择的 reference
下面选项是可以指定的:

fn=整数
-- 由该选项,指定 TrueType/OpenType 搜集(*.ttc, *.otc) 文件的 face 号码。
(fn : Face Number)

ai=实数
-- 由该选项指定文字的倾斜度。
(ai : Automatic Italic)

fs=[pmc]
-- 由该选项指定字体诗学的计算法。
由该选项的指定的文字被认为是由 XLFD 的 SPACING 场指定的文字,字体的韵律被计算。没有该选项时, 由 XLFD 的 SPACING 场控制韵律。
(fs : Force Spacing)
bw=实数[;整数,整数,整数]
-- 该选项,指定字体的 Bounding box 的幅度的倍率。
以分号以后的3个整数,能以象素单位微整整 width, left side bearing, right side bearing。 可以在小字体空白堵塞或是过于宽广时利用。
不存在该选择时,倍率成为1。
(bw : Bounding box Width)
ds=[ymn][;整数]
-- 希望得到双正球(打二重)效果时, 将该选项设定为 y 或 m 。
以往的双正球表示在字体太小的时有可读性降低的可能性。 如果指定 "ds=m" ,可以用象 mkbold 一样的手法在留出位图的边笔道的同时使之变为粗体字,从而改善可读性。
使 "ds=yb" 或 "ds=mb" ,把 Bounding box 的尺寸在横向扩大1个dot。
最后的整数指定为采用 mkbold 手法的最大的字体大小(象素价值)。

Screen shot : ds=y / ds=m





(ds : Double Strike)
vl=[yn]
如果指定 y ,在 proportional font 及 mono-spacing font 中, 将基于header信息(htmx)的very lazy' method(非常懒惰的方法)进行韵律计算。
该方法在想以实用的速度使用象 如 MS P Gothic 日语字体或 Bitstream Cyberbit unicode 字体的文字数多的 proportional font 的情况时有效(如是严密的方法恐怕反而会不实用)。 因为不严密进行韵律计算所以response会有相当的提高,另一方面韵律信息怎会变得不太精确(然而,由这种不精确造成问题的可能性非常小)。
在 `very lazy' method 的位图地位的最大误差以 1 象素,这与 character-cell-spacing 的时候相同。如果指定以往的 X-TT backend ”vl=y”的话,往往会显示欠缺的位图。可是,新的 FreeType back-end 使用 TrueType/OpenType 的 post table 的 italic Angle 补正韵律,所以几乎不会发生该现象。
在该选项不被设定的情况下, 根据概要信息严密计算1个字节的字体,而对于multi比特的字体 则`very lazy' method 自动有效,从而高速计算韵律。因此,新的 FreeType back-end 的使用者通常不必介意该选项。
(vl : Very Lazy metrics calculation method)
hi=[yn]
-- 将该选项设定为 n ,则 FreeType renderer 将不使用字体的暗示信息。
(hi : HInting)
cr=范围[,范围,...]
-- 限制字体的编码的范围。各自的范围,可以以
  数
  数-数
  -数
  数-
的格式指定。 也可以通过用小数点划定范围的方法指定片断的范围,但实际上并不成为片断,而是将其作为设定为覆盖各自范围的一个范围而处理。各自的数可以指定为八进制数,十进制数,十六进制数,通过在八进制数前置0 ,在十六进数前置0x 的方法与十进制数区别。
该选项,特别是在只想使用 Unicode 字体的一部分的 glyph 时有效。与 XLFD 的范围指定不同,从顾客一方看来,好像字体本身只带有被指定的范围内的 glyph。
(cr : Code Range)
eb=[yn]
-- 如果将其设定为y ,则尝试使用埋入位图。 但,需要字体带有埋入位图数据。
"eb=y" 时,使用 "ai" 选项的欧文斜体字体也使用埋入位图。在没有 "eb" 的指定时 使用"ai" 选项的欧文斜体字体则不用埋入位图。

Screen shot : eb=y / eb=n




(eb: Embedded Bitmaps)
fc=范围
-- 强制指定constancy韵律的字符编码的范围。 可以用,
  数
  数-数
  -数
  数-
的格式指定范围。 各个数可以指定为指定八进制数,十进制数,十六进制数,通过在八进数前置 0,在十六进数前置0x的方法与十进制数区别。另外,象"fc=0xaa00-0xa0ff" 一样可以前后相反地指定,例如该指定 0x0000-0xa0ff 和 0xaa00-0xffff 的范围变成 fc 指定(对 GB18030的 proportional 便利)。 该选项只在 FreeType back-end 内部为 proportional 和 mono-spacing时有效, 省略了指定的范围的韵律的计算,全部成为同样的韵律(这个韵律由”fm”选项指定)。
该选项对于实现 proportional 日语和unicode,GB18030等的 2字节文字的显示地高速化非常有效。
(fc : Force Constant spacing code range).

fm=字符编码 or fm=实数,实数,实数
-- 指定用 "fc" 选项指定的范围的文字的韵律。
"fm" 选项不被指定时, "fc" 指定的范围采用header信息的韵律。可是,该方法并不总是便利。在 "fm"选项中, 对其韵律可以以字符编码或对于header信息的 Bounding box 的幅度的倍率加以指定。如果指定了如 "fm=0x5a00" 一样的字符编码, FreeType back-end 则取出字符编码 0x5a00 的韵律, 将其韵律适用到 fc指定的范围。另一方面,如果如"fm=0.5,0,0.5" 对header信息的 Bounding box 的幅度的倍率加以指定,则该指定成为 fc 指定的范围的韵律。这样的3个实数分别与 width, left side bearing, right side bearing 相对应。
(fm : Force constant spacing Metrics).

Last Modified: 5 Dec. 2003
回复

使用道具 举报

发表于 2004-12-13 21:27:24 | 显示全部楼层
期待。
回复

使用道具 举报

发表于 2004-12-13 22:19:38 | 显示全部楼层
[quote:541f75d2a6="lilyerr"]期待。[/quote]
回复

使用道具 举报

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

本版积分规则

GMT+8, 2024-11-7 22:35 , Processed in 0.083479 second(s), 15 queries .

© 2021 Powered by Discuz! X3.5.

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