Kennt jemand einen Algorithmus, der das automatische Kerning von Zeichen basierend auf Glyphenformen berechnet, wenn der Benutzer Text eingibt?
Ich meine nicht die triviale Berechnung von Vorschubbreiten oder ähnlichem, sondern die Analyse der Form von Glyphen, um den visuell optimalen Abstand zwischen Zeichen abzuschätzen. Wenn wir beispielsweise drei Zeichen nacheinander in einer Zeile anordnen, sollte sich das mittlere Zeichen trotz der Formen des Zeichens in der Mitte der Zeile befinden. Ein Beispiel beleuchtet die Kerning-on-the-Fly-Funktionalität:
Ein Beispiel für Kerning-on-the-Fly:
Im obigen Bild a
scheint es zu richtig zu sein. Es sollte eine verschoben wird bestimmte Menge auf , T
so dass es in der Mitte zu sein scheint T
und g
. Der Algorithmus sollte die Formen von T
und a
(und möglicherweise auch andere Buchstaben) untersuchen und entscheiden, wie viel a
nach links verschoben werden muss. Dieser bestimmte Betrag sollte vom Algorithmus berechnet werden - OHNE DIE MÖGLICHEN KERNING-PAARE DER SCHRIFT ZU PRÜFEN.
Ich denke darüber nach, ein Javascript-Programm (+ svg + html) zu codieren, das handgezeichnete Schriftarten verwendet, und vielen von ihnen fehlen Kerning-Paare. Die Textfelder können bearbeitet werden und können Text mit mehreren Schriftarten enthalten. Ich denke, dass Kerning-on-the-Fly in diesem Fall eine Möglichkeit sein könnte, einen mittleren Textfluss sicherzustellen.
BEARBEITEN: Ein Ausgangspunkt hierfür könnte die Verwendung der Schriftart svg sein, sodass es einfach ist, Pfadwerte abzurufen. In der Schriftart svg wird der Pfad folgendermaßen definiert:
<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"/>
Der Algorithmus (oder Javascript-Code) sollte diese Pfade auf irgendeine Weise untersuchen und den optimalen Abstand zwischen ihnen bestimmen.