BigAdmin System Administration Portal
提交的文章:谈谈字体那些事(第三部分)
Print-friendly VersionPrint-friendly Version

字体的大小

Wei Xue,2009 年 2 月

本章来介绍字体的大小尺寸的相关知识。在此之前你肯定看到过很多关于字体的大小的内容,比如字号,12点阵字,磅等等术语。你能清楚的说出他们之间的关系吗?到底哪一个才是字体的真正大小呢?

本章将一一为您介绍与字体大小相关的知识和内容。

概念

  • DPI

DPI是量度单位,英文全写是Dots(点、小圆点、点状物) Per() Inch(英吋),用于点阵数位影像,意思是指每一英吋长度中,取样或可显示或输出点的数目。这个概念来自印刷打印界,用于计算机显示器实际应该是PPI,即PPIPixel Per Inch),每英寸像素点个数。现在提到DPI在计算机显示器上,其实就是说PPI

Dpi值越高,印出的图像会越越精细。打印机通常可以调校分辨率。例如撞针打印机,分辨率通常是6090 dpi。喷墨打印机则可达1200 dpi,甚至9600 dpi。雷射打印机则有6001200 dpi。但是对于计算机的显示器来书DPI的值则远远小于打印机,你可以用命令查看你的显示器的DPI值(Solaris中):

xdpyinfo |grep resolution

根据定义DPI的算法:

Dpi = 像素数 / 显示器屏幕大小。

如:分辨率102414寸的显示器,其dpi = 1024/14 约等于75

  • 像素 pixel

上面也提到了像素的概念。像素,为图像显示的基本单位,译自英文「pixel」,pixpicture的常用简写,加上element,就得到pixel,表示「图像元素」之意,有时也被简写为pelpicture element)或者px。单位面积内的像素越多代表解析度越高,所显示的图像就会越清晰。一个像素通常被视为图像的最小的完整采样。

  • “磅”(Point,缩写p或者pt)

磅是一个绝对的单位宽度单位, 1英寸=72磅, 1磅(1P)=0.35146mm

  • 字的号数制

汉字大小定为七个等级,按一、二、三、四、五、六、七排列,在字号等级之间又增加一些字号,并取名为小几号字,如小四号、小五号等。号数越高, 字越小。号数制的特点是用起来简单、方便,使用时指定字号即可,无需关心字形的实际尺寸,缺点是字大小受号的限制,有时不够用,大字无法用号数来表达;号数不能直接表达字形的实际尺寸;字号之间没有统一的倍数关系,折算起来不方便。尽管如此,号数制仍是目前中文表示字形规格最广泛的方法。

需要注意的是,传统标准铅字的字号大小与一般字处理软件实际输出的文字尺寸往往有一些误差,这是由于字的变倍计算处理造成的。



  • 字的点数制

点数制。是国际上通行的印刷字形的一种计量方法。这里的“点”不是计算机字形的点阵,“点”是传统计量字大小的单位,是从英文Point的译音来的,一般用小写p表示,俗称“磅”。也有人将此称为级。其换算关系通常为:

1p0.35146mm≈0.35mm 1英寸=72p

但是却不是总是如上面的公式,点数制其实又分法国点制和美国点制:

  • 要说清它我们得从印刷术 谈起。 1737年法国铸字者 Fouroier 以铅字为尺度标准建立了一种点制,后来在它的基础上又发展出了现在广为应用的点制标准。

    法国铸字者 Didot 1770年用当时法国皇家尺为标准,称1尺为12法寸,1法寸为72点,他还将12点定为1 CiceroCicero 是古代罗马的一位律师的名字。现在欧洲大陆多采用 Didot 点制,换算关系如下:

    1 p = 0.3759mm = 1/72 Royal French inch = 0.0148(1/68inch) = 1.0695pt

    1 cic = 12 p

    (注意这里的0.3759mm >0.35146mm

  • 英美两国落后于法国100余年后才采用点数制,成为 ATA 点制(也叫 Anglo-Saxon 点制),换算关系如下:

    1 pt = 0.3514598035 mm = 1/72.27 inch = 0.9350 p

    1 pica = 12 pt

    你可以发现,说英语的国家用的点比欧洲大陆的小,大约每18个点就差了1点,这样对于某些为英美国家开发的软件到了其他国家时就可能出些麻烦。为了解决两种体系的冲突,一种办法是大家都采用公制的长度标准,但是似乎只有日本和德国等一些欧洲国家在部分的采用。

    (注意看看最初的定义,其实指的就是这个美式的点制。)

事情还不是这么简单,在不同的程序中1点代表的距离也会有微小的差别,比如在 Postscript 使用的是 big pointbp)。

	1 pt (TeX)        = 0.3514598035 mm = 1/72.27 inch
	1 bp (Postscript) = 0.3527777778 mm = 1/72    inch

关于点数制更多内容:

http://en.wikipedia.org/wiki/Font_size

http://www.sizes.com/tools/type.htm

http://www.artlebedev.com/mandership/81/

汉字大小的标准,称为字号,前文也说过,看看字号和点制之间的转换关系。在wiki的对照表中发现中文 Microsoft Word 中用的竟然是 Didot 点(法式点制),很奇怪,如果再换算成 TeX 使用的点(美式点制度),结果如下:

初号:42   p = 44.9 pt
小初:36   p = 38.5 pt
一号:26   p = 27.8 pt
小一:24   p = 25.7 pt
二号:22   p = 23.5 pt
小二:18   p = 19.3 pt
三号:16   p = 17.1 pt
小三:15   p = 16.0 pt
四号:14   p = 15.0 pt
小四:12   p = 12.8 pt
五号:10.5 p = 11.2 pt
小五:9    p = 9.6  pt
六号:7.5  p = 8.0  pt
小六:6.5  p = 7.0  pt
七号:5.5  p = 5.9  pt
八号:5    p = 5.3  pt



在字处理中,点数制与号数制并存使用,互为补充,两者相互之间有对应的折算关系,可以通过查表得到。由于计算机处理汉字时,字大小可以灵活地无级变化,且对于一些大字,号数制有限的号数也无法计量,所以计量单位比较小的点数制更适合字处理系统对字形的计量。



计算实例讲解

通过以上的这些讲解,读者应该已经知道了字体大小的一些概念和内容,下面我们来看几个实际的例子,看完之后相信你应该明白字体的大小的一些转化关系。

Firefox为例,无论在哪个操作系统中,Firefox 浏览器默认的 Dpi都是 96,所以对firefox来书,9pt的字,大小等于12px字。

9pt = 9 * 1/72 * 96 = 12px

假如Dpi128,那么9pt的字,实际大小为:

9pt = 9 * 1/72 * 128 = 16px

这说明Dpi越大,字的包含的像素号越大。



下面来计算一个9pt的字物理长度到底是多少cm(这个单位我们更熟悉),可以计算如下:

先使用尺子,丈量你的显示器的可见宽度 (例如 11.2992 英寸),除以横向分辨率 (例如 1024 像素),得到的就是每个像素的物理长度。现在可以计算9pt的字物理长度到底是多少cm

  9 * 1/72 * 96 * 11.2992 / 1024 = 0.1324 英寸 = 0.3363 厘米

或者使用前面已经得到的像素数12直接计算:

12 * 11.2992 / 1024 = 0.1324 英寸 = 0.3363 厘米

如果更改Dpi128,同样对于11.2992 英寸的显示器,分辨率设置

16 * 11.2992 / 1024 = 0.1807872 = 0.4502厘米

可以看出同样的显示器分辨率下,Dpi增加字就变大。

X Window系统中的DPI

因为我在Solaris系统中现在使用的是X.orgX window系统,所以下面主要来谈谈X Window系统中的DPI

在通常设置字体大小的时候,让用户选择的多是pt的大小,应用程序使用X serverDpi值将pt值转化为对应的px(像素值)。例如,对于“Sans 10”字体,如果X server 被配置为75Dpi,那么它的像素数将比X server 被配置为75Dpi的时候少。考虑以下几个问题

  1. XFree86 Xorg server是怎么计算DPI的呢?

    X serverDPI 由以下几点决定:

  • -dpi命令行参数,这个具有最高的优先级。

  • 如果没有制定dpi参数,可根据X config 文件中的DisplaySize得到DPI,即屏幕的 resolution

  • 如果也没有DisplaySize,从DDC提供的监视器的大小也可以得到DPI,即屏幕的 resolution

  • 如果DDC没有指定大小,那么使用默认的DPI75

xdpyinfo | grep resolution可以检查当前DPI

  1. X应用程序是如何选择DPI的?

    X上的传统字体会选择75或者100中的一个作为DPI值。如何选择就看哪个在X font路径中被先列出来了。

    Xft/fontconfig添加了一个新的参数Xft.dpi作为X 资源(resource)。如果设定这个值,那么Qt 3 GTK+ 2的程序在渲染(Rendering)的时候都会用这个值。如果没有设定,那么GTK+-2 Qt 3 将会使用X displayDPI

Gnome也提供了设定Xft DPI的接口,“gnome-settings-daemon”运行时,运gnome-f ont-properties在对话框中就可以看到一个设置DPI的。这个实际是通过XSETTINGS, 设置Xft.dpi 这个X resource。在“gnome-settings-daemon”之后运行的Qt程序都将使 用用通过gnome配置的DPI

  1. 如何选择默认的字体大小

    有标准的DPI对于选择一个好的默认字体大小非常重要。Windows 机器中,作为一个全局改变字体的方法就是使用DPI值。如Windows XP的默认DPI值为96 。改变大字体模式增加DPI120 。用户还可以指定一个自定义DPI值。默认应用程序在Windows上的字体是“ Tahoma 8 ” 。( 在不同DPI小实际大小不同)。

    MacOS下的标准为72DPI,这意味着同样磅书(字号)的字体,在Mac上较小于在Window。默认的MacOS下的笔记本电脑是“Lucida Grande 13 ”

    GTK+应用程序的默认字体为“Sans 10”。选择这个10pt的字号,看起来好像假设默认配置96DPI

  2. DPI实践

在桌面系统(Desktop)中DPI,是这样定义的:

  • 如果“gnome-settings-daemon”运行,默认96DPI,而且GTK+/Qt 使用这个DPI值。你的字体会入你所期望的显示。

  • 否则,一些发行版本启动X时,使用参数“-dpi 100”,字体也可以按照预期的显示。

  • 如果你的监视器通过DDC声明大小,X将根据这个尺寸算出DPI。这个DPI值是不可靠的,这样不是决定字体大小的好方法。结果就是字体变得过大或者过小。

  • X server使用75DPI,字体显得很小。

可以在http://scanline.ca/dpi/ 看到Billy Biggs关于DPI的文章。想了解更多DPI的知识这里 http://www.linuxsir.org/bbs/showthread.php?t=266659 有很全面的介绍,内容已经涉及到字体的配置了,本章暂不谈及配置的内容。




Unless otherwise licensed, code in all technical manuals herein (including articles, FAQs, samples) is provided under this License.


BigAdmin