TrueTypeFont(1)--概述

来源:互联网 发布:腾讯小视频软件 编辑:程序博客网 时间:2024/06/03 13:53
TTF(TrueTypeFont)是一种字库名称。TTF(TrueTypeFont)是Apple公司和Microsoft公司共同推出的字体文件格式,随着windows的流行,已经变成最常用的一种字体文件表示方式。
 

字体和字符集

字符集就是Character Sets。字符集中的每个字符都有一个数字与之对应。在Windows中有以下几种字符集在使用。

Windows Character Set:本质上与US ASCII character set一样,第一个字符的数字是0x20,最有一个是0xFF。对于字符集上不存在的字符,会用默认字型显示,如Raster和Vector字体会用.来显示,而TTF则会用方框表示。

Unicode Character Set:用2个字节的数字来表示多达2^16个字符(好像后来增加到4个字节),每个字符有独立的数字表示。注意这里是字符集,而不是编码。

另外还有OEM Character Set、Symbol Character Set和Vendor-Specific Characters Sets等

 

TTF文件结构

TTF字体文件后缀是ttf,TTF还允许不同的字体组合在一个文件中,这时候后缀为ttc,就是TrueType collect的意思。

TTF文件是由一系列的表组成的。第一张表就是font directory,它很特殊,专门用来指示其他的表;进阶着就是包含font数据的其他表。每个表有一个四字符定义的表名,其中有些表是要求每个font文件必备的。如:

cmap

定义了字符到字形索引的对应关系,就是通过字内码得到表loca中使用的index。包含了多个子表,用于支持不同的平台和编码集

glyf

包含了字形数据,就是字形的轮廓定义和调整指令

head

定义了font header,字体全局信息

hhea

定义了水平header

hmtx

定义了水平metric

loca

定义了各字形在glyf表中偏移,根据cmap中得到的字形索引,在这里能够得到对应的字型在glyf表中的偏移

maxp

定义了最大值profile,用于为字体分配内存

name

定义字体名称、风格名以及版权说明等

post

PostScript

有一个问题,字符如何在TTF文件中找到自己的字形呢,见下面的说明:

详细说明一下cmap表,因为这个表是最重要的。由于存在不同的系统和编码集,cmap表内涵多个子表,每个子表包含的基本信息有系统ID、编码集以及在表的偏移量。一般系统ID有3和1,前者是Windows,后者是Macintosh。一般而言,TTF文件至少包含两张子表,即Macintosh的Roman体系(PlatformID=1, Encoding=0)和Windows的UGI体系(PlatformID=3, Encoding=1),其中Encoding=1就是Unicode编码。这些子表中保存了字符内码到glyph index的对应。拿到glyph index的值可以到表loca中查到对应glyph表glyf中的偏移。

 

在Windows中,可以用下面的WIN32 API获得字体信息。

DWORD GetFontData(HDC hDC,DWORD dwTable ,DWORD dwOffset, LPVOID lpbBuffer ,DWORD cbData)

 

相关开源库:

FreeType

官网:http://www.freetype.org/

源码下载:http://sourceforge.net/projects/freetype/files/freetype2/2.5.0/freetype-2.5.0.1.tar.gz/download

 

FontForge:字体的开发工具

用于开发和编辑字体的开源工具,详见http://fontforge.sourceforge.net/

 

文件结构的介绍及c的实现

http://www.codeproject.com/Articles/2293/Retrieving-font-name-from-TTF-file

 

 

字体编辑工具

FontCreator 6.0

下载地址:http://xiazai.xiazaiba.com/Soft/F/FontCreator_6.0_XiaZaiBa.exe

相关制作方法:http://www.cnblogs.com/Jingkunliu/archive/2011/11/21/2452135.html

 

 

原创粉丝点击