Quelqu'un connaît-il un algorithme qui calculerait automatiquement le crénage des caractères en fonction des formes de glyphe lorsque l'utilisateur tape du texte?
Je ne veux pas dire un calcul trivial des largeurs d'avance ou similaire, je veux dire analyser la forme des glyphes pour estimer la distance visuellement optimale entre les caractères. Par exemple, si nous plaçons trois caractères séquentiellement sur une ligne, le caractère du milieu devrait SEMBLER être au centre de la ligne malgré les formes du caractère. Un exemple éclaire la fonctionnalité de crénage à la volée:
Un exemple de crénage à la volée:
Dans l'image ci-dessus a
semble être trop à droite. Il doit être déplacé d'un certain montant vers T
pour qu'il semble être au milieu de T
et g
. L'algorithme doit examiner les formes de T
et a
(et éventuellement d'autres lettres également) et décider de la quantité a
à déplacer vers la gauche. Cette certaine quantité est la chose que l'algorithme doit calculer - SANS EXAMINER LES PAIRES DE KERNING POSSIBLES DE LA POLICE.
Je pense à coder un programme javascript (+ svg + html) qui utilise des polices dessinées à la main et beaucoup d'entre elles n'ont pas de paires de crénage. Les champs de texte seront modifiables et peuvent inclure du texte de plusieurs polices. Je pense que le crénage à la volée pourrait être un moyen d'assurer un flux de texte moyen dans ce cas.
EDIT: Un point de départ pourrait être d'utiliser la police svg, il est donc facile d'obtenir des valeurs de chemin. En police svg, le chemin est défini de cette façon:
<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"/>
L'algorithme (ou code javascript) devrait examiner ces chemins d'une certaine manière et déterminer la distance optimale entre eux.