2009-03-05 13 views
6

現在、壊れているTrueTypeフォントを扱っています。私に利用可能なプログラムは、maxpテーブルに問題があると教えてくれます - maxContoursメンバーの値が大きすぎます。 maxContoursの値が高すぎるか低すぎるかを検出する確実な方法はありますか(問題もあります)。 (フォントはプログラムなので、フォントファイルを検出する一つの方法は実行することですが、これは私には受け入れられない解決方法です)。不正なTrueTypeフォントの検出

私はフォントライブラリを追加できないので、フォントライブラリは必要ありません。私はすでに独自のTrueTypeフォントパーサをロールバックしています。残っているのは、上記のテーブルの与えられた値が間違っているかどうかをチェックすることです。パーサーと小切手を私の製品に追加します。

私はフォントを再構築するオプションがありません。私は消費者です - 私は、入って来るフォントが壊れているかどうか、そしてできるだけ少ない労力でうまくいくかどうかを検出する必要があります。

私がWindows XP/Vistaをお使いの場合32 & 64ビットとそのサーバーバージョン!

答えて

0

どのプラットフォームを使用していますか?私は、Python用のFontToolsライブラリを使用して、非常に愉快なTrueTypeファイルをハックすることができました:

font= fontTools.ttLib.TTFont("suspect.ttf") 
font['maxp'].maxContours 

ETA再qを編集:だから質問は、「高すぎる/低すぎるmaxContoursのどのような値」だけでしょうか?私が知る限り、文書化された制限はありませんが、グリフにはそれより多くの輪郭が含まれている場合には、「いくつかを追加する」のがかなり一般的です。

(何厄介なフォントでmaxContoursだし、どのようにそれが実際のグリフで使用される輪郭の数に関連していますか?)

+0

ありがとうございます!しかし、いいえ、パーサーは必要ありません。明快さを加えるために私の質問を編集します。 – dirkgently

2

ではなくエラーを検出しようと、私はちょうど再構築することが最も便利見つけました問題のフォントはFontForgeです。これは、豊富なコマンドラインとスクリプトAPIを提供するため、完全に自動化することができます。さらに、必要に応じて、フォントをより便利な形式またはエンコーディングに変換できます。

+0

私は入力を消費しており、できるだけ早く救済する必要があるため、これはうまくいきません。私はこれを質問に追加します: – dirkgently

+0

アイデアをありがとう、あなたは私が持っていた[関連問題](https://stackoverflow.com/questions/44622656/)を解決しました。 – Pikamander2

3

maxContoursの値が高すぎるか低すぎるかを検出するには確実な方法がありますか(問題もあります)?

はい。指定したとおりにTrueType/OpenType解析ライブラリを既に作成している場合、この特定の値は非常に簡単に検証できます。それぞれのグリフを( 'loca'テーブルをインデックスとして使用して'glyf' tableから)解析し、各グリフから輪郭の数を1つずつ取得し、フォント全体の最大値をその値と比較する必要があります'maxp'に保存されています。

'maxp'の他の値はではなく、であることに注意してください。たとえば、maxZones、maxTwilPointPoints、maxStorage、maxFunctionDefs、maxInstructionDefs、maxStackElements、maxSizeOfInstructionsはすべて、追加のテーブルの解析と、それらのうちのいくつかについて、TrueTypeスケーラおよびインタプリタへのアクセスを必要とします。

少しの背景: 'maxp'(最大プロファイル)テーブルは、メモリー割り当ての助けとして、フォントに有効な可能性のある最大値のショートカット/要約を意図したものです。だから、一般的に言えば、 'maxp'の値が実際のフォントの値よりも高い場合、起こる最悪のことは、あまりにも多くのメモリを割り当てることです。つまり、実際にすべてのその目的のための 'maxp'値。

関連する問題