kanejaku.org

WebAssembly でフォントコンバータを作った

Publish date 24 Jun 2018

wasm で何かウェブアプリでも作ろうと思い、フォントのコンバータを作った。OpenType, WOFF, WOFF2 を相互に変換できる。

https://kombu.kanejaku.org/

WOFF2 のデコード/エンコードに google/woff2 を Emscripten で wasm 化したものを使っている。

大きめのフォント、例えば NotoSansCJKjp とかを WOFF2 に変換すると手元のマシンだと2分くらいかかる。最初は Emscripten のランタイムか wasm のオーバーヘッドが大きいのかと邪推したけど、WSL 上でコンパイルしたネイティブの woff2_compress でも1分ぐらいかかることが判明した。google/woff2 のエンコード自体があまり大きいフォントに最適化されていないようだ。

wasm のサイズは-Ozを指定してコンパイルすると 925KB になった。Emscripten のランタイムを含む JS のほうは 26KB。このくらいならなんとか実用に使えるサイズ感な気がする。ランタイムのほうは使っていない部分が結構あるのでもっと小さくできそう。

こまごまとしたアップデートを今後やっていこうと思う。PWA 化とかしてみたい。