盤の上で字を組む道具を作っている。明朝を選んで描いた字が、どうも硬い。測ると、明朝で描いたはずの絵と、ただの serif で描いた絵が、画素まで同じだった。書体は、選んだだけでは届いていなかった。
この研究を一言でいうと──書体は指定しただけでは届かない。届いたかは、画素で確かめる。
指定した書体は、黙って差し替わる
Web の書体は、ページのどこかで使われるまで落ちてこない。盤(canvas)の中にしか出てこない書体は、一度も頼まれないまま終わる。canvas はそれを知らせない。手元にある近い書体で、そのまま描く。
| 時点 | check() | 明朝で描いた絵 | serif で描いた絵 |
|---|---|---|---|
| 読み込む前 | false | e9924e0 | e9924e0 |
| 描く字を渡して読み込んだ後 | true | 563032fb | e9924e0 |
黒い画素の数は、読み込む前が 16132、後が 16813。ハッシュ(絵の指紋)が serif と一致している間は、別の書体で描いている。
描く字を渡して頼む
Web の書体は、字の範囲ごとに細かく分かれている。「この書体を」と頼むだけでは、いま描く字の入った分が落ちてこないことがある。頼むときは、実際に描く字を一緒に渡す。届いたら描き直す。届くまで盤を止めない。
確かめ方
- 同じ字を「選んだ書体,serif」と「serif」で描き、ハッシュを比べる。同じなら届いていない。
- check() の答えは、頼む前と後で変わる。判定には使わない。
- エラーが出ないので、目で「なんとなく硬い」と感じた時点で測る。
あなたの画面の明朝は、本当に明朝で描かれていますか。
— 他の研究を読む