Adakah yang tahu algoritma yang menghitung kerning karakter secara otomatis berdasarkan bentuk mesin terbang ketika pengguna mengetik teks?
Maksud saya bukan perhitungan sepele lebar muka atau serupa, maksud saya menganalisis bentuk mesin terbang untuk memperkirakan jarak visual yang optimal antara karakter. Sebagai contoh jika kita meletakkan tiga karakter secara berurutan dalam sebuah garis, karakter tengah harus TAMPAK berada di tengah garis meskipun bentuk karakter. Contoh mencerahkan fungsionalitas kerning-on-the-fly:
Contoh kerning-on-the-fly:
Pada gambar di atas a
sepertinya terlalu tepat. Itu harus digeser jumlah tertentu ke arah T
sehingga tampaknya berada di tengah T
dan g
. Algoritme harus memeriksa bentuk T
dan a
(dan mungkin juga huruf lain) dan memutuskan berapa banyak yang a
harus digeser ke kiri. Jumlah tertentu ini adalah hal yang harus dihitung algoritme - TANPA MEMERIKSA PASANG KERNING YANG MUNGKIN DARI FONT.
Saya sedang memikirkan pengkodean program javascript (+ svg + html) yang menggunakan font yang digambar tangan dan banyak dari mereka tidak memiliki pasangan kerning. Bidang teks akan dapat diedit dan dapat menyertakan teks dari banyak font. Saya pikir kerning-on-the-fly bisa menjadi salah satu cara untuk memastikan aliran teks rata-rata dalam kasus ini.
EDIT: Salah satu titik awal untuk ini bisa menggunakan font svg, jadi mudah untuk mendapatkan nilai path. Dalam font svg path didefinisikan dengan cara ini:
<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"/>
Algoritme (atau kode javascript) harus memeriksa jalur tersebut dengan cara tertentu dan menentukan jarak optimal di antara mereka.