点阵字体与矢量字体点阵字体也叫位图字体,其中每个字形都以一组二维像素 信息表示。由于位图的原故,点阵字体很难进行缩放,特定的点阵字体只能清晰地显示在相应的字号下。但对于 12-16px 这样小的汉字,点阵字体常常比其它类型的字体在屏幕上更好的显示效果。常见的点阵字体有 bdf,pcf,fnt,hbf 等格式。

对于常见的计算机操作系统,字体的显示算法需要一些字体的信息来优化屏幕显示效果,英文称为Hinting。汉字由于笔画复杂,所以 hinting 的方式与西文截然不同。使用在汉字字体中嵌入预先制作的点阵位图既可以有效地避免hinting 算法带来的计算开销,同时屏幕上显示的汉字边缘清晰,易于阅读。

矢量字体中每一个字形是通过数学曲线来描述的,它包含了字形边界上的关键点,连线的导数信息等,字体的渲染引擎通过读取这些数学矢量,然后进行一定的数学运算来进行渲染。这类字体的好处是字体可以无限放大而不产生变形。矢量字体主要包括 Type1 和 TrueType 等几类。

内嵌点阵字的字体由于CJK字体的结构复杂,在小号字体只有使用点阵才能有清晰的显示效果,但是点阵字体很难进行缩,而且线条单一,在大号字体显示时就显得苍白无力。把点阵字体内嵌到矢量字体就能发挥两者的优点,并且也弥补了两者的不足。小号字体时清晰明朗,大号字体时字型饱满,形态丰富。常见的内嵌点阵字的字体有:北京中易电子公司宋体SimSun 、方正宋体(FZSongti)、文鼎PL上海宋(Uming)、Firefly的文鼎PL新宋(AR PL New Sung)等。

Hinting 与 AutohintHinting 用来最佳化字型显示的方法。由于屏幕的像素有限,向量字型的缩放需要有更多的考虑, 例如当一条线位在两个像素格子中间时, 该取左边的格子还是右边的格子? 如果这方面的控制没有做好,就常常会出现字型的衬线没有对齐,或是小字歪七扭八的情况。Hinting 是额外的信息, 它告诉 renderer 该如何处理这些细节的部份,使得向量字在小字的时候能够好看。也因此 Hinting 是非常费时费人力的工作,TrueType字型很多,但是有良好 Hinting 的字型不多。拙劣的 Hinting 就会让字变得很难看。 为了稍微改善这个问题,freetype 有 autohint 的功能,可以自动为没有hint 的字型做 hinting 的工作。另外由于 TrueType 的 hinting 是有专利的,不能完全自由地使用autohint 就不受这个限制。autohint 自然无法做得像人力的 hint 一样好,不过至少比没有 hint 要好些。话虽如此,对于许多笔划复杂的文字 (如中文) 目前 freetype 的 autohint 还做得不甚完美,而因为建立完整的 hinting 的难度,即使是英文字,原本就很高,内建有 hinting 的中文字型就少之又少了。所以常常有人抱怨中文字在屏幕上很难看,就是没有理想hinting, 或者是使用了 autohinter 所造成的一些反效果。

AA(Anti-aliasing) Antialiasing 是将字体在后台先以数倍的大小来绘画,然后再缩成想要的大小,未满一格的格子用灰阶补点。由于原本 X 所支持的 logic运算不敷使用,所以才用 XRender  extension 来达成目的。 Antialiasing 会 人一种朦胧的感觉,习惯了Windows XP 下清晰,锐利的字体显示时,Antialiasing 会让人不太适应,会让用户觉得Linux下的字体显示不如Windows XP。但是,其实 Antialiasing是一种很先进的显示技术,当长时间显示器上阅读的时候,Windows XP 下的锐利的字体显示风格,会让眼睛更加容易疲劳,使用Antialiasing,字体的显示更加柔和,更加适合长时间的在显示器上阅读文档,减少眼睛的疲劳。 微软的下一代OS Windows Vista 也将用ClearType 来取代传统的黑白,锐利的英文字体显示和点阵CJK 显示。ClearType的渲染效果和Linux下的 Anti-aliasing 效果很相似。

中文CleraType字体
中文世界里缺少一套合适的 ClearType 屏幕正文显示字体。

这款字体必须能解决在 ClearType 平滑显示状态下小字号正常阅读的问题。现有的所有中文字库都无法在 ClearType 平滑显示状态下完美的文本显示。我们知道, Windows 中的宋体、黑体等字体是由中国北京的中易公司开发的,然后微软向中易公司购买了版权之后嵌入 Window 中文版本。之前的宋体之所以能够在小字号点阵状态下很好的显示,是由于宋体在矢量字库中嵌入了 12 、 14 、 16 、 18 等几个点阵字库,才得以比较优秀的显示。但在 ClearType 状态下,继续采用这样内嵌点阵的方式来显示汉字,就会和平滑显示的英文粗细不一致,同时风格上非常的不协调。由于当初的宋体不是为平滑显示而设计的,强制平滑显示的效果就显得纤细发虚,看起来很模糊。

那为什么英文矢量字体就可以直接使用 ClearType 来进行平滑显示呢?这是因为大多数优秀的英文字体并不是采用内嵌点阵的方式来进行优化的,它们采用的是一种叫做 Hinting (字形微调)的技术来对小字号的显示进行优化。

我们知道,矢量字体是可以无限平滑缩放的,在使用的时候,要通过操作系统的字体引擎自动的解析渲染为实际的像素,才能够在屏幕上显示出来。但是在字号很小的时候,由于能使用的像素非常有限,这种自动解析会出现很多问题,例如笔画粗细不匀,文字之间高低不齐,甚至笔画模糊无法识别等。因此必须由字体设计师人工干预,在矢量字库中嵌入一些附加的提示信息,来告诉字体渲染引擎在某个特定的字号下面,应该如何对这个字符的细节进行修正,才能准确的显示。这种在矢量字体中嵌入的提示信息,就叫做 Hinting 。

对于中文字体来说,这种提示就更为重要,因为中文的笔画繁多,自动解析的错误也就更多更严重。在字号更小的情况下,根本无法显示全部的笔画,这时候还需要设计师在不影响整体的情况下,对笔画进行取舍,去掉一些不影响识别的笔画,否则这个文字就会因糊成一团无法识别。 Hinting 调整的范围需要涵盖各级小字号,一般最少要包括 9px - 18px 这个常用的字号区间。这种 Hinting ,即使是对于非常有经验的设计师,也是非常高难度而且费时费力的工作。

我们知道英文只有 26 个字母,但是对于中文的汉字情况就复杂的多了,仅仅是最常用的汉字就有 6000 个,然后为了在简繁体混排时候能完美的显示,就必须同时包含繁体和简体两套字符,再加上众多的不常用但是会在古籍文献中非常重要的生僻字,一套比较完整的大字符集字库所包含的字符数目将接近 3 万个。仅仅是这矢量造字的工作就是非常浩大的。

这还不算,作为一套功能完整的正文字体,还需要考虑到斜体和粗体的显示。所有的斜体状态,也同样必须由设计师对不同的字号指定不同的 Hinting ,否则就会有显示问题。为了更完美的显示粗体,微软决定将标准体和粗体分开,作为两套单独的字体来设计,安装时也是两套字体,但在系统中使用时是显示为一套字体的不同状态。这套单独的黑体也同样需要单独造字,然后指定一系列的 Hinting 和斜体 Hinting 。因此要开发一套优秀的中文大型字库,耗费的人力物力是惊人的。这也正是这套字体会如此昂贵的原因之一。

Hinting信息是评价一款优秀矢量字体的一个重要指标,良好的Hinting能在小字号下面提供和内嵌点阵字一样优秀的显示质量,同时又降低内存的消耗。虽然我们现在已经拥有不少不错的矢量中文字体,但适合屏幕显示的正文字体很少,而包含完善 Hinting 信息的,一个也没有。

所以,如果要在中文 Vista 平台下彻底完美的实现文本的平滑显示,微软就必须全新开发一套具备完善 Hinting 信息的 ClearType 中文字体。

实际上不仅仅是中国大陆,整个 CJK 地区(中日韩)都要面临这个全新设计字体的问题。从现在已经发布的版本来看,各国的 Vista 版本都有全新设计的专用字体,中国大陆地区的是我们已经知道的的微软雅黑,中国台湾地区的是微软正黑体,日文地区的是 Meiryo (据说这个名称来源于“明了”或者“明流”的读音),韩国地区的则是 Malgun 。

对于微软雅黑和微软正黑,我们不好简单的用简体或者繁体来区分他们,因为这两套字体都同时包含了比较完整的简繁体汉字,以确保在简体和繁体混排的页面上都能够完美的显示。但由于两岸的文教部门在各自的文字规范中对汉字的写法规定有很多细节上的不同,所以这两套字形在正式场合是不能混淆使用的。同样的,日文的Meiryo字体中也包含了大量的繁体汉字,不过由于汉字在日本也经过了上千年的演变,日文中的汉字写法和中国大陆和台湾也有着相当的区别。



欢迎您使用http://Blogmove.cn提供的"博客搬家"和"博文三窟"服务.

关于字体和字体微调(Hinting )的知识 .txt相关推荐

  1. 关于字体和字体微调(Hinting )的知识

    点阵字体与矢量字体点阵字体也叫位图字体,其中每个字形都以一组二维像素 信息表示.由于位图的原故,点阵字体很难进行缩放,特定的点阵字体只能清晰地显示在相应的字号下.但对于 12-16px 这样小的汉字, ...

  2. [zz] 关于字体和字体微调(Hinting )的知识

    点阵字体与矢量字体点阵字体也叫位图字体,其中每个字形都以一组二维像素信息表示.由于位图的原故,点阵字体很难进行缩放,特定的点阵字体只能清晰地显示在相应的字号下.但对于 12-16px 这样小的汉字,点 ...

  3. python3-xlwt-Excel设置表格基础(字体颜色 背景颜色 设置边框 边框颜色 冻结窗口 字体大小 字体高度 字体加粗 下划线 斜体字 单元格对齐方式 自动换行 删除线 超链接 插入公式)

    文章目录 引入xlwt和创建workboos对象 初始化样式和创建设置字体,赋值给style 保存文件 自定义样式 字体颜色 背景颜色 设置边框 边框颜色 冻结窗口 字体大小 字体高度 字体加粗 下划 ...

  4. 「Adobe国际认证」如何设计专属字体?字体的 7 个必读技巧,带你揭秘字体设计

    设计独特的个性化字体是让您的公司脱颖而出的好方法,同时为您提供额外的设计经验,以增加您在平面设计简历中的技能.您甚至可以在线出售您的自定义字体并赚取一点额外的现金. 制作自己的字体:初学者指南 创建自 ...

  5. InDesign 教程:如何更改字体和字体大小?

    欢迎观看indesign教程,小编带大家学习 InDesign 的基本工具和使用技巧,了解如何更改字体和字体大小. InDesign 提供了许多格式化文档中文本的方法.在本项目中,将使用「属性」面板将 ...

  6. android webview 字体 系统字体大小,【转】android webview设置内容的字体大小

    Enum for specifying the text size. SMALLEST is 50% SMALLER is 75% NORMAL is 100% LARGER is 150% LARG ...

  7. python使用matplotlib可视化、使用rcParams参数调整可视化图像中线条宽度、线条类型、文本字体、字体大小、字体颜色、字体类型、文本颜色等

    python使用matplotlib可视化.使用rcParams参数调整可视化图像中线条宽度.线条类型.文本字体.字体大小.字体颜色.字体类型.文本颜色等 目录

  8. qt 对话框位置如何确定_在图片上加字,如何确定该用什么字体、字体的颜色和放置的位置?...

    这是一位读者在后台向我提出的问题.坦白讲,第一次看到这个问题的时候,我觉得这个读者太鸡贼了.为什么这么说呢? 因为这看似是一个问题,倒不如说是3个问题.不过,不得不说,这的确是一个很有价值的好问题. ...

  9. 【Flutter】Flutter 自定义字体 ( 下载 TTF 字体 | pubspec.yaml 配置字体资源 | 同步资源 | 全局应用字体 | 局部应用字体 )

    文章目录 一.Flutter 自定义字体 1.ttf 字体文件 2.ttf 字体资源配置 3.获取字体 4.全局使用字体 5.局部使用字体 二.完整代码示例 三.相关资源 一.Flutter 自定义字 ...

最新文章

  1. 直接法 matlab,解线性方程组直接方法matlab用法.doc
  2. 招募 | 《大数据实践课》课程实践企业合作项目
  3. java新手笔记1 Hello World!
  4. c语言测机器运行时间,C语言clock()测试函数运行时间
  5. dotnet core入门
  6. 微信分享接口示例(设置标题、缩略图、连接、描述),附demo下载
  7. java有道云,有道云笔记链接——JAVA面向对象的学习
  8. iNeuOS工业互联网操作系统,矿山动态产量计量系统和铁路车辆识别系统应用场景案例...
  9. java面向对象使用字符串_java面向对象中的String类中12种常用的方法
  10. P1516-青蛙的约会【扩欧,同余方程】
  11. notepad++节点_在C ++中删除链接列表的中间节点
  12. 网易云音乐评论催泪刷屏?我用Python抓取了1008328条热评告诉你为什么!
  13. win10samba服务器配置_win10访问samba配置共享目录,踩坑记
  14. Unity 常用API以及C# 工具类的使用
  15. Qt 动图 播放png阵列 避免使用gif导致失真
  16. keeplive发生脑裂问题处理过程
  17. skd怎么接入_网易七鱼怎么接入? 网易七鱼三种接入方式介绍
  18. python为什么是蛇的天敌_蛇的天敌有哪些:蛇的天敌排名
  19. java内存分配和垃圾回收_深入理解java虚拟机(二)垃圾收集器与内存分配策略...
  20. Mahout之——Mahout推荐算法API详解

热门文章

  1. reverie_mjp
  2. flutter自定义dialog
  3. 【kafka连载二】windows测试kafka的消息收发
  4. 恐龙跳一跳游戏python_【Python】Python代码制作”恐龙跳一跳”小游戏
  5. 微信小程序插件使用和更新
  6. const加在指针前面和后面的区别
  7. 聚类算法实践(一)——层次聚类、K-means聚类
  8. 聚类的方法(层次聚类,K-means聚类)
  9. 个人简历_材料的准备
  10. 用计算机机器语言编写的程序可以,用机器语言编写的程序可读性最差