Cắt font (subset) API

Cắt font TTF, OTF, WOFF chỉ giữ ký tự cần dùng (văn bản, dải Unicode, preset Latin hoặc tiếng Việt), xuất WOFF2, WOFF và CSS.

POSThttps://apibox.io.vn/v1/font-subset

Tải font lên qua multipart file (TTF, OTF, WOFF hoặc bộ TrueType collection với face_index) và chọn ký tự cần giữ: văn bản mẫu text, dải unicodes (U+0020-007E, U+1EA0-1EF9) và / hoặc preset: latin, latin-ext (dải của Google Fonts), vietnamese (Latin cơ bản + Latin-1 + mọi chữ tiếng Việt dựng sẵn + dấu thanh tổ hợp + ₫), vietnamese-only hoặc digits. Font được cắt bằng HarfBuzz hb-subset, giữ các glyph dùng qua bảng OpenType (chữ ghép, dấu).

Chọn format woff2 (mặc định), woff, ttf hoặc all. Kết quả có dung lượng trước và sau, missing_characters là ký tự font không có, vietnamese_support (full / partial / none), khối CSS @font-face kèm unicode-range, và file dạng base64 (output=binary trả về chính file font). Tính năng OpenType: features=default (bộ mặc định của HarfBuzz), all, hoặc danh sách như kern,liga; drop_features để bỏ bớt; hinting=false bỏ hinting cho file nhỏ hơn; pin_axes=true chuyển font biến thiên về bản mặc định.

Không nhận đầu vào WOFF2 (hãy gửi bản TTF / WOFF). Font tối đa 30 MB. Chỉ cắt font có giấy phép cho phép (ví dụ SIL OFL); trách nhiệm về giấy phép font thuộc về bạn.

Tham số

TênVị tríKiểuBắt buộcMặc định
filebodyfilecóFont TTF, OTF, WOFF hoặc TTC (multipart, body thô hoặc file_base64), tối đa 30 MB.
textbodystringkhôngVăn bản mẫu: mọi ký tự trong đó được giữ lại.
unicodesbodystringkhôngDải Unicode, ví dụ U+0020-007E, U+20AB (cho phép dạng U+1E??).
presetbodystringkhônglatin, latin-ext, vietnamese, vietnamese-only, digits (có thể ghép bằng dấu phẩy).
formatbodystringkhôngwoff2woff2, woff, ttf hoặc all (có thể ghép bằng dấu phẩy).
featuresbodystringkhôngdefaultTính năng OpenType giữ lại: default, all hoặc danh sách như kern,liga,ss01.
drop_featuresbodystringkhôngTag tính năng cần bỏ, ví dụ dlig,salt.
hintingbodybooleankhôngtruefalse bỏ hinting TrueType (file nhỏ hơn).
pin_axesbodybooleankhôngfalseFont biến thiên: chỉ giữ bản mặc định.
familybodystringkhôngTên font-family trong CSS (mặc định: tên họ font).
outputbodystringkhôngjsonjson (file dạng base64) hoặc binary (định dạng đầu tiên dưới dạng file).

Ví dụ

curl -X POST "https://apibox.io.vn/v1/font-subset" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -F "file=@./my-file"

Kết quả trả về

{
  "font": {
    "family": "Be Vietnam Pro",
    "style": "Regular",
    "full_name": "Be Vietnam Pro Regular",
    "postscript_name": "BeVietnamPro-Regular",
    "input_format": "ttf",
    "input_bytes": 132948,
    "characters_in_font": 459
  },
  "requested": 311,
  "kept": 309,
  "missing": 2,
  "missing_characters": "̩‛",
  "missing_ranges": "U+0329, U+201B",
  "vietnamese_support": "full",
  "features": "default",
  "hinting": true,
  "sizes": {
    "original": 132948,
    "woff2": 30884,
    "woff": 35096
  },
  "saved_percent": 76.8,
  "unicode_range": "U+0020-007E, U+00A0-00FF, U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0306, U+0309, U+0323, U+1EA0-1EF9, U+2013-2014, U+2018-201A, U+201C-201D, U+2026, U+20AB",
  "css": "@font-face {\n  font-family: 'Be Vietnam Pro';\n  font-style: normal;\n  font-weight: 400;\n  font-display: swap;\n  src: url('BeVietnamPro-Regular-subset.woff2') format('woff2'),\n       url('BeVietnamPro-Regular-subset.woff') format('woff');\n  unicode-range: U+0020-007E, U+00A0-00FF, …, U+1EA0-1EF9, …, U+20AB;\n}",
  "files": {
    "woff2": {
      "filename": "BeVietnamPro-Regular-subset.woff2",
      "content_base64": "d09GMgABAAAAAHikABEAAAABScwAAHhGAAEAAAAA…"
    },
    "woff": {
      "filename": "BeVietnamPro-Regular-subset.woff",
      "content_base64": "d09GRgABAAAAAIkYABEAAAABScwAAQAAAAAAAAAA…"
    }
  },
  "ms": 177
}

Ứng dụng

  • Làm web font tiếng Việt tải nhanh mà không mất dấu
  • Tạo font siêu nhỏ chỉ chứa chữ của tiêu đề hoặc logo
  • Kiểm tra font có hỗ trợ đủ chữ tiếng Việt trước khi dùng
  • Chuyển TTF sang WOFF2 / WOFF kèm sẵn đoạn @font-face

Hỏi đáp

Vì sao chữ tiếng Việt bị lỗi khi dùng subset "latin" của Google?

Các chữ ă, ơ, ư, đ và chữ có dấu thanh (ạ, ế, ữ…) nằm ở dải Latin mở rộng. Dùng preset=vietnamese để giữ Latin cơ bản cùng mọi chữ tiếng Việt dựng sẵn và dấu tổ hợp trong một file.

File WOFF2 được tạo thế nào?

Font sau khi cắt được nén Brotli theo định dạng WOFF2 với bảng không biến đổi (null transform cho glyf / loca theo đặc tả). Trình duyệt tải như mọi WOFF2; file lớn hơn vài phần trăm so với khi biến đổi glyf.

Có báo ký tự bị thiếu không?

Có: missing_characters và missing_ranges liệt kê ký tự được yêu cầu nhưng không có trong cmap của font, và vietnamese_support cho biết full, partial hay none.

API liên quan

Bắt đầu với 1.000 request miễn phí mỗi tháng. Nhận API key miễn phí →