Qualcuno conosce qualche algoritmo che calcolerebbe automaticamente la crenatura dei caratteri in base alle forme dei glifi quando l'utente digita il testo?
Non intendo un calcolo banale di larghezze avanzate o simili, intendo analizzare la forma dei glifi per stimare la distanza visivamente ottimale tra i caratteri. Ad esempio, se disponiamo tre caratteri in sequenza in una riga, il personaggio centrale dovrebbe SEMPRE essere al centro della linea, nonostante le forme del personaggio. Un esempio illumina la funzionalità di crenatura al volo:
Un esempio di crenatura al volo:
Nell'immagine sopra a
sembra essere troppo giusto. Dovrebbe essere spostato di un certo importo verso in T
modo che sembri essere nel mezzo di T
e g
. L'algoritmo dovrebbe esaminare le forme di T
e a
(e possibilmente anche altre lettere) e decidere quanto a
deve essere spostato a sinistra. Questa certa quantità è la cosa che dovrebbe essere calcolata dall'algoritmo - SENZA ESAMINARE LE POSSIBILI COPPIE DEL FONT.
Sto pensando di codificare un programma javascript (+ svg + html) che utilizza caratteri disegnati a mano e molti di loro mancano di coppie di crenatura. I campi di testo saranno modificabili e possono includere testo di più caratteri. Penso che la crenatura al volo potrebbe essere un modo per garantire un flusso di testo medio in questo caso.
EDIT: un punto di partenza potrebbe essere l'uso del carattere svg, quindi è facile ottenere i valori del percorso. Nel carattere svg il percorso è definito in questo modo:
<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'algoritmo (o codice javascript) dovrebbe esaminare quei percorsi in qualche modo e determinare la distanza ottimale tra loro.