Czy ktoś zna jakiś algorytm, który automatycznie obliczałby kerning znaków na podstawie kształtów glifów, gdy użytkownik wpisuje tekst?
Nie mam na myśli trywialnych obliczeń szerokości posunięć itp., Mam na myśli analizę kształtu glifów w celu oszacowania optymalnej wizualnie odległości między postaciami. Na przykład, jeśli ułożymy trzy znaki sekwencyjnie w linii, środkowy znak powinien WIDZIĆ SIĘ, aby znajdować się na środku linii, pomimo kształtów postaci. Przykład oświeca funkcjonalność kerningu w locie:
Przykład kerningu w locie:
Na powyższym zdjęciu a
wydaje się być zbyt poprawne. Powinien być przesunięty o określoną wartość w kierunku, T
tak aby wydawał się znajdować w środku T
i g
. Algorytm powinien zbadać kształty T
i a
(i ewentualnie także inne litery) oraz zdecydować, o ile a
należy przesunąć w lewo. Algorytm powinien obliczyć tę pewną ilość - BEZ BADANIA MOŻLIWYCH PAR PAROWYCH CZCIONKI.
Zastanawiam się nad kodowaniem programu javascript (+ svg + html), który używa ręcznie rysowanych czcionek i wielu z nich nie ma par kerningu. Pola tekstowe będą edytowalne i mogą zawierać tekst wielu czcionek. Myślę, że kerning w locie może być jednym ze sposobów zapewnienia średniego przepływu tekstu w tym przypadku.
EDYCJA: Jednym z punktów wyjścia może być użycie czcionki svg, więc łatwo jest uzyskać wartości ścieżki. W czcionce svg ścieżka jest zdefiniowana w następujący sposób:
<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"/>
Algorytm (lub kod javascript) powinien w jakiś sposób zbadać te ścieżki i określić optymalną odległość między nimi.