TrueTypeFont(1)--概述
来源:互联网 发布:腾讯小视频软件 编辑:程序博客网 时间:2024/06/03 13:53
字体和字符集
字符集就是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
- TrueTypeFont(1)--概述
- TrueTypeFont(3)--数据表说明
- TrueTypeFont之TTX/FontTools
- TrueTypeFont文件中汉字的矢量化与绘制
- TrueTypeFont文件中符号数据导出与绘制
- 1 概述
- 1 概述
- 1 概述
- 软件工程精要概述1-概述
- Unity3D下NGUI插件使用中文TrueTypeFont(ttf)字库教程
- 密码学概述(1)
- HTML 语言概述 (1)
- Chapter 1 Java概述
- 1、Struts2.0.6概述
- Spring Framework概述(1)
- 1_MFC概述
- Linq 学习(1) 概述
- BE Learing --1 概述
- 关于ARM中断的具体的启动代码解释
- jbpm5.4 邮件服务
- 国标645协议.....2007---项目所需一
- pig 次数统计和列传行
- Linux系统下SUID、SGID的解析
- TrueTypeFont(1)--概述
- EllisLab寻求新的所有者CodeIgniter
- autotools使用(自动生成Makefile)
- jquery layout 属性描述
- LIB和DLL的区别与使用
- 获取JPEG 图片的meta data
- perl处理中文
- 字符串子串的查找
- 从博客运营谈谈互联网营销