আমি আপনার স্থিতিশীল অক্ষরের প্রস্থের মানচিত্রটি করার "একমাত্র ধারণা" পছন্দ করি! এটি আসলে আমার উদ্দেশ্যগুলির জন্য ভাল কাজ করে। কখনও কখনও, কার্য সম্পাদনের কারণে বা আপনার কোনও ডিওমে সহজেই অ্যাক্সেস না থাকায় আপনি কেবল একটি হ্যাক স্ট্যান্ডেলোন ক্যালকুলেটরটি একটি ফন্টে ক্যালিব্রেট করতে চাইতে পারেন। সুতরাং এখানে একটি হেলভেটিকায় ক্যালিব্রেটেড; একটি স্ট্রিং এবং (বিকল্প) ফন্টের আকারটি পাস করুন:
function measureText(str, fontSize = 10) {
const widths = [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.2796875,0.2765625,0.3546875,0.5546875,0.5546875,0.8890625,0.665625,0.190625,0.3328125,0.3328125,0.3890625,0.5828125,0.2765625,0.3328125,0.2765625,0.3015625,0.5546875,0.5546875,0.5546875,0.5546875,0.5546875,0.5546875,0.5546875,0.5546875,0.5546875,0.5546875,0.2765625,0.2765625,0.584375,0.5828125,0.584375,0.5546875,1.0140625,0.665625,0.665625,0.721875,0.721875,0.665625,0.609375,0.7765625,0.721875,0.2765625,0.5,0.665625,0.5546875,0.8328125,0.721875,0.7765625,0.665625,0.7765625,0.721875,0.665625,0.609375,0.721875,0.665625,0.94375,0.665625,0.665625,0.609375,0.2765625,0.3546875,0.2765625,0.4765625,0.5546875,0.3328125,0.5546875,0.5546875,0.5,0.5546875,0.5546875,0.2765625,0.5546875,0.5546875,0.221875,0.240625,0.5,0.221875,0.8328125,0.5546875,0.5546875,0.5546875,0.5546875,0.3328125,0.5,0.2765625,0.5546875,0.5,0.721875,0.5,0.5,0.5,0.3546875,0.259375,0.353125,0.5890625]
const avg = 0.5279276315789471
return str
.split('')
.map(c => c.charCodeAt(0) < widths.length ? widths[c.charCodeAt(0)] : avg)
.reduce((cur, acc) => acc + cur) * fontSize
}
সেই দৈত্য কুরুচিপূর্ণ অ্যারে হ'ল অক্ষর কোড অনুসারে এএসসিআইআই অক্ষর প্রস্থ। সুতরাং এটি কেবল ASCII সমর্থন করে (অন্যথায় এটি একটি গড় অক্ষরের প্রস্থ অনুমান করে)। ভাগ্যক্রমে, প্রস্থটি মূলত ফন্টের আকারের সাথে লিনিয়ার স্কেল করে, তাই এটি কোনও ফন্টের আকারে বেশ ভালভাবে কাজ করে। এটি লক্ষণীয়ভাবে কার্নিং বা লিগাচার বা যে কোনও বিষয়ে সচেতনতার অভাব বোধ করছে।
"ক্যালিব্রেট" করতে আমি কেবলমাত্র প্রতিটি চরিত্রকে একটি এস জি জি তে চারকোড 126 (শক্তিশালী টিল্ড) পর্যন্ত উপস্থাপন করেছি এবং বাউন্ডিং বাক্সটি পেয়েছি এবং এই অ্যারেটিতে এটি সংরক্ষণ করেছি; আরও কোড এবং ব্যাখ্যা এবং ডেমো এখানে ।