それ Font::TTF でできたよ
TTF フォントから EBDT / EBLC を削除するプログラムを昨日作成しましたが,CPAN をみたら,Font::TTF なるモジュールがありました。うんうん,FreeType じゃなくてこういうコンセプトのものがほしかったんです。
とりあえず,そのまま読んで書いてみると,
use Font::TTF::Font; my $font = Font::TTF::Font->open($ARGV[0]); $font->out($ARGV[1]);
なぜかファイルサイズが半分以下に。もしや?と思って開いてみたら,見事に EBDT 等が削除されてました。
これはこれで目的達成できたんだけど,EBDT 等を温存したい場合は?
my $font = Font::TTF::Font->open($ARGV[0]); $font->{$_}->read for (qw( EBDT EBLC )); $font->out($ARGV[1]);
こんな感じですかね?と,出力してみたら延々時間がかかった上に,ファイルサイズが増えてしまいました。たぶん EBDT の再利用に対応してないんだろうな。
で出力結果をみてみたら,超汚いビットマップになってしまいました。たとえて言うと Java コンパネのフォントのような昔の XTF のような… Font::TTF が gasp に対応してないのが理由なのかしらん。でもビットマップでヒンティングとか関係ないですよねたぶん…
ちなみに,サンプル通りに
$font->tables_do(sub { $_[0]->read; });
で全テーブル強制読み込みしても同じ結果でした。よろしくない。
日本語フォントだと読み込みにすごく時間がかかりますし,まだ有用じゃないかなと思います。