사용자가 텍스트를 입력 할 때 글리프 모양을 기반으로 문자의 자동 커닝을 계산하는 알고리즘을 아는 사람이 있습니까?
나는 사전 너비 또는 이와 유사한 것을 사소하게 계산하는 것이 아니라 문자 사이의 시각적으로 최적의 거리를 추정하기 위해 글리프 모양을 분석하는 것을 의미합니다. 예를 들어 한 줄에 3 개의 문자를 순차적으로 배치하는 경우 중간 문자는 문자의 모양에도 불구하고 줄의 중앙에 있어야합니다. 다음은 커닝 온더 기능을 보여주는 예입니다.
즉시 커닝의 예 :
위의 이미지에서 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"/>
알고리즘 (또는 자바 스크립트 코드)은 이러한 경로를 어떤 방식으로 검사하여 경로 간의 최적 거리를 결정해야합니다.