除了 FontForge 之外,目前市場上有許多更現代且易於使用的 TTF 轉 WOFF2 工具,分別適合網頁開發者、設計師或是有大量轉換需求的工程師。
線上轉換工具
如果你不想安裝軟體,且轉換數量不多,這幾個網站是首選。
- Fontsource Webfont Converter純瀏覽器處理,檔案不會上傳到伺服器,對隱私更有保障,速度也非常快。
- Transfonter這是目前開發者最推薦的工具。它除了轉換格式,還能幫你生成 @font-face 的 CSS 代碼,並支援字體子集化(Subsetting)來縮減檔案體積。
- CloudConvert萬用型的檔案轉換器,如果你的字體檔案非常大(超過 10MB),一般的網頁工具可能會失敗,這時可以用 CloudConvert 處理。
命令列工具 (CLI)
如果你需要批次處理,或是想把轉換流程加入自動化腳本,這幾個工具非常強大。
- google/woff2這是 Google 官方釋出的參考代碼。在 macOS 可以直接用 brew install woff2 安裝,之後在終端機輸入
woff2_compress yourfont.ttf
就能得到 WOFF2 檔。 - fonttools (Python)這是字體工程領域的標準工具。安裝 Python 後執行
pip install fonttools
轉換指令:
pyftsubset yourfont.ttf “*” –flavor=woff2 –output-file=yourfont.woff2 - wawoff2 (Node.js)這是 Google woff2 的 WebAssembly 版本,適合 Node.js 環境。執行
npx wawoff2 compress yourfont.ttf
工具對比總結
| 工具類型 | 推薦名稱 | 優點 | 缺點 |
| 線上網頁 | Transfonter | 功能最全,可生成 CSS | 有檔案大小限制 |
| 線上網頁 | Fontsource | 本地瀏覽器運算,隱私好 | 功能較單一 |
| 命令列 (C++) | woff2 (Google) | 速度最快,官方標準 | 需手動編譯或安裝環境 |
| 命令列 (Python) | fonttools | 功能最強大,支援子集化 | 學習曲線較高 |
如果你只需要簡單轉檔給網站用,我建議直接用 Transfonter。如果你是想研究如何縮小字體體積,那麼 fonttools 是比較專業的選擇。
使用 Python 進行自動化轉換
如果你的電腦有安裝 Python,使用 fonttools 是最專業的做法。它不只能轉檔,還能移除字體中用不到的字元來減肥。
首先安裝必要的套件:
pip install fonttools brotli
接著你可以使用這段簡單的腳本,它會掃描資料夾內所有的 TTF 檔案並轉換成 WOFF2:
import os
from fontTools.ttLib import TTFont
def convert_to_woff2():
for file in os.listdir('.'):
if file.endswith('.ttf'):
font = TTFont(file)
output_name = file.replace('.ttf', '.woff2')
font.save(output_name, reorderTables=True)
print(f'已完成: {output_name}')
if __name__ == '__main__':
convert_to_woff2()
使用 Shell 指令批次轉換
如果你在 macOS 或 Linux 環境,且已經安裝 Google 官方的 woff2 工具,可以用一行指令處理整個資料夾。
安裝方式:
brew install woff2
轉換指令:
for f in *.ttf; do woff2_compress "$f"; done
這會直接在同個資料夾產生對應的 WOFF2 檔案。這個工具的壓縮率通常是最好的,因為它使用了 Google 開發的 Brotli 壓縮演算法。
pyftsubset 是 fonttools 套件中最強大的工具。它的核心邏輯是從原始字體中「切出」你需要的部分,並重新打包成網頁專用的格式。
基礎轉換指令
如果你不需要刪除任何字元,只是單純想把 TTF 轉成 WOFF2,可以使用這個指令。
Bash
pyftsubset input.ttf --glyphs="*" --flavor=woff2 --output-file=output.woff2
--glyphs="*":代表保留原字體中所有的字元,不進行刪減。--flavor=woff2:指定輸出格式為 WOFF2。如果不加這行,預設會輸出 TTF。
字體子集化(縮減體積)
中文字體動輒 10MB 以上,載入速度很慢。子集化可以讓你只保留網頁會用到的字。
- 指定文字內容:如果你只想保留特定的字(例如「你好」),可以使用 –text。Bash
pyftsubset input.ttf --text="你好" --flavor=woff2 - 使用 Unicode 範圍:如果你想保留常用的中文字範圍,可以使用 –unicodes。Bash
pyftsubset input.ttf --unicodes="U+4E00-9FFF" --flavor=woff2
常用的進階參數
為了讓網頁載入更順暢,建議加上以下參數優化字體結構。
- –layout-features=”*”預設情況下,子集化會刪除 OpenType 特性(如連字、垂直排版)。如果你需要保留這些功能,務必加上這個參數。
- –no-hinting如果你不在意舊螢幕的清晰度,移除 Hinting 資訊可以再減少約 10% 到 20% 的檔案大小。
- –desubroutinize針對 CJK(中日韓)字體,這可以解決某些瀏覽器在渲染子集化後的 CJK 字體時出現的異常。
完整的專業指令推薦
這是我最常建議的「高效能網頁字體」轉換公式:
pyftsubset MarukoGothic.ttf --unicodes="U+4E00-9FFF,U+0000-007F" --flavor=woff2 --layout-features="*" --output-file=font.woff2
這個指令會保留「基本拉丁字母」與「常用中文字範圍」,並維持所有的字體排版特性。
針對你的需求,要把日文、英文以及常用標點符號都包進去,你需要組合多個 Unicode 區塊。
推薦的 Unicode 範圍組合
你可以將以下這段字串直接複製到 --unicodes 參數後。這包含了基本英文、常用符號、日文(平假名、片假名、漢字)以及中文字:
U+0000-007F,U+00A0-00FF,U+2000-206F,U+3000-303F,U+3040-309F,U+30A0-30FF,U+4E00-9FFF,U+FF00-FFEF
各區塊詳細說明
下表拆解了這串代碼代表的意義,你可以根據需求增減:
| 範圍 (Unicode Range) | 內容說明 | 包含項目 |
| U+0000-007F | 基本拉丁字母 | 數字、大小寫英文字母、基礎半形標點 |
| U+00A0-00FF | 拉丁增補 | 西歐語言常用符號、貨幣符號 |
| U+2000-206F | 一般標點 | 特殊引號、破折號、點號 |
| U+3000-303F | CJK 符號 | 全形空格、句號、括號、頓號 |
| U+3040-309F | 平假名 | 日文平假名、濁音符號 |
| U+30A0-30FF | 片假名 | 日文片假名、長音符號 |
| U+4E00-9FFF | CJK 漢字 | 常用繁體、簡體、日文漢字 |
| U+FF00-FFEF | 半形/全形形式 | 全形英文字母、全形數字、常用符號 |
最終執行指令範例
這是一個非常完整的轉換指令,適合處理像「丸子黑體」這類包含中日文的字體:
for macOS / Linux:
pyftsubset MarukoGothic.ttf \
--unicodes="U+0000-007F,U+00A0-00FF,U+2000-206F,U+3000-303F,U+3040-309F,U+30A0-30FF,U+4E00-9FFF,U+FF00-FFEF" \
--flavor=woff2 \
--layout-features="*" \
--output-file=MarukoGothic_optimized.woff2
for Windows:
pyftsubset MarukoGothic.ttf ^
--unicodes="U+0000-007F,U+00A0-00FF,U+2000-206F,U+3000-303F,U+3040-309F,U+30A0-30FF,U+4E00-9FFF,U+FF00-FFEF" ^
--flavor=woff2 ^
--layout-features="*" ^
--output-file=MarukoGothic_optimized.woff2
小提醒
如果你發現某些特殊的避頭尾點號(如雙引號)沒出現,通常是因為它們落在 U+2018-201D 之間,上面的 U+2000-206F 已經完整覆蓋了。