ユーザーがテキストを入力したときにグリフの形状に基づいて文字のカーニングを自動的に計算するアルゴリズムを知っている人はいますか?
有効幅などの簡単な計算を意味するのではなく、文字間の視覚的に最適な距離を推定するためにグリフの形状を分析することを意味します。たとえば、3つの文字を連続して1行に配置する場合、中央の文字は、文字の形状に関係なく、線の中心に位置するように見える必要があります。例は、カーニングオンザフライ機能を啓発します。
オンザフライでのカーニングの例:
上の画像a
は正しすぎるようです。これは、移行すべき一定量を向けてT
、の真ん中にあるように思われるようにT
とg
。アルゴリズムは、T
およびa
(およびおそらく他の文字も)の形状を調べ、どれだけa
左にシフトする必要があるかを決定する必要があります。この特定の量は、アルゴリズムが計算する必要があるものです-フォントの可能なカーニングペアを調べることなく。
手書きフォントを使用するjavascript(+ svg + html)プログラムをコーディングすることを考えていますが、それらの多くにはカーニングペアがありません。テキストフィールドは編集可能で、複数のフォントのテキストを含めることができます。この場合、オンザフライでカーニングすることで、平均的なテキストフローを確保できると思います。
編集:これの開始点の1つは、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コード)は、これらのパスを何らかの方法で調べ、それらの間の最適な距離を決定する必要があります。