初歩のシェルスクリプトで遊ぶ[ぬかみそフォントの制作サポート(21)]
棒の先端が尖っている歪みを直す
ぬかみそフォントは、棒の先端部分の丸みをきっちり作ってません。
少しカーブを抑えたかったこともあり、多少の尖りは妥協してきましたが、あまりに尖りすぎな箇所も多くあります。
手作業で直すのは非現実的ですが、スクリプトで一括修正できるなら、現実的な手間で可能なはずです。
今回の補正処理を機会に、尖らない普通のカーブに統一しました。
「嶄」の修正前と修正後の差分です。棒の先端部分と、90度の曲がりの補正が白く見えてます。
これはTTEditが書き出すcsvファイルを、svgファイルに書き換えて、ImageMagickで差分を取りました。
作業の流れ
- TTEditのマクロで、グリフの座標データcsvを一括で書き出す。
- Ubuntuに持ってゆく。
- csvファイルをutf8,LFに変換する。
- 棒の先端部分を一括補正するスクリプトを実行する。
- 90度曲がりの歪みを一括補正するスクリプトを実行する。
- csvファイルをcp932,CRLFに変換する。
- TTEditでフォントファイルを新規作成。
- TTEditのマクロで、csvファイルのうち縦書き文字の部分を読み込む。
- 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文字は目視確認すること