有谁知道当用户键入文本时会根据字形形状自动计算字符的字距调整的算法?
我的意思不是简单地计算提前宽度或类似的东西,我的意思是分析字形的形状以估计字符之间的视觉最佳距离。例如,如果我们将三个字符按顺序排列在一行中,则不管字符的形状如何,中间的字符都应该看起来位于行的中心。一个例子启发了kerning-on-the-fly功能:
动态字距调整的示例:
在上图中a
似乎太对了。它应该向 移动一定的量T
,使其看起来位于T
和的中间g
。该算法应该检查T
和(可能还有其他字母)的形状,并决定必须向左移动a
多少。a
这个特定的数量是算法应该计算的——无需检查字体的可能字距对。
我正在考虑编写一个使用手绘字体的 javascript (+svg+html) 程序,其中许多缺少字距调整对。文本字段将是可编辑的,并且可以包含多种字体的文本。我认为在这种情况下,动态字距调整可能是确保平均文本流的一种方法。
编辑:一个起点可能是使用 svg 字体,因此很容易获得路径值。在 svg 字体中,路径是这样定义的:
<glyph glyph-name="T" unicode="T" horiz-adv-x="1251" d="M531 0v1293h
-483v173h1162v-173h-485v-1293h-194z"/>
<glyph glyph-name="a" unicode="a" horiz-adv-x="1139" d="M828 131q-100 -85
-192.5 -120t-198.5 -35q-175 0 -269 85.5t-94 218.5q0 78 35.5 142.5t93
103.5t129.5 59q53 14 160 27q218 26 321 62q1 37 1 47q0 110 -51 155q-69 61
-205 61q-127 0 -187.5 -44.5t-89.5 -157.5l-176 24q24 113 79 182.5t159
107t241 37.5 q136 0 221 -32t125 -80.5t56 -122.5q9 -46 9 -166v-240q0
-251 11.5 -317.5t45.5 -127.5h-188q-28 56 -36 131zM813 533q-98 -40 -294
-68q-111 -16 -157 -36t-71 -58.5t-25 -85.5q0 -72 54.5 -120t159.5 -48q104
0 185 45.5t119 124.5q29 61 29 180v66z"/>
算法(或 javascript 代码)应该以某种方式检查这些路径并确定它们之间的最佳距离。