Хтось знає який-небудь алгоритм, який би обчислював автоматичне закреслення символів на основі форм гліфів, коли користувач вводить текст?
Я не маю на увазі тривіальний обчислення завпередньої ширини чи подібне, я маю на увазі аналіз форми гліфів для оцінки візуально оптимальної відстані між символами. Наприклад, якщо ми викладаємо три символи послідовно в рядку, середній символ повинен СЕМЕ бути в центрі рядка, незважаючи на форми символів. Приклад просвічує функціональність kerning-on-the-fly:
Приклад кернінгу на ходу:
Наведене зображення a
здається занадто правильним. Слід змістити певну суму в бік, T
щоб, здається, знаходитися в середині T
та g
. Алгоритм повинен вивчити форми T
та a
(і, можливо, інші літери також) і вирішити, скільки a
потрібно змістити ліворуч. Ця певна сума - це те, що алгоритм повинен обчислити - БЕЗ ДОСЛІДЖЕННЯ МОЖЛИВИХ КЕРІННІХ ПАРІ ФОНТУ.
Я думаю про кодування програми javascript (+ svg + html), яка використовує вручну намальовані шрифти, і в багатьох з них бракує пар кернінгу. Текстові поля можна редагувати і можуть містити текст з декількох шрифтів. Я думаю, що кернінг на ходу може бути одним із способів забезпечити середній потік тексту в цьому випадку.
EDIT: Одним вихідним моментом для цього може бути використання шрифту 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"/>
Алгоритм (або код JavaScript) повинен певним чином вивчити ці шляхи та визначити оптимальну відстань між ними.