获取TrueType字体信息
来源:互联网 发布:java迷你图书馆 编辑:程序博客网 时间:2024/05/17 11:04
引言
对TrueType字体有一定了解的人,相信一定对Windows中Fonts文件夹中中文字体文件显示的名字感到好奇。将中文字体复制到该目录下显示的是中文字体名,而将该字体复制到其它位置则没有享受到该待遇变成一串英文了,该文将讲述该实现背后的秘密。
TrueType字体格式说明
TrueType字体有一个文件头和很多表组成,具体结构如下所示:
> TrueType Header信息 + N个表头信息 + N个表信息
TrueType Header信息
具体TrueType Header的头信息可以定义为如下结构:
typedef struct _tagTT_OFFSET_TABLE{ uint32 uVersion, uint16 uNumOfTables, uint16 uSearchRange, uint16 uEntrySelector, uint16 uRangeShift }TTF_HEADER_TABLE;
如在C:\WINDOWS\FONTS\SIMHEI.TTF开头位置可找到如下所示字符信息(16进制格式显示)
00 01 00 00(snft Version)00 14(num of Tables)01 00(Search Range)00 04(Entry Selector)00 40(Range Shift)
表头信息
紧随TrueType Header信息之后的就是各个表头的信息,表头信息的构成主要如下所示:
表名 + 校验和 + 偏移信息 + 表的长度信息
具体表头的信息可以定义为如下结构:
typedef struct _tagTT_TABLE_DIRECTORY{ char szTag[4]; //table name ULONG uCheckSum; //Check sum ULONG uOffset; //Offset from beginning of file ULONG uLength; //length of the table in bytes}TT_TABLE_DIRECTORY;
如在可在C:\WINDOWS\FONTS\SIMHEI.TTF字体TTF Header信息之后可找到如下字符信息(16进制格式显示)
44 53 49 47(表名)6D A0 9D 86(校验和)00 94 B1 6C(该表在文件中起始位置相对文件头的偏移量)00 00 1B 3C(该表的长度)
字体信息表
字体信息主要保存在name表中,该表的结构如下所示:
name表头 + N个表记录
name表头(非官方名)可定义为如下结构:
//Header of names tabletypedef struct _tagTT_NAME_TABLE_HEADER{ uint16 uFSelector; //format selector. Always 0 uint16 uNRCount; //Name Records count uint16 uStorageOffset; //Offset for strings storage,from start of the table}TT_NAME_TABLE_HEADER;
name表头举例,可在C:\WINDOWS\FONTS\SIMHEI.TTF字体中获取到name表头信息如下所示(使用ttfdump可直接获取可直接识别信息)
'name' Table - Naming Table---------------------------Format: 0Count: 40stringOffset: 486
表记录的结构可定义为如下结构:
//Record in names tabletypedef struct _tagTT_NAME_RECORD{ uint16 uPlatformID; uint16 uEncodingID; uint16 uLanguageID; uint16 uNameID; uint16 uStringLength; uint16 uStringOffset; //from start of storage area}TT_NAME_RECORD;
表记录举例,可在C:\WINDOWS\FONTS\SIMHEI.TTF字体中name Records中获取到如下所示信息:
29. Platform ID: 3 Specific ID: 1 Language ID: 2052 Name ID: 1 Length: 4 Offset: 536 Data: 9E D1 4F 53 > 炑OS
其中Data:9E D1 4F 53为”黑体”在计算机中的Unicode16编码。想检验比较简单的方式是直接将”黑体”输入一个空文本文件保存为unicode的格式,然后用16进制打开即可查看其对应的Unicode编码,或者在网上直接找汉字编码在线查询网址也可。
具体关于平台ID和语言ID和NameId具体代表的含义可查看参考信息中相关网页或文档。
字体信息查看工具
ttfdump简介
windows官方提供工具,具体下载地址为:https://www.microsoft.com/en-us/Typography/tools.aspx。
该字体的具体使用说明可参考TTFDUMP的帮助手册,具体获取方式为在命令行下键入ttfdump即可获得如下所示的使用说明
D:\ttf\FontTools>ttfdump; TrueType v1.0 Dump Program - v1.8, Oct 29 2002, rrt, dra, gch, ddb, lcp, pml; Copyright (C) 1991 ZSoft Corporation. All rights reserved.; Portions Copyright (C) 1991-2001 Microsoft Corporation. All rights reserved.Usage: TTFDUMP <filename> [-nNNNN] [-tCCCC] [-h] [-zHHH] [-cNNNN] [-q]<filename> - TrueType .TTF (or .T2 or .ROY or .TTC) filename
获取simhei字体name表信息命令格式如下所示:
ttfdump C:\WINDOWS\FONTS\SIMHEI.TTF -n20 -tname > simheiname.txt
Linux环境下也有类似的ttf字体查看工具也叫ttfdump,具体用法请自行研究。
FontForge简介
开源图形化工具,操作简单,这里就不多做介绍了,具体请参考官方网站说明,网址为:http://fontforge.github.io/en-US/。
参考资料
从TTF字体中获取字体名:http://http://www.codeproject.com/Articles/2293/Retrieving-font-name-from-TTF-file
Apple官方TrueType字体标准https://developer.apple.com/fonts/TrueType-Reference-Manual/RM06/Chap6.html#Overview
微软官方TrueType字体标准https://www.microsoft.com/en-us/Typography/SpecificationsOverview.aspx
- 获取TrueType字体信息
- 获取truetype字体数据
- 获得TrueType字体文件 的相关信息
- TrueType字体
- 有关TrueType字体的
- TrueType字体文件
- TrueType字体文件解析
- 关于TrueType字体
- div+css - 工具 - 微软印刷技术 - 自由字体信息, TrueType, OpenType, ClearType:
- 关于制作TrueType字体(1)
- .NET只支持Truetype字体
- TrueType字体的后缀名解释
- 为 LaTeX 添加英文 TrueType 字体
- MapX MapInfo truetype 字体编号对照。
- 为 LaTeX 添加英文 TrueType 字体
- 为 LaTeX 添加英文 TrueType 字体
- 为 LaTeX 添加英文 TrueType 字体
- 为 LaTeX 添加英文 TrueType 字体
- 【Machine Learning实验1】batch gradient descent(批量梯度下降) 和 stochastic gradient descent(随机梯度下降)
- 学习go语言的第6天(总结昨天)
- MFC-TreeControl
- 【VB.NET视频总结(三)】
- MIT折纸算法
- 获取TrueType字体信息
- 运维sentinel监控配置
- 《C++ Primer Plus》——编程练习答案(8)
- 2016北邮计算机考研复试上机题解
- 配置 Visual Studio Tools for Apache Cordova
- {小结}普及模拟3.26
- IO流缓冲区的本质
- MySQL 索引分析和优化
- 【Machine Learning实验2】 Logistic Regression求解classification问题