opentype.js: کار با فونتها در مرورگر و Node.js
خلاصهٔ کاملتر
opentype.js یه کتابخونه متنباز جاوااسکریپته که بهت دسترسی کامل به ساختار داخلی فونتها رو میده. یعنی میتونی ببینی هر حرف چطور شکل گرفته، چه مسیری داره، و حتی اون رو به صورت گرافیکی دستکاری کنی. این کتابخونه هم توی مرورگر کار میکنه، هم توی محیط Node.js.
یکی از مهمترین قابلیتهاش اینه که میتونه متن رو به مسیرهای بزیه (Bézier Path) تبدیل کنه. این یعنی میتونی روی شکل دقیق حروف کنترل داشته باشی و مثلاً باهاشون انیمیشن بسازی یا اونا رو به SVG تبدیل کنی.
از نظر فرمتهای پشتیبانیشده، opentype.js با WOFF، OTF و TTF (هم با outline نوع TrueType و هم PostScript) کار میکنه. علاوه بر این، کرنینگ (فاصلهگذاری بین حروف) از طریق جداول GPOS یا kern، لیگاتورها، hinting فونتهای TrueType، رندر متن عربی، ایموجی و گلیفهای رنگی COLR/CPAL هم ساپورت میشن.
برای نصب میتونی از npm استفاده کنی:
npm install opentype.jsو بعد به این شکل import کنی:
import { load } from 'opentype.js';برای لود کردن یه فونت، اول باید فایل رو به یه ArrayBuffer تبدیل کنی و بعد اون رو parse کنی. مثلاً اگه فونت رو از URL میخوای بگیری:
const buffer = fetch('/fonts/my.woff').then(res => res.arrayBuffer());
const font = opentype.parse(await buffer);
console.log(font);یا اگه توی Node.js هستی میتونی مستقیم از فایلسیستم بخونی:
const buffer = require('fs').promises.readFile('./my.woff');یه نکته جالب درباره WOFF2 اینه که این فرمت از فشردهسازی Brotli استفاده میکنه و حدود ۲۹٪ بهتر از WOFF معمولیه. ولی پشتیبانی مستقیم ازش باعث میشه حجم کتابخونه از ۱۲۰ کیلوبایت به بیش از ۱.۴ مگابایت برسه! به همین خاطر توصیه میشه فونت WOFF2 رو از قبل با ابزاری مثل wawoff2 از حالت فشرده خارج کنی و بعد بهش بدی.
این کتابخونه یه حالت کمحافظه (low memory mode) هم داره که برای پروژههایی که منابع محدودی دارن خیلی به درد میخوره. همچنین TypeScript رو هم ساپورت میکنه.
نکات کلیدی:
- تبدیل متن به مسیر بزیه برای رندر و دستکاری گرافیکی حروف
- پشتیبانی از WOFF، OTF و TTF
- ساپورت کرنینگ، لیگاتور، متن عربی و ایموجی
- قابل استفاده در مرورگر و Node.js
- نصب آسان از طریق npm یا CDN
- برای WOFF2 باید فونت رو از پیش decompress کنی تا حجم کتابخونه بالا نره
- حالت کمحافظه برای محیطهای محدود در دسترسه




