2009-03-05 5 views
6

현재 트루 타입 글꼴이 손상되었습니다. 사용할 수있는 프로그램이 maxp 테이블에 문제가 있음을 알립니다. maxContours 멤버의 값이 너무 큽니다. maxContours 값이 너무 높거나 낮을 때이를 감지하는 확실한 방법이 있습니까? (역시 문제가 될 수 있습니다)? (폰트는 프로그램이기 때문에 폰트 파일을 감지하는 좋은 방법은 그것들을 실행하는 것입니다. 그러나 이것은 저에게 용인할만한 해결책이 아닙니다.)손상된 트루 타입 글꼴 감지

폰트 라이브러리를 추가 할 수 없기 때문에 필자는 필요하지 않습니다. 나는 이미 내 트루 타입 글꼴 파서를 굴렸다. 남아있는 것은 위에서 언급 한 테이블의 주어진 값이 부정확한지 확인하는 것입니다. 파서와 수표를 제품에 추가합니다.

글꼴을 다시 작성할 수있는 옵션이 없습니다. 나는 소비자 다. 나는 들어오는 글꼴이 손상되었는지, 그리고 가능한 한 적은 작업으로 보석금이 있는지를 알아 내야한다.

도움이 될만한 경우 - 저는 Windows XP/Vista에서 32 & 64 비트와 해당 서버 버전을 사용 중입니다!

답변

0

어떤 플랫폼을 사용하고 있습니까? 파이썬의 FontTools 라이브러리를 사용하여 매우 유쾌 트루 타입 파일을 해킹 할 수있었습니다 :

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

ETA 재 Q 편집 : 그래서 질문은 그냥 "너무 낮은/너무 높은 maxContours 어떤 값"? 내가 알고있는 한, 문서화 된 한계는 없다. 그러나 글리프에 윤곽선이 더 많이 포함되어있는 경우 maxContours에 '몇 개 추가'하는 것이 매우 일반적이라는 것을 알고있다.

(무엇의 번잡 한 글꼴 maxContours, 그리고 실제로 글리프에 사용 윤곽의 수와 관련? 않는 방법) 단지를 재 구축 오히려 오류를 감지하는 것보다, 내가하는 것이 가장 편리 발견했습니다

+0

감사합니다.하지만 아니요, 파서가 필요 없습니다. 내 질문을 편집하여 선명도를 추가합니다. – dirkgently

2

문제가있는 글꼴은 FontForge입니다. 이는 풍부한 명령 행 및 스크립팅 API를 제공하기 때문에 완전히 자동화 될 수 있습니다. 또한 필요한 경우 글꼴을보다 편리한 형식이나 인코딩으로 변환 할 수 있습니다.

+0

나는 입력을 소비하고 있으므로 최대한 빨리 구제해야합니다. 따라서이 방법은 효과가 없습니다. 이것을 질문에 추가하겠습니다 :) – dirkgently

+0

아이디어를 주셔서 감사합니다. 귀하는 [관련 문제] (https://stackoverflow.com/questions/44622656/)를 해결했습니다. – Pikamander2

3

maxContours 값이 너무 높거나 너무 낮 으면 (확실 할 수도 있음) 확실한 방법이 있습니까?

예. 명시된대로 TrueType/OpenType 구문 분석 라이브러리를 이미 만들었 으면이 값을 확인하는 것이 매우 쉽습니다. '문자'표를 색인으로 사용하여 'glyf' table에서 각각의 글리프를 구문 분석하고 각 글리프에서 윤곽 수를 하나씩 확인한 다음 글꼴 전체의 최대 값과 비교해야합니다. 'maxp'에 저장됩니다.

'maxp'의 다른 값은 이 아니며이 간단한 테스트는입니다. 예를 들어 maxZones, maxTwilPoints, maxStorage, maxFunctionDefs, maxInstructionDefs, maxStackElements, maxSizeOfInstructions는 모두 추가 테이블을 구문 분석해야하며 그 중 일부는 TrueType 스케일러 및 인터프리터에 액세스해야합니다.

약간의 배경 : 'maxp'(최대 프로필) 테이블은 메모리 할당을 돕기 위해 잠재적으로 유용한 폰트 최대 값의 요약/요약을위한 것입니다. 따라서 일반적으로 말해서 'maxp'의 값이 실제 글꼴 값보다 높으면 최악의 상황은 너무 많은 메모리를 할당한다는 것입니다. 즉, 실제로 모든 글꼴을 사용하는 플랫폼에있는 경우 그 목적을위한 'maxp'값.

관련 문제