MS RFC 104:用嵌入的TrueType字体替换位图标签

日期

2013/09

作者

托马斯堡

联系

thomas.bonfort@gmail.com

状态

采用

版本

MAPServer 7

1。现状

MapServer支持嵌入式位图字体,以便简单地呈现文本,而不需要外部字体文件或字体集。通过在标签块中使用小、小、中、大和大的关键字来激活这些关键字,但有许多限制:

  • 它们只有agg渲染器支持。如果提供位图字体,cairo和kml渲染器将救市。GD是另一个唯一支持它们的渲染器,但是它在7.0版本中被删除了。

  • 它们只支持ASCII字符集。重音字母或常用符号被忽略或替换为一个停止符字符

  • 它们不支持旋转。跟随标签将导致错误,而显式旋转或自动标签将不正确地水平呈现。

  • 他们的渲染质量没有达到今天的制图渲染预期。

但是,它们具有以下优势:

  • 它们不需要依赖于外部字体文件,因此不需要创建或维护字体集文件。因此,它们是快速映射文件原型的理想选择。

  • 它们不经过freetype渲染,因此渲染速度非常快(考虑到它们的局限性,这似乎是公平的)。

1.1即将到来的演变

随着…的到来 MS RFC 98:标签/文本呈现大修MS RFC 99:删除对gd渲染器的支持 维护对位图字体的支持需要代码中有相当多的缺点。考虑到这一点以及前面列举的其他限制,这个RFC建议删除整个MapServer代码库中的位图字体支持。

为了保持快速生成映射文件原型和/或不必依赖外部TrueType字体和字体集的能力,它们将被嵌入的TrueType字体取代。

2。嵌入式TrueType字体

TrueType字体将被编码并作为二进制blob包含在MapServer库中。它将在mapfile用户未提供特定字体时使用,或者在请求位图字体时用作向后兼容性回退。

2.1影响

  • 所有渲染器将自动支持嵌入的TrueType字体。

  • 嵌入式TrueType字体将覆盖更大的字符集

  • 嵌入的TrueType字体将支持旋转和跟随标签

  • 代码将被清除并易于维护

  • 渲染速度将略慢于位图字体。

  • 由于渲染文本的图形质量,图像大小将略大于位图字体(由于抗锯齿)。

2.2向后兼容性

使用嵌入字体时渲染的图像将与以前使用位图字体的渲染不同。除此之外,不存在向后不兼容的情况:将忽略位图关键字和标签类型,并将小、小、中、大和大键盘映射到匹配视觉高度的整数字体大小。

2.3性能影响

可能很明显:

  • 位图glyph的渲染速度较慢

  • 较大的图像大小

2.4未来改进

这些不是立即计划的,但可以在未来根据利息或资金进行调查:

  • 在编译时选择应嵌入的TrueType字体

  • 嵌入多个字体

  • 允许从freetype进行别名glyph渲染以最小化图像大小

三。实施细节

3.1受影响的文件

  • mapfile.c/h:解析器,向后兼容

  • mapagg.cpp,maplabel.c,textlayout.c,其他…:位图支持删除

3.2MapScript

可以扩展与位图相关的函数,以提供已删除该功能的警告。由于透明的向后兼容性处理,不需要进行其他更改。

3.3跟踪问题

TBD

第四章。讨论

我们嵌入的TrueType文件应具有允许此类使用的许可证,以及支持大多数已使用语言的字形覆盖范围,而不是太大,无法限制内存消耗。除非在注释期间另有决定,否则所选字体将是Linux发行版通常提供的dejavasonsconded.ttf truetype字体。

5.投票历史

+史蒂文、托马斯布、佩里克森、塔马斯、汤克、斯蒂芬、叶旺德沃塞纳、米克斯、丹尼尔和斯蒂芬