본문 바로가기
내가만드는것_만든것/오픈소스

JsFontGenerator 폰트추출기 & 소스

by Joseph.Lee 2015. 7. 31.

2015.05.10. 20:40



JsFontGenerator v1.0


JsFontGenerator 드디어 만들었네요...ㅎ

폰트 추출기 입니다.


저는 AVR에서 TFT-LCD에 글자를 출력하려고 했는데 마음에 드는 폰트추출기가 없어서...

(인터넷에 있는것들 대부분이 dot 1bit 형식이더라 구요... 저는 Alpha형식을 원해서요.)

직접 만들었습니다.


기능...

 - BMP 이미지 출력

 - Raw 출력 (8bit Alpha)

 - Height 고정, Width 가변 (따로 xml파일 뭐 이런거 출력 안합니다!)

 - 기타등등... (아래 참고)

 - OpenSource (누구나 수정해서 사용하실 수 있습니다.) (Visual Studio 2013으로 제작. C++ MFC)

 = CC2.0 라이센스. 원저작자표시, 비영리 사용 가능합니다.

 = 저작자 : 이지찬(jic5760@naver.com)




폰트 파일을 입력하고

Font Size (Height) 와 Leading size (위치) 을 입력하고

Preview에 테스트할 글자를 넣고 Preview을 누르면 위와 같이 출력 되고

출력할 unicode리스트를 선택 후 출력 디렉토리와 파일 형태를 선택하고

Convert을 누르면 됩니다!


Leading size는 정해진 값은 아닙니다.

Preview으로 확인하시면서 적절한 값을 찾으시면 됩니다.

(freetype library을 이용했는데 자체에 약간 문제가 있는듯 하여 어쩔 수 없는 선택이었습니다..ㅠㅠ)


raw파일의 크기는 font_size(고정) * total_width(가변) Bytes 입니다.

따로 헤더나 그런 것 없이 0(투명)~255(불투명)의 값을 가집니다.

(Alpha 8bit)

파일 크기 / font_size 을 하면 total_width 을 알 수 있습니다.


제가 시험한 값들입니다.

완벽한 값은 아니고 그냥 제가 보기에 괜찮다 하는 정도?


gulim.ttc

Font Size : 16 32

Leading   :  4 8


NanumPen.otf

Font Size : 16 32

Leading   : 6 12


NanumBarunGothic.ttf

Font Size : 16 32

Leading   :  7 13


NanumBarunGothicBold.ttf

Font Size : 16 32

Leading   :  6 13


NanumBarunGothic.ttf

Font Size : 16 32

Leading   :  6 13


세부 사항을 말씀드리자면...


#1

freetype library에 height size을 정해주어도 그 크기를 초과하는 경우가 있는데

그럴 경우 (FontRender 함수 참고, 소스 수정으로 바꿀 수 있음)

선택 1. (기본) 1씩 font_size을 줄여나가면서 초과되지 않는 크기로 설정 후 랜더링

선택 0. 초과한 크기만큼 줄인 뒤 그래도 초과되면 윗쪽을 클리핑 (status 0x00000002)


#2

width가 font_size을 초과하면 왼쪽부터 출력(오른쪽 클리핑)

이런 경우는 아직 없었습니다.

(status 0x00000001)


#3

freetype에 bitmap_left라고 왼쪽 여백을 지정해 주는데

폰트파일을 출력할 때 bitmap_left만큼 왼쪽 padding을 주고 저장합니다.

총 크기(total_width)는 bitmap_left + width 가 되죠.

하지만 total_width가 font_size을 초과할 경우를 대비해 초과하면

왼쪽 padding 크기를 font_size을 초과하지 않는 최대 크기로 지정합니다.

(status 0x00000004)


#4

bitmap_top와 leading등을 이용해 윗쪽 padding 크기를 지정합니다.

만약 윗쪽 padding을 계산한 결과가 0보다 작으면 윗쪽 padding을 0으로 지정합니다.

(status 0x00000100)


#5

윗쪽 padding + height 가 font_size을 초과하면

윗쪽 padding을 font_size을 초과하지 않는 최대 크기로 지정합니다.

(status 0x00000200)


status

아무 예외도 발생하지 않고 정상처리 되었으면 0x00000000

해당 폰트가 없다면 0x80000000 가 됩니다.


제가 위에 status라고 적은것은 로그 파일에 기록되는 상태코드 입니다.



결과파일..





이걸 만드는데 큰 도움을 주신 람나라(f1ybee)님과 브레인(hl1aiv)님께 감사의 말씀을 올려드립니다.

(답변글들)

http://cafe.naver.com/carroty/243852

http://cafe.naver.com/carroty/244136


실행파일 : https://www.dropbox.com/s/d96aoeyq1v19sux/JsFontGenerator_Release.zip?dl=0

소스파일 : https://www.dropbox.com/s/ynlv95p97d7f754/JsFontGenerator_Source.zip?dl=0

반응형

댓글