<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="zh-Hans-CN">
	<id>http://wiki.foofun.cn//index.php?action=history&amp;feed=atom&amp;title=TrueType_Fonts</id>
	<title>TrueType Fonts - 版本历史</title>
	<link rel="self" type="application/atom+xml" href="http://wiki.foofun.cn//index.php?action=history&amp;feed=atom&amp;title=TrueType_Fonts"/>
	<link rel="alternate" type="text/html" href="http://wiki.foofun.cn//index.php?title=TrueType_Fonts&amp;action=history"/>
	<updated>2026-04-03T22:58:56Z</updated>
	<subtitle>本wiki上该页面的版本历史</subtitle>
	<generator>MediaWiki 1.37.1</generator>
	<entry>
		<id>http://wiki.foofun.cn//index.php?title=TrueType_Fonts&amp;diff=221&amp;oldid=prev</id>
		<title>Zhang3：创建页面，内容为“{{Stub}} Category:Graphical UI == 描述 ==  TrueType是一种将字体信息编码为文件的方法。  它是由苹果公司在20世纪80年代创建的，并在今天被广泛使用。  TrueType通过使用一系列直线和二次Bézier贝塞尔曲线来定义每个字形 (字符形状)。  这种方法意味着每个字符都是矢量图像，可以根据需要轻松地按比例放大。  TrueType文件格式具有很高的空间效率，但易于阅…”</title>
		<link rel="alternate" type="text/html" href="http://wiki.foofun.cn//index.php?title=TrueType_Fonts&amp;diff=221&amp;oldid=prev"/>
		<updated>2022-01-13T01:48:20Z</updated>

		<summary type="html">&lt;p&gt;创建页面，内容为“{{Stub}} &lt;a href=&quot;/index.php?title=%E5%88%86%E7%B1%BB:Graphical_UI&quot; title=&quot;分类:Graphical UI&quot;&gt;Category:Graphical UI&lt;/a&gt; == 描述 ==  TrueType是一种将字体信息编码为文件的方法。  它是由苹果公司在20世纪80年代创建的，并在今天被广泛使用。  TrueType通过使用一系列直线和二次Bézier贝塞尔曲线来定义每个字形 (字符形状)。  这种方法意味着每个字符都是矢量图像，可以根据需要轻松地按比例放大。  TrueType文件格式具有很高的空间效率，但易于阅…”&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新页面&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{Stub}}&lt;br /&gt;
[[Category:Graphical UI]]&lt;br /&gt;
== 描述 ==&lt;br /&gt;
&lt;br /&gt;
TrueType是一种将字体信息编码为文件的方法。  它是由苹果公司在20世纪80年代创建的，并在今天被广泛使用。&lt;br /&gt;
&lt;br /&gt;
TrueType通过使用一系列直线和二次Bézier贝塞尔曲线来定义每个字形 (字符形状)。  这种方法意味着每个字符都是矢量图像，可以根据需要轻松地按比例放大。&lt;br /&gt;
&lt;br /&gt;
TrueType文件格式具有很高的空间效率，但易于阅读，并使用两个简单的原语来绘制单个字符字形。&lt;br /&gt;
&lt;br /&gt;
文件格式是big endian大端的。&lt;br /&gt;
&lt;br /&gt;
== File Format ==&lt;br /&gt;
&lt;br /&gt;
TypeType字体文件包含许多表，其中最重要的是:&lt;br /&gt;
* 'cmap'，它将单个字符代码映射到字形索引，&lt;br /&gt;
* 'loca'，将字形索引映射到偏移到主字形表中，以及&lt;br /&gt;
* 'glyf'，它存储实际的字形矢量数据本身。&lt;br /&gt;
&lt;br /&gt;
== 显示字符 ==&lt;br /&gt;
&lt;br /&gt;
显示字符的一般操作顺序如下:&lt;br /&gt;
* 找到合适的字符映射是文件的 “cmap” 部分，用于编码您拥有的字符代码。&lt;br /&gt;
* 使用字符映射将字符代码映射到字形索引。&lt;br /&gt;
* 在 “本地” 表中查找字形索引，以找到该字形开始的字形表中偏移量。&lt;br /&gt;
* 在 “loca” 表中查找字形索引1以查找以下字形的偏移量，这使我们能够计算字形数据长度。&lt;br /&gt;
* 找到字形数据并绘制出来。&lt;br /&gt;
&lt;br /&gt;
== Glyph字形数据深入==&lt;br /&gt;
&lt;br /&gt;
字形数据本身描述了一组坐标点，这些坐标点定义了直线或Bézier曲线以绘制实际的字形图像。  它由文件 “glyf” 部分中的数据块描述。&lt;br /&gt;
&lt;br /&gt;
glyph字形数据包含:&lt;br /&gt;
* 轮廓的计数，&lt;br /&gt;
* 字符数据的边界框，&lt;br /&gt;
* 基于1的点索引的数组，指示每个轮廓的最后一个点，&lt;br /&gt;
* 零个或多个 “网格拟合” 提示，&lt;br /&gt;
* 标记定义点的属性，&lt;br /&gt;
* X坐标数据，以及&lt;br /&gt;
* Y坐标数据。&lt;br /&gt;
&lt;br /&gt;
=== Contours轮廓 ===&lt;br /&gt;
轮廓是形成闭环的后续点的集合。  有些字符只有一个轮廓来绘制它们，其他字符则更多。  以下是一些示例:&lt;br /&gt;
* '-' (hyphen连字符) 只有一个轮廓，围绕条外侧的路径&lt;br /&gt;
* '1' (数字1) 也只有一个轮廓，围绕形状的外部&lt;br /&gt;
* 'O' (大写字母O) 有两个轮廓，一个围绕形状的外部，一个围绕内部&lt;br /&gt;
* '=' (等号) 有两个轮廓，每个条形周围的路径&lt;br /&gt;
* '%' (%百分比符号) 有五个轮廓，围绕条形的路径以及每个圆圈内外的路径&lt;br /&gt;
&lt;br /&gt;
字形数据存储字形的轮廓计数以及每个轮廓的最后一点的数组。  通过读取最后一个轮廓的点索引，您可以确定组成此字形的总共点的数量。&lt;br /&gt;
&lt;br /&gt;
请注意，该文件确实显式关闭了轮廓。  例如，一个正方形将由四个点定义，并且由绘图代码通过从第四点绘制回第一点来绘制正方形的第四边。&lt;br /&gt;
&lt;br /&gt;
=== “网格拟合” 提示 ===&lt;br /&gt;
字形可以选择包含 “网格拟合” 提示。  这些是字体设计器提供的用于指定像素级别详细信息的说明，当字体呈现为位图 (栅格化) 时，应包括这些像素级别详细信息。  本文不涉及这些内容。&lt;br /&gt;
&lt;br /&gt;
=== 点数据 ===&lt;br /&gt;
字形数据的其余部分形成三个字节数组，即标志，X坐标和Y坐标。&lt;br /&gt;
&lt;br /&gt;
文件的点由字形数据中的一系列标志字节定义，每个标志代表字形中的一个或多个点，因此必须对标志进行解析，直到找到正确数量的点为止。  这是确定文件中存在多少个字节的标志数据的唯一方法。&lt;br /&gt;
&lt;br /&gt;
每个标志字节表示有关它所代表的一个或多个点的详细信息:&lt;br /&gt;
* 点是否在偏离曲线的曲线上，&lt;br /&gt;
* X坐标是否有零，一或两个字节的数据，&lt;br /&gt;
* Y坐标是否有零，一个或两个字节的数据，以及&lt;br /&gt;
* 此标志代表多少分。&lt;br /&gt;
&lt;br /&gt;
=== 画点 ===&lt;br /&gt;
On Curve / Off Curve标志用于识别特定点是否位于字符的轮廓上，还是b é zier曲线的控制点。  通过分析标志的开/关曲线位，可以确定所需的线类型:&lt;br /&gt;
* OnCurve point到OnCurve point: 这是一条直线段。&lt;br /&gt;
* 曲线上，曲线上，曲线上: 这是一个二次b é zier。&lt;br /&gt;
* OnCurve，OffCurve，OffCurve，OnCurve: 这是两个二次b é ziers。&lt;br /&gt;
&lt;br /&gt;
最后一种排列是文件格式的细微差别。  虽然文件以 “上曲线，下曲线，下曲线，上曲线” 的形式对四个点进行编码，但实际上它以 “上曲线，下曲线，上曲线，下曲线，上曲线” 的形式表示五个点。添加额外的曲线点以形成两个二次b é ziers。  (虽然我找不到任何明确的信息，但我认为上曲线点应该位于两个下曲线点之间的一半。)&lt;br /&gt;
&lt;br /&gt;
== 外部链接 ==&lt;br /&gt;
&lt;br /&gt;
*苹果规格说明 http://developer.apple.com/fonts/TTRefMan/RM06/Chap6.html&lt;br /&gt;
*优秀的参考 http://j2eedocument.appspot.com/2009/10/144-truetype-fonts.html&lt;br /&gt;
*PD (stub) FreeType的实现 http://forum.osdev.org/viewtopic.php?f=11&amp;amp;t=24754&lt;/div&gt;</summary>
		<author><name>Zhang3</name></author>
	</entry>
</feed>