Fonts
FreeType、Fontconfig和Xft是什麼關係
我剛開始研究字型如何在 Linux 下工作。直到現在,我才知道 Linux 字型系統包括:
- FreeType,這是一個光柵化器,用於將基於矢量的文本光柵化為基於點陣圖的文本。
- Fontconfig,這是一個用於在作業系統中管理和定位字型的庫。
- Xft 用於在 X windows 系統上顯示所需的輸出。
(如果我錯了,請糾正我。)
這三者之間有直接關係嗎?工作流程是什麼?以及在什麼情況下呼叫這些系統庫?
它們是這樣相關的(使用
ldd
):
Xft
是一個庫,它依賴於(除其他外)fontconfig
庫和freetype
庫。fontconfig
是一組程序、一個庫和數據。它的庫依賴於freetype
庫。freetype
是一個庫,它不依賴於其他兩個。例如:
$ ldd /usr/lib/x86_64-linux-gnu/libXft.so.2.3.1 linux-vdso.so.1 => (0x00007fffb3df7000) libfontconfig.so.1 => /usr/lib/x86_64-linux-gnu/libfontconfig.so.1 (0x00007f40ea07a000) libfreetype.so.6 => /usr/lib/x86_64-linux-gnu/libfreetype.so.6 (0x00007f40e9ddb000) libXrender.so.1 => /usr/lib/x86_64-linux-gnu/libXrender.so.1 (0x00007f40e9bd1000) libX11.so.6 => /usr/lib/x86_64-linux-gnu/libX11.so.6 (0x00007f40e9896000) libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f40e9509000) libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007f40e92f2000) libexpat.so.1 => /lib/x86_64-linux-gnu/libexpat.so.1 (0x00007f40e90c8000) libxcb.so.1 => /usr/lib/x86_64-linux-gnu/libxcb.so.1 (0x00007f40e8ea8000) libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f40e8ca4000) /lib64/ld-linux-x86-64.so.2 (0x00007f40ea4c6000) libXau.so.6 => /usr/lib/x86_64-linux-gnu/libXau.so.6 (0x00007f40e8aa1000) libXdmcp.so.6 => /usr/lib/x86_64-linux-gnu/libXdmcp.so.6 (0x00007f40e889c000)
某些應用程序(例如
xterm
)使用Xft
,它使用 MIT 許可證。其他人(通常是 GPL 許可的)使用libpango
. 除了對pango的許可問題外,它的庫依賴項是Xft
.查看來自
fontconfig
used by的符號Xft
:FcCharSetCopy FcCharSetCount FcCharSetDestroy FcCharSetHasChar FcConfigGetBlanks FcConfigSubstitute FcDefaultSubstitute FcFontList FcFontMatch FcFreeTypeCharIndex FcFreeTypeCharSet FcInit ... FcPatternPrint FcPatternVaBuild FcStrCmpIgnoreCase FcUtf16ToUcs4 FcUtf8ToUcs4
和那些來自
freetype
:FT_Done_Face FT_GlyphSlot_Embolden FT_Init_FreeType FT_Library_SetLcdFilter FT_Load_Glyph FT_New_Face FT_Render_Glyph FT_Set_Char_Size FT_Set_Transform FT_Vector_Transform
您可以看到它
Xft
用於fontconfig
根據圖案定位字型,但用於freetype
實際載入、顯示或調整(縮放等)字型。
fontconfig
使用不同的呼叫來freetype
獲取有關字型的資訊(整體大小、字形數量等):FT_Done_Face FT_Done_FreeType FT_Get_BDF_Property FT_Get_Char_Index FT_Get_First_Char FT_Get_Glyph_Name FT_Get_Next_Char FT_Get_PS_Font_Info FT_Get_Sfnt_Name FT_Get_Sfnt_Name_Count FT_Get_Sfnt_Table FT_Get_X11_Font_Format FT_Has_PS_Glyph_Names FT_Init_FreeType FT_Load_Glyph FT_Load_Sfnt_Table FT_New_Face FT_Select_Charmap FT_Select_Size
沒有
freetype
,fontconfig
沒有任何資訊:fontconfig
組織資訊,但本身不是完整的資訊來源。