2009-03-05 50 views
6

我目前正在處理損壞的TrueType字體。可用的程序告訴我,maxp表有問題 - maxContours成員的值太大。有沒有一種確定的方法來檢測maxContours值何時太高或太低(是的,這也可能是一個問題)? (字體是程序,所以檢測字體文件的一種方法是執行它們,但這對我來說不是一個可接受的解決方案。)Corrupt TrueType字體檢測

我不需要字體庫,因爲我無法添加字體庫。我已經推出了我自己的TrueType字體解析器。剩下的是檢查上述表格的給定值是否不正確。然後我會將解析器和檢查添加到我的產品中。

我沒有重建字體的選項。我是一個消費者 - 我需要檢測傳入字體是否損壞,以及是否儘可能少地完成工作。

在情況下,它可以幫助 - 我在Windows XP/Vista的32 & 64位和他們的服務器版本!

回答

0

您使用的平臺是?我已經能夠很愉快破解TrueType字體文件使用FontTools庫的Python:

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

ETA重q編輯:那麼,問題只是「什麼樣的價值觀maxContours的過低/過高」?據我所知,沒有文件記錄的限制,但是我知道在字形包含的輪廓比其狀態更多的情況下,向maxContours添加一些內容是相當常見的。

(什麼maxContours在麻煩的字體,以及它是如何與在字形實際使用輪廓的數量?)

+0

謝謝!但是,不,我不需要解析器。我會編輯我的問題以增加清晰度。 – dirkgently 2009-03-05 17:23:01

2

而不是試圖發現錯誤,我發現它最方便的,只是重建麻煩字體與FontForge。這可以完全自動化,因爲它提供了豐富的命令行和腳本API。另外,如果需要,您可以將字體轉換爲更方便的格式或編碼。

+0

我正在消耗投入,我需要儘快救助 - 所以這是行不通的。我會添加到這個問題:) – dirkgently 2009-03-05 17:25:15

3

是否有確定的方法來檢測maxContours值太高或太低(是的,這也可能是一個問題)?

是的。如果您已經按照您的指示構建/使用了TrueType/OpenType解析庫,則此特定值非常易於驗證。您需要分析每個字形(從'glyf' table開始,使用'loca'表作爲索引),逐個獲取每個字形的輪廓數量,並將字體寬度最大值與存儲在'maxp'

請注意,'maxp'中的一些其他值是而不是這個簡單的測試;例如,maxZones,maxTwilightPoints,maxStorage,maxFunctionDefs,maxInstructionDefs,maxStackElements,maxSizeOfInstructions都需要解析其他表,並且其中一些表需要解析TrueType定標器和解釋器。

一點背景:在「MAXP」(最大輪廓)表意欲是潛在-有用字體寬最大值的快捷/摘要,在存儲器分配的輔助。因此,一般來說,如果'maxp'中的值高於實際字體值,最糟糕的情況是您分配的內存太多......也就是說,如果您使用的平臺實際上使用了所有爲此目的的'maxp'值。