过去我们经常接触的字库类型有两种,它们分别是TrueType字库和PostScript字库。
TrueType是由Apple和Microsoft在1991年共同推出的,供前端排版时显示和打印输出。它用数学函数描述字体轮廓外形,含有字形构造、颜色填充、数字描述函数、流程条件控制、栅格处理控制、附加提示控制等指令。TrueType采用几何学中二次B样条曲线及直线来描述字体的外形轮廓,其特点是:TrueType既可以作打印字体,又可以用作屏幕显示;由于它是由指令对字形进行描述,因此它与分辨率无关,输出时总是按照打印机的分辨率输出。无论放大或缩小,字符总是光滑的,不会有锯齿出现。但相对PostScript字体来说,其质量要差一些。特别是在文字太小时,就表现得不是很清楚。虽然打印质量没有PostScript字库好,但是完全可以满足一般用字的需求。
PostScript是Adobe于1985年发表的文件描述技术,按该 PostScript页面描述语言语法定义的字库就是PostScipt字库,其主要特点是可以精确地描述绘制字型,因而按印刷工业中的质量标准,PostScript字库在平滑性、细节和忠实性方面比TrueType字库要好。PostScript字库一般装于后端输出设备如激光打印或RIP软件中,而它在前端的使用需要依靠特殊的软件比如Adobe 的ATM,由于PostScript字库在操作系统软件中的兼容性不是很理想,目前主要还是用于后端输出。
OpenType也叫Type 2字体,是由Microsoft和Adobe公司开发的另外一种字体格式。它也是一种轮廓字体,比TrueType更为强大,最明显的一个好处就是可以在把PostScript字体嵌入到TrueType的软件中。并且还支持多个平台,支持很大的字符集,还有版权保护。可以说它是Type 1和TrueType的超集。OpenType标准还定义了OpenType文件名称的后缀名。包含TureType字体的OpenType文件后缀名为.ttf,包含PostScript字体的文件后缀名为.OTF。如果是包含一系列TrueType字体的字体包文件,那么后缀名为.TTC。
OpenType的主要优点有: 1)增强的跨平台功能 2)更好的支持Unicode标准定义的国际字符集 3)支持高级印刷控制能力 4)生成的文件尺寸更小 5)支持在字符集中加入数字签名,保证文件的集成功能。
Adobe和Microsoft从1995年就开始着手联合开发OpenType项目,该项目除了开发一种新型的跨平台字体文件格式外还旨在为用户提供具有更丰富排版特性的字体格式,目前该字体格式已经成为一种业内标准,越来越多的软件支持OpenType字体格式,越来越多的字体厂商将自己的字库升级到OpenType字体格式。
Microsoft从Windows 2000系统开始兼容OpenType字库,其系统自带的西文字库都已升级到了OpenType字体格式,苹果公司也从MAC OS X开始完全兼容OpenType字库。而Adobe 公司不仅将自己Adobe 字体全部升级到OpenType格式,还推出Adobe Creative Suite 2 软件包,其中的InDesign,Illustrator 和Photoshop对OpenType 的排版特性都有非常好的支持。
同一个OpenType字体文件可以用于Mac OS,Windows 和 Linux系统,这种跨平台的字库非常方便于用户的使用,用户再也不必为不同的系统配制字库而烦恼了。我们从以下几个方面更详尽地了解一下OpenType字库:
A、 文件结构
从OpenType文件结构来说,确切地讲它是TrueType 格式的扩展延伸,它在继承了TrueType格式的基础上增加了对PostScript字型数据的支持,所以OpenType的字型数据即可以采用TrueType的字型描述方式也可以采用PostScript的字型描述方式,这完全由字体厂商来选择决定。从文件结构的角度来讲OpenType或许并不是一种真正新的字体格式,但是该字体格式所增加的排版特性却从功能上为用户开辟了新的用字方式,为用户提供了更高效率的排版模式。
B、 字型描述方式
OpenType字体带有“O”图标。如果在双击Arial字体文件,可以看到如下画面:
https://p-blog.csdn.net/images/p_blog_csdn_net/brucehuang1982/EntryImages/20091025/font.PNG
“OpenType Font,Digitally Signed,TrueType Outlines”说明这款OpenType字库采用的就是TrueType描述方式,这种字库在原有的TrueType字库的基础上增加入了OpenType的排版特性使其升级到了OpenType字库格式,这些排版特性的加入可以更好地控制字型的替换和排版位置。
过去前端可使用的PostScript字库很少,一般是Type1字库,它仅能容纳256个字符,显然这种字型格式不适合我们的中文字库,并且不是所有软件都支持这种格式。而OpenType字体格式不仅可以包含上万的字型,而且兼容性非常好,对于图形或排版的专业人员来说前端使用CFF OpenType字库是很好的选择。目前Adobe在大陆发行的Adobe CS 2 专业版、标准版、InDesign CS2软件均提供一张汉仪开元字宝光盘,该产品就是30款 CFF OpenType 字库。
C、 编码方式
OpenType字体格式采用Unicode编码,Unicode是国际编码标准,它为不同语言的字型分配了唯一的编码,几乎包含了世界上的所有字符,每个字符都有一个单一的Unicode值,所以在同一款OpenType字库中可以同时包含很多种语言的字型,比如西文、中文、韩文、日文、俄文等,从这方面讲OpenType是一种兼容各种语言的字体格式。
目前OpenType 可以包含65,000 多个字型,对于中文字库而言最基本的字汇应该包含GB2312-80标准的6763个常用字型,这些字应该能满足一般用户的使用,对于户籍管理、银行系统和出版社等用户而言需要2万多字甚至7万多字的支持。
D、 排版特性
这是OpenType字体格式最突出的特点,它可以协助排版用户更快地设计出色版面,比如提供了分数字、上下标、连笔字的替换功能。下面举一些例子:
自由连笔功能: 有些用户可能在排以下符号时会觉得字母之间距离过大,会通过调字间距的功能来缩小间距,如今字体厂商可以在字库中为用户做一些常用的连笔字型,然后利用OpenType的自由连笔特性将这个字型与需要连笔的字符进行关联,在Indesign中打开OpenType的自由连笔字功能,用户在敲“m”“m”两个字符时就自动被一个“mm”图形所替代。
分数字,上下标功能:当文章中需要敲一些分数字或上下标时用户往往会为数字的位置高低而烦恼,同样利用OpenType的分数字、上标、下标、分子字、分母字的功能可以帮用户很快实现用户想达到的效果。
花饰字功能:在排英文版面时,如果段落的第一个大写字母是一个漂亮的花体字是不是很漂亮呢,现在OpenType提供的花饰字功能就可以达到锦上添花的效果。
最后,介绍一点利用GDI+绘制文字Outline的方法。基本思路就是将一串文字传入GraphicsPath::AddString方法,获取这串文字的Outline,然后利用Graphics::DrawPath绘制出来。例如,
#include <Gdiplus.h>
void CScratchPadDlg::OnPaint()
{
//CDialog::OnPaint();
CPaintDC dc(this);
using namespace Gdiplus;
Graphics graphics(dc.GetSafeHdc());
graphics.SetSmoothingMode(SmoothingModeAntiAlias);
graphics.SetInterpolationMode(InterpolationModeHighQualityBicubic);
FontFamily fontFamily(L”Arial”);
StringFormat strformat;
wchar_t pszbuf[] = L”Text Designer”;
GraphicsPath path;
path.AddString(pszbuf, wcslen(pszbuf), &fontFamily, FontStyleRegular, 48, Gdiplus::Point(10,10), &strformat );
Pen pen(Color(234,137,6), 6);
graphics.DrawPath(&pen, &path);
SolidBrush brush(Color(128,0,255));
graphics.FillPath(&brush, &path);
}
当然,这只是最基本的一点思路,绘制出来的效果不一定如你所愿。如果想达到Photoshop或者像WPF中的那些特效,还得下许多功夫。下面有一些可供参考地方,
Reference:
http://www.codeproject.com/KB/GDI-plus/OutlineText.aspx
http://outlinetext.codeplex.com:80/