對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...