FreeType、Fontconfig 和 Xft 之间有什么关系

FreeType、Fontconfig 和 Xft 之间有什么关系

我刚刚开始研究字体在 Linux 下如何工作。到目前为止,我了解到Linux字体系统由以下部分组成:

  • FreeType,它是一个光栅化器,用于将基于矢量的文本光栅化为基于位图的文本。
  • Fontconfig,这是一个用于在操作系统内管理和定位字体的库。
  • Xft 用于在 X windows 系统等上显示所需的输出。

(如果我错了请纠正我。)

这三者之间有直接关系吗?工作流程是怎样的?以及什么情况下会调用这些系统库?

答案1

它们的关系如下(使用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.除了许可问题之外潘戈,它的库依赖项是 的两倍Xft

查看 所fontconfig使用的符号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

没有freetypefontconfig没有任何信息:fontconfig 组织信息但不完整来源信息本身。

相关内容