初歩のシェルスクリプトで遊ぶ[ぬかみそフォントの制作サポート(21)]

棒の先端が尖っている歪みを直す


ぬかみそフォントは、棒の先端部分の丸みをきっちり作ってません。

少しカーブを抑えたかったこともあり、多少の尖りは妥協してきましたが、あまりに尖りすぎな箇所も多くあります。
手作業で直すのは非現実的ですが、スクリプトで一括修正できるなら、現実的な手間で可能なはずです。

今回の補正処理を機会に、尖らない普通のカーブに統一しました。


」の修正前と修正後の差分です。棒の先端部分と、90度の曲がりの補正が白く見えてます。
これはTTEditが書き出すcsvファイルを、svgファイルに書き換えて、ImageMagickで差分を取りました。

作業の流れ

  1. TTEditのマクロで、グリフの座標データcsvを一括で書き出す。
  2. Ubuntuに持ってゆく。
  3. csvファイルをutf8,LFに変換する。
  4. 棒の先端部分を一括補正するスクリプトを実行する。
  5. 90度曲がりの歪みを一括補正するスクリプトを実行する。
  6. csvファイルをcp932,CRLFに変換する。
  7. TTEditでフォントファイルを新規作成。
  8. TTEditのマクロで、csvファイルのうち縦書き文字の部分を読み込む。
  9. TTEditの標準機能[インポート->フォルダ内全てのファイル]を実行し、csvファイルの横書き文字を部分を読み込む。

複雑なグリフになると、予想外のところで条件に合致してしまうことがあるわけです。
作業では座標移動の最大値を制限して、大きな移動を伴うグリフは目視確認しています。
テストで「重複パスを除去」した後のフォントファイルを使ったときは、やっぱり想定外のところでグリフが変形させられたりしました。
重複除去前なら、自動処理でも結果的には大丈夫っぽい感じでしたが。

スクリプトの解説

スクリプトはzipでまとめて「フォント以外のダウンロードファイル」に置きました。
棒の先端部分の処理の、簡単な解説だけ。

棒の先端部分は、制御点が「赤、赤、青、赤、青、赤、赤」の順に並びます。
この制御点の並びが見つかったならば、直線部分の座標を検査して、「コ」の字になっているかどうかを判定します。
「コ」の字の形に並んでいるならば、カーブの座標3つを移動します。

というように、処理自体は簡単です。

作業中のメモ

ぬかみそフォントのパス重複前の制御点が、だいたい100万個。
このうち、棒の先端部分で、歪みが有るものが、13万5000個。
歪みが小さい大部分は自動処理をして、大きめのものは目視で確認。
その後にスクリプトで二回目の補正処理を実行しました。

nukamiso_komenuka beta10 (beta11作業開始時点)


csv     8746
横書き  8631
縦書き   115


ヘッダー込み行数  1030497
文字数8746*2        17492
全制御点数        1013005



lineHead ---------------------------------------------------
all 1013005

moveMax      +       -
1024   1013005       0
  16   1013005       0
  15   1013004       1
  14   1013004       1
  13   1013002       3
  12   1013001       4
  11   1012999       6
  10   1012998       7
   9   1012986      19
   8   1012976      29
   7   1012851     154
   6   1012821     184
   5   1012502     503
   4   1011713    1292
   3    974169   38836
   2    970557   42448
   1    894472  118533
   0    878159  134846

全補正候補数    134846


【補正値5で実行する】
・座標移動が6以上の補正は実行しない
・座標数で503の座標が処理されずに残る
・処理されずに残る文字数は 401 (400,1)401文字は目視確認すること



lineAngle ---------------------------------------------------
all 1013005

moveMax      +     -
1024   1013005     0
  44   1013005     0
  43   1013004     1
  40   1013004     1
  39   1013003     2
  28   1013003     2
  27   1013002     3
  13   1013002     3
  12   1012985    20
  11   1012973    32
  10   1012973    32
   9   1012972    33
   8   1012966    39
   7   1012868   137
   6   1012850   155
   5   1012684   321
   4   1012523   482
   3   1011387  1618
   2   1010913  2092
   1   1010519  2486
   0   1010073  2932

全補正候補数    2932

【補正値5で実行する】
・座標移動が6以上の補正は実行しない
・座標数で321の座標が処理されずに残る
・処理されずに残る文字数は 295 (293,2)295文字は目視確認すること