浅出Freebsd的Fontconfig
2009-03-17 16:03
http://hi.baidu.com/feierwh/blog/item/2547f927a63bde0b908f9d2d.html
类Unix系统桌面环境关于字体的底层支持,目前的桌面应用程序主要是通过Fontconfig,Freetype2+Xft来组合实现字库的匹配、读取和渲染,最终显示在屏幕上。大致的功能模块划分是:

  Fontconfig主要的功能是根据应用程序对字体的要求,在字库数据库中尽量匹配一种字体。

  Freetype2 主要的功能是对字库进行操作,根据要求提供具体要显示文字的数据信息,它也提供一些字体的渲染,但是在这种集成解决方案中,只需要它的主要功能。

  Xft 是X11 server提供的一套函数库,主要是用来对需要现实的文字进行最终的绘制处理,包括对TTF等字体美化,渲染。

  最终文字的绘制是由具体的桌面环境库来提供的,这不在本文讨论范围之内。

  随着这三个模块的各自的发展,分工协作,使得目前X应用程序文字显示支持越来越成熟。在这三个模块当中,对汉字显示来说,我觉得了解Fontconfig的运作机制非常重要,因为Fontconfig决定着字库的选择,而这对于最终在屏幕上显示什么样的汉字尤为重要。

  一、Fontconfig按照主页上的介绍,主要是由两个模块构成:

  1、 配置模块:主要的作用根据fonts.conf文件的内容,建立匹配规则

  2、 匹配模块:把应用程序传递过来的“字体样板”,与fonts.conf文件中约定的匹配规则进行匹配运算,根据系统安装的字体,找到一种最匹配的字体,并把字体的名字,各种属性传递给后续的“字库操作”。

  二、Fontconfig提供了一些工具程序和若干fonts.conf 配置文件来实现用户级的操作和定制匹配规则。

  (一)在FreeBSD系统中,与用户级配置有关的有如下几个文件:

  1、~/.fonts.conf

  这个文件是针对用户的字体匹配规则文件,作用范围是所在home的用户,这个文件提供了当前用户的字体配置信息,与之相关的是“字体安装目录”,系统默认的目录是“ ~/.fonts ”,对用户来说,只要把需要的字体文件拷贝到这个目录中,就可以在系统中使用了,关于安装字库的配置由Fontconfig自动完成。具体的原理简单的说,就是Fontconfig每隔30秒,会对定义的字体安装目录进行一次扫描,自动地分析字库,并把字库纳入到系统安装字库当中。

  2、/usr/X11R6/etc/fonts 目录下的几个文件

  /usr/X11R6/etc/fonts/fonts.conf / fonts.conf.default

  这两个文件安装时,内容一样,而且建议用户不要对其进行更改,如果要对Fontsconfig的运行环境进行更改的话,比如修改“字库存放目录”,“字体缓存刷新时间”等等,建议修改fonts.conf。

  /usr/X11R6/etc/fonts/fonts.dtd

  这是xml的fonts.conf 匹配规则的数据类型定义文件,提供可操作字体属性的定义。

  /usr/X11R6/etc/fonts/conf.d 目录

  其中包含一些对字体具体操作的配置文件,可以包含在fonts.conf 文件中。

  (二)工具程序(fc-cache,fc-list,fc-match)

  1、fc-cache

  用途:建立指定字体目录的字体信息缓存,生成 .fonts.cache-1这样的文件

  用法:fc-cache [-fsvV?] 目录名

-f,--force 强制进行目录扫描,建立缓存文件

-s,--system-only 只扫描系统定义的字库目录

-v,--verbose 显示程序运行状态信息

-V,--Version 显示版本

-?,--help 显示帮助

  2、fc-list

  用途:显示系统安装字库的列表,字体名称格式是 字体名-尺寸大小:属性[=值]

  3、fc-match

  用途:显示目前系统字体匹配情况,带—help参数可以获取帮助,也可以查看man手册。

  三、Fontconfig的运行原理:

  X应用程序打开文件——〉提取文件中的,或者是应用程序定义的字体属性,形成字体样板——〉传递给Fontconfig进行处理——〉 Fontconfig根据自定义的fonts.conf中定义的匹配规则,对传递过来的字体样板进行分析、处理——〉填补fonts.conf中没有定义的属性匹配——〉形成标准化的字体样板——〉返回给X应用程序。

  返回给X应用程序的字体样板已经包括具体的字体,以及字体信息,以及一些字体的渲染选项,X应用程序根据这个样板,提取相应的字库文件,进行后续的操作。

  一个简单的例子:系统中安装了微软的宋体字库,在浏览器中没有确切要求使用这个字体时,访问一个中文网页,也可以正常显示中文汉字。从原理上可以认为,Fontconfi参与了字体的选择,当打开的网页中包含有GB编码信息时,Fontsconfig根据匹配规则,自动选择了中文字库来进行显示。

  知道了以上的Fontconfig的运作原理,就可以很容易理解Fontconfig中fonts.conf所定义的匹配规则了。 Fonts.conf文件无非是定义怎样根据应用程序的要求匹配一个字体,可以定义匹配模式,也可以针对某个字体进行匹配,用“Test”标签来查找匹配属性,用“Edit”标签进行修改,甚至可以定义是否进行微调和液晶屏显示优化等等。

浅出Freebsd的Fontconfig相关推荐

  1. [科普]浅入浅出Liunx Shellcode

    创建时间:2008-05-13 文章属性:原创 文章提交: pr0cess  (pr0cess_at_cnbct.org) 浅入浅出Liunx Shellcode /*---------------- ...

  2. 深入浅出 RPC - 浅出篇+深入篇

    摘自: http://blog.csdn.net/mindfloating/article/details/39473807 近几年的项目中,服务化和微服务化渐渐成为中大型分布式系统架构的主流方式,而 ...

  3. SegmentFault 技术周刊 Vol.16 - 浅入浅出 JavaScript 函数式编程

    函数式编程(Functional Programming),一看这个词,简直就是学院派的典范. 以至于从 Lisp 的创世,到 Scheme.Haskell.Clean.Erlang.Miranda. ...

  4. 浅入浅出深度学习理论实践

    全文共9284个字,40张图,预计阅读时间30分钟. 前言 之前在知乎上看到这么一个问题:在实际业务里,在工作中有什么用得到深度学习的例子么?用到 GPU 了么?,回头看了一下自己写了这么多东西一直围 ...

  5. 浅入浅出 Android 安全 翻译完成!

    浅入浅出 Android 安全 翻译完成! 作者:Yury Zhauniarovich 译者:飞龙 来源:Yury Zhauniarovich | Publications 在线阅读 PDF格式 EP ...

  6. Spring MVC浅入浅出——不吹牛逼不装逼

    Spring MVC浅入浅出--不吹牛逼不装逼 前言 上文书说了Spring相关的知识,对Spring来了个浅入浅出,大家应该了解到,Spring在三层架构中主做Service层,那还有Web层,也就 ...

  7. Spring的数据库编程浅入浅出——不吹牛逼不装逼

    Spring的数据库编程浅入浅出--不吹牛逼不装逼 前言 上文书我写了Spring的核心部分控制反转和依赖注入,后来又衔接了注解,在这后面本来是应该写Spring AOP的,但我觉得对于初学者来说,这 ...

  8. Spring注解浅入浅出——不吹牛逼不装逼

    Spring注解浅入浅出--不吹牛逼不装逼 前情提要 上文书咱们说了<Spring浅入浅出>,对Spring的核心思想看过上篇的朋友应该已经掌握了,此篇用上篇铺垫,引入注解,继续深入学习. ...

  9. Spring浅入浅出——不吹牛逼不装逼

    Spring浅入浅出--不吹牛逼不装逼 前言: 今天决定要开始总结框架了,虽然以前总结过两篇,但是思维是变化的,而且也没有什么规定说总结过的东西就不能再总结了,是吧.这次总结我命名为浅入浅出,主要在于 ...

最新文章

  1. Ubuntu 下连接Github
  2. discuz修改用户uid_haproxy实现discuz论坛的动静分离和负载均衡
  3. 教程丨亿万网友一起换头像欢庆新中国成立70周年,就差你了!
  4. php mencache扩展,【memcache缓存专题(3)】PHP-memcache扩展的安装以及使用
  5. laravel5.6 邮件队列database驱动简单demo
  6. linux用户管理和文件权限
  7. 蓝桥杯 算法提高 一元三次方程求解
  8. 软件工程 超市库存管理系统 可行性研究-需求分析
  9. python编写摇骰子游戏_Python使用tkinter实现摇骰子小游戏功能的代码
  10. android 台球开源,森林里的台球赛 Android新游《丛林撞球》
  11. MRCP协议-提供语音识别(ASR)与语音合成服务(TTS)
  12. 谷歌Cloud、Paly 中的XSS 漏洞可导致账户劫持
  13. 用python绘制熊猫图案_在python中绘制熊猫系列的CDF
  14. 三极管工作原理分析!精辟、透彻
  15. 【ChatGPT机器人】打造你的私人聊天助手
  16. [LiteratureReview]EAO-SLAM Monocular Semi-Dense Object SLAM Based on Ensemble Data Association
  17. 23王道数据结构代码题全解(二)
  18. bootstrap实战--微金所项目(轮播图1)
  19. 递归实现20的阶乘(Java实现)
  20. 使用Project客户端和Project Server进行项目管理

热门文章

  1. Qt 工具栏菜单栏显示图标文字
  2. 【1】集团蓝信下载地址
  3. 将Frock类声明为抽象类,尺寸在Frock类中定义,在类中声明抽象方法calcArea方法,用来计算衣服的布料面积。
  4. P01 滴水逆向公开课1月3号
  5. 算法导论第三版2.1答案
  6. riscv 启动流程分析
  7. Centos7离线安装和配置Keepalived
  8. swift ~ 2020年 swift面试题
  9. html%3ctd%3e文本自动换行,如何在表格中自动换行一列,并将表格大小设置为浏览器窗口...
  10. 苏宁易购电器的主图视频怎么下下来哦