2009-03-05 13 views
6

Actualmente estoy tratando con una fuente TrueType corrupta. Los programas disponibles para mí me dicen que hay un problema con la tabla maxp: el miembro maxContours tiene un valor demasiado grande. ¿Hay una forma segura de detectar cuándo un valor maxContours es demasiado alto o demasiado bajo (sí, eso también puede ser un problema)? (Las fuentes son programas, por lo que una forma de detectar un archivo de fuente es buena es ejecutarlas, pero esta no es una solución aceptable para mí.)Detección de fuente TrueType corrupta

No necesito una biblioteca de fuentes porque no puedo agregar una. Ya he rodado mi propio analizador de fuentes TrueType. Lo que queda es verificar si un valor dado de la tabla mencionada anteriormente es incorrecto. Luego agregaré mi analizador y los cheques a mi producto.

No tengo la opción de reconstruir la fuente. Soy un consumidor: necesito detectar si la fuente entrante está corrupta o no y si se rescata con el menor trabajo posible.

En caso de que ayude - Estoy en Windows XP/Vista ambos 32 & 64 bit y sus versiones de servidor!

Respuesta

0

¿Qué plataforma está utilizando? He sido capaz de cortar archivos TrueType muy agradablemente el uso de la biblioteca FontTools para Python:

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

ETA re q edición: Así que la pregunta es simplemente “qué valores de maxContours son demasiado baja/alta”? Por lo que yo sé, no hay un límite documentado, pero sé que es bastante común 'agregar algunos' a maxContours en caso de que un glifo contenga más contornos de los que indica.

(maxContours ¿Qué hay en la fuente problemático, y cómo se relaciona con el número de contornos realmente utilizados en los glifos?)

+0

¡Gracias!Pero no, no necesito un analizador. Editaré mi pregunta para agregar claridad. – dirkgently

2

En lugar de tratar de detectar errores, he encontrado que es más conveniente para simplemente reconstruir la problema-fuente con FontForge. Esto puede ser completamente automatizado, ya que proporciona una línea de comandos y una API de secuencias de comandos ricas. Además, puede transformar la fuente en un formato o codificación más conveniente, si lo necesita.

+0

Estoy consumiendo la entrada y necesito rescatar lo antes posible, así que esto no funciona. Agregaré esto a la pregunta :) – dirkgently

+0

Gracias por la idea, usted resolvió [un problema relacionado] (https://stackoverflow.com/questions/44622656/) que estaba teniendo. – Pikamander2

3

¿Hay una manera segura de detectar cuándo un valor de MaxContours es demasiado alto o demasiado bajo (sí, también puede ser un problema)?

Sí. Si ya ha creado/tiene una biblioteca de análisis TrueType/OpenType como ha indicado, este valor en particular es bastante fácil de validar. Tendrá que analizar cada uno de los glifos (del 'glyf' table, usando la tabla "loca" como índice), obtener el número de contornos de cada glifo, uno por uno, y comparar el máximo de toda la fuente con ese almacenado en el 'maxp'.

Tenga en cuenta que algunos otros valores en 'maxp' son no esto fácil de probar; por ejemplo, maxZones, maxTwilightPoints, maxStorage, maxFunctionDefs, maxInstructionDefs, maxStackElements, maxSizeOfInstructions requieren el análisis de tablas adicionales y, para algunas de ellas, el acceso a un escalador e intérprete TrueType.

Un poco de historia: la tabla 'maxp' (perfil máximo) estaba destinada a ser un atajo/resumen de máximos de toda la fuente potencialmente útiles, como una ayuda en la asignación de memoria. En términos generales, si un valor en 'maxp' es más alto que el valor real de la fuente, lo peor que ocurrirá es que se asigna demasiada memoria ... es decir, si se encuentra en una plataforma que realmente utiliza todos los valores 'maxp' para ese propósito.