6 Stimmen

Erkennung von beschädigten TrueType-Schriften

Ich habe zur Zeit mit einer beschädigten TrueType-Schriftart zu tun. Die mir zur Verfügung stehenden Programme sagen mir, dass es ein Problem mit dem maxp Tabelle - die maxContours Mitglied einen zu großen Wert hat. Gibt es eine sichere Methode, um zu erkennen, wann ein maxContours Wert zu hoch oder zu niedrig ist (ja, auch das kann ein Problem sein)? (Schriftarten sind Programme, so dass eine Möglichkeit, zu erkennen, dass eine Schriftartdatei gut ist, darin besteht, sie auszuführen, aber das ist für mich keine akzeptable Lösung).

Ich brauche keine Schriftbibliothek, weil ich keine hinzufügen kann. Ich habe bereits meinen eigenen TrueType-Schriftarten-Parser entwickelt. Was bleibt, ist zu prüfen, ob ein bestimmter Wert in der oben genannten Tabelle falsch ist. Ich werde dann meinen Parser und die Prüfungen zu meinem Produkt hinzufügen.

Ich habe nicht die Möglichkeit, die Schriftart neu zu erstellen. Ich bin ein Verbraucher - ich muss erkennen, ob die eingehende Schriftart beschädigt ist oder nicht, und wenn ja, muss ich sie mit so wenig Arbeit wie möglich entfernen.

Falls es hilft - ich arbeite mit Windows XP/Vista (32 und 64 Bit) und deren Serverversionen!

3voto

Anstatt zu versuchen, Fehler zu erkennen, habe ich es als am bequemsten empfunden, die Fehler-Schriftart einfach neu zu erstellen mit FontForge . Dies kann vollständig automatisiert werden, da es eine umfangreiche Befehlszeilen- und Skripting-API bietet. Außerdem können Sie die Schriftart bei Bedarf in ein geeigneteres Format oder eine Kodierung umwandeln.

0 Stimmen

Ich verbrauche den Input und muss so schnell wie möglich aussteigen - das funktioniert also nicht. Ich werde dies der Frage hinzufügen :)

1 Stimmen

Danke für die Idee, du hast das Problem gelöst. ein verwandtes Problem die ich hatte.

3voto

djangodude Punkte 5012

Gibt es eine sichere Methode, um zu erkennen, wann ein maxContours-Wert zu hoch oder zu niedrig ist (ja, auch das kann ein Problem sein)?

Ja. Wenn Sie bereits eine TrueType/OpenType-Parsing-Bibliothek erstellt haben, wie Sie angedeutet haben, ist dieser Wert relativ einfach zu validieren. Sie müssen jede der Glyphen parsen (von der Tabelle 'glyf (unter Verwendung der 'loca'-Tabelle als Index) die Anzahl der Konturen jeder einzelnen Glyphe und vergleichen Sie das schriftweite Maximum mit dem in der Tabelle 'maxp' .

Beachten Sie, dass einige andere Werte in der "maxp" sind no zu testen; zum Beispiel erfordern maxZones, maxTwilightPoints, maxStorage, maxFunctionDefs, maxInstructionDefs, maxStackElements, maxSizeOfInstructions alle das Parsen zusätzlicher Tabellen und für einige davon den Zugriff auf einen TrueType-Scaler und -Interpreter.

Ein wenig Hintergrund: Die 'maxp'-Tabelle (Maximalprofil) war als Abkürzung/Zusammenfassung potentiell nützlicher schriftartweiter Maximalwerte gedacht, als Hilfe bei der Speicherzuweisung. Wenn also ein Wert in der "maxp"-Tabelle höher ist als der tatsächliche Wert der Schriftart, kann es im schlimmsten Fall passieren, dass Sie zu viel Speicher zuweisen... das heißt, wenn Sie auf einer Plattform arbeiten, die tatsächlich alle "maxp"-Werte für diesen Zweck verwendet.

0voto

bobince Punkte 512550

Welche Plattform verwenden Sie? Ich konnte TrueType-Dateien recht angenehm hacken, indem ich das FontTools Bibliothek für Python:

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

ETA re q edit: Also ist die Frage nur "welche Werte von maxContours sind zu niedrig/zu hoch"? Soweit ich weiß, gibt es keinen dokumentierten Grenzwert, aber ich weiß, dass es ziemlich üblich ist, "ein paar mehr" zu maxContours hinzuzufügen, falls eine Glyphe mehr Konturen enthält als angegeben.

(Was ist maxContours in der problematischen Schriftart, und wie hängt es mit der Anzahl der tatsächlich in Glyphen verwendeten Konturen zusammen?)

0 Stimmen

Danke! Aber nein, ich brauche keinen Parser. Ich werde meine Frage bearbeiten, um Klarheit zu schaffen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X