獲取TrueType字型資訊

2021-07-10 18:24:38 字數 2394 閱讀 1728

對truetype字型有一定了解的人,相信一定對windows中fonts資料夾中中文字庫案顯示的名字感到好奇。將中文字型複製到該目錄下顯示的是中文字型名,而將該字型複製到其它位置則沒有享受到該待遇變成一串英文了,該文將講述該實現背後的秘密。

truetype字型有乙個檔案頭和很多表組成,具體結構如下所示:

> truetype header資訊 + n個表頭資訊 + n個表資訊
具體truetype header的頭資訊可以定義為如下結構:

typedef struct _tagtt_offset_tablettf_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_directorytt_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 table

typedef struct _tagtt_name_table_headertt_name_table_header;

name表頭舉例,可在c:\windows\fonts\simhei.ttf字型中獲取到name表頭資訊如下所示(使用ttfdump可直接獲取可直接識別資訊)

'name' table - naming table

---------------------------

format: 0

count: 40

stringoffset: 486

表記錄的結構可定義為如下結構:

//record in names table

typedef struct _tagtt_name_recordtt_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

該字型的具體使用說明可參考ttfdump的幫助手冊,具體獲取方式為在命令列下鍵入ttfdump即可獲得如下所示的使用說明

d:\ttf\fonttools>ttfdump

; truetype v1.0 dump program - v1.8, oct 29 2002, rrt, dra, gch, ddb, lcp, pml

usage: ttfdump [-nnnnn] [-tcccc] [-h] [-zhhh] [-cnnnn] [-q]- truetype .ttf (or .t2 or .roy or .ttc) filename

獲取simhei字型name表資訊命令格式如下所示:

ttfdump c:\windows\fonts\simhei.ttf -n20 -tname > simheiname.txt
linux環境下也有類似的ttf字型檢視工具也叫ttfdump,具體用法請自行研究。

開源圖形化工具,操作簡單,這裡就不多做介紹了,具體請參考官方**說明,**為:

獲取truetype字型資料

vpoint.clear int aaa m editfont.getlength glyphmetrics gm dword dwsize handle hmem lpttpolygonheader lpph lpbyte lpb long cboutline,cbtotal hwnd hwnd1...

為 LaTeX 新增英文 TrueType 字型

在windows miktex環境下,新增中文字型最方便的辦法恐怕是使用 hooklee 的 xgbkfonts 工具 http hooklee.tex.html 在 linux 環境下,王垠改進的 gbkfonts http learn.tsinghua.edu.homepage 20013154...

TTF字型 獲取TTF字型的點陣資訊

獲取ttf字型的點陣資訊還是使用getglyphoutline 看 cclientdc dc this hdc hdc dc.getsafehdc 建立字型 cfont font verify font.createfont 32,0,0,0,fw normal,false,false,0,ansi...