Fonts

FreeType、Fontconfig和Xft是什麼關係

  • October 18, 2017

我剛開始研究字型如何在 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.

查看來自fontconfigused 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 組織資訊,但本身不是完整的資訊來源

引用自:https://unix.stackexchange.com/questions/398596