2012-04-05 3 views
2

오픈 타입 글꼴 파일을 읽는 방법을 배우려고합니다.트루 타입 글꼴. 글리프 테이블의 문제

문제는 일부 테이블을 읽는 데 문제가 있습니다. 나는 내가 여기서 n은 플래그의 수는 간단한 그래프 설명 flags[n], 아래에서 찾을 glyf 테이블을 읽으려고 할 때 http://www.microsoft.com/typography/otspec/otff.htm

에서 주어진 정보로 충분하다 생각했다.

문제는 어디에서 플래그의 수를 얻을 지 모르지만, 테이블을 읽는 플래그의 수가 없으면 불가능한 것 같습니다.

답변

4

좋아, 내 질문에 대한 답변을 찾았 endPtsOfContours 좌표 목록에서 모든 등고선의 마지막 지점의 위치를했다.

답변을 찾는데 TTFDUMP를 사용했습니다.

1

플래그의 수를 계산하는 방법을 명확히하기 위해. 이 답변은 위의 잘못된 결과가 발생할 수 있습니다 나는이 주제에 좀 더 많은 정보를 추가 할 필요가 내가 느끼는 오래된 질문이지만 플래그, n의 수는 endPtsOfContours + 1

+0

Bradley Hand ITC Regular 및 Rage Italic이 수식에 포함되지 않는 글꼴이 두 개 이상 발견되었습니다. TTFDUMP는 다른 수의 플래그를 리턴합니다. –

+0

@IgorBrejc 좋아, 무슨 상형 문자 가이 문제를 보여줍니다. 플래그의 실제 개수는 얼마입니까? endPtsOfContours의 마지막 요소에서보고되는 내용은 무엇입니까? 개별 바이트를 검사해야하는 경우 C#의 작은 구현은 https://github.com/vidstige/NRasterizer를 참조하십시오. 주석 파일에서 글꼴 파일을 연결할 수 있습니까? – vidstige

+0

@IgorBrejc 아래 나의 대답을 참조하십시오. 언급 된 두 글꼴은 * 반복 * 플래그를 사용할 수 있습니다. 이는 플래그의 수와 포인트의 수 사이에 차이를 유발할 수 있습니다. – Waruyama

1

마지막 요소입니다.

글리프의 점 수는 마지막으로 endPtsOfContours + 1과 같습니다. 일반적으로 이것은 플래그 수 n과 같지만 꼭 그런 것은 아닙니다. 플래그의 비트 3 (반복 플래그)은 동일한 플래그가 여러 번 반복됨을 나타 내기 위해 사용됩니다. 이 플래그가 설정되면, 플래그의 수는 점의 수보다 낮을 수 있습니다.

사실, 플래그를 읽기 전에 얼마나 많은 바이트를 읽어야하는지 알 수 없습니다. 포인트 수에 도달 할 때까지 플래그를 계속 읽어야합니다. 다음은 플래그를 읽는 방법을 구현하는 방법을 보여주는 작은 Javascript 스 니펫입니다.

var pointCount; // This has to the set to the last endPtsOfContours + 1 
var flags = []; // our internal array of flags 
while (flags.length < pointCount) { 
    var flag = fontReader.readByte(); // flag is a single byte 
    flags.push(flag); // add flag 
    if (flag & 8) { // if bit 3 is set 
     var repeats = fontReader.readByte(); // next byte indicates repeats of the flag 
     for (; repeats > 0; repeats--) { 
      flags.push(flag); // add same flag again 
     } 
    } 
} 

나는 반복 플래그 (브래들리 핸드 ITC 정기 아마 두 개의 글꼴을 사용 위의 설명에서 언급 기울임 꼴을 분노) 실제 글꼴을 사용하는 경우 또는 얼마나 자주 당신을 말할 수는 없지만 당신이 경우 플래그의 수를 정확하게 읽고 싶다면 플래그를 고려해야합니다.

+0

니스! 어떻게 찾았 니? 어떤 소식통? -/ – vidstige

+0

@vistige 나는 이것을 오픈 타입 스펙 (https://www.microsoft.com/typography/otspec/glyf.htm)에서 가져 갔다. 그것은 * 플래그 * 테이블 (비트 3은 중요한 것입니다 ..) – Waruyama

관련 문제