2026年6月29日月曜日

Z's word JG ver.3 のベジェフォント解析、やろうやろうと思いつつ。

 自分はこれに含まれている行書や教科書体、明朝体のフォントを「漢字職人」というソフトで持っていますし、これの(骨格が弱い)ゴシックや丸ゴシックは多分使わないと思うので、わざわざコレのアウトラインフォントを解析する必要も無いのですが、純粋にフォントフォーマットに興味があります。

Z's word JG ver.2 の直線アウトラインフォントだと、フォントファイルの中身は「フォントID→フォントテーブル→フォントデータ」で、1024メッシュの座標をX、Yの順に2値で(10ビットで)延々つないでいるだけ、で「1023,1023」の座標でパーツを描き終わり、その座標が2回続けば文字を描き終わる…というとても単純な構造だったように記憶しています。

なら ver.3 は? となると、バイナリデータを覗いてみたところ、恐らく同じ構造です。

「ZMGO0BY.FN1」というファイルを例にとると、

フォントテーブルを見ると、最初の文字はE2hなので、
この部分が該当するかと。FF FF FF FF が文字の区切りっぽいし

1400h; 「ZMGO0BY FN1」の文字が見える

2c00h; 「font2356」

2dc0h; 「ZMGO0BY基本フォントセット 全角漢字 丸ゴシック体」

2e40h~5c93h; フォントテーブル(各文字のデータの始まり位置を示しているもの)

    4バイト×2,965字

5d40h~116400h; フォントデータ

と思います。

ここまで分かれば(推測できれば)、あとは各文字がどのようなデータ構造なのか…だけの話になります。で、このPC98用アウトラインフォントをWindows用に展開するソフトがベクターにあり、それのプログラムをザッと見てみたところ、どうやら座標を12ビットで見ているっぽいんですよね。そうすると、ver.3 はベジェ曲線なので(ファイル内にも「ベジェ曲線」って書いてあるし)、10ビットで0~1023メッシュを指定して、残りの2ビットで「その点がノード(端点)なのか、ポイント(方向点)なのか」みたいな情報を付加しているのかな? と推測してみたり。

「FF」が各パーツの区切りとするならば、最初に大きなパーツを描いていて、そのあと小さなパーツを5つ描いているっぽいんですよね。ということは、この文字は「亜」なのかな? なんて推測したり。

丸ゴシックよりは角ゴシックの方が解析しやすいかも。で、「一」の字(亜を1番目とすれば、一は76番目)のデータを見てみると分かりやすいかも…なんて思ったりもするのですが。まぁ、そんなこんなでちゃんと解析してみたい気持ちはあるのです。でも、日常生活での優先順位は低い…みたいな。角ゴシックや丸ゴシックがもっとしっかりした文字だったら、それを使いたくて解析する! みたいな強い動機が生まれたりもするのですが。

0 件のコメント:

コメントを投稿