1.FreeType이란

.소개

FreeType은 폰트에 대한 정보를 추출하는 폰트 엔진이다. 폰트는 텍스트 출력에 사용되는 글꼴에 관련된 정보의 집합이다. 굉장히 많은 정보가 복잡한 구조로 직접되어 있어서 내부 구조가 굉장히 복잡하다. 포맷이 문서화되어 있기는 하지만 직접 분석해서 원하는 정보를 얻기는 상당히 어렵다. 이럴 때 폰트 엔진이 필요하다.

문자열을 출력하려면 원하는 글꼴을 만든 후 TextOut이나 DrawString으로 뿌리면 그만이다. 어차피 폰트는 문자열을 출력하기 위한 수단이며 이런 목적으로 쓸 수 있는 고수준의 함수들은 운영체제가 제공한다. 그러나 단순한 출력 이상의 뭔가를 하고 싶을 때는 폰트의 정보를 직접 읽어서 가공해야 한다. 예를 들자면 다음과 같은 경우가 해당된다.

 

■ 운영체제에 설치되지 않은 폰트를 사용하고 싶을 때는 폰트를 직접 읽어야 한다. 예를 들어 문서에 내장된 폰트라든가 네트워크를 통해 공유된 폰트를 사용해야 할 때 등의 경우가 이에 해당한다.

■ 워드 아트처럼 글자의 모양을 마음대로 변형하고 싶을 때. 운영체제는 글꼴을 아주 정상적인 모양으로 출력하는 기능만 제공하므로 변형하려면 외곽선을 직접 조작해야 한다.

■ 글자의 스타일을 다양하게 주고 싶을 때. 굵게, 이탤릭 정도는 되지만 이중 외곽선이나 글자 색상과 다른 특이한 밑줄 같은 것은 줄 수 없다. 직접 그려야 한다.

■ 플랫폼에 독립적인 응용 프로그램을 만들 때도 폰트 엔진을 사용해야 한다. 운영체제가 제공하는 고수준 함수는 쓰기는 편하지만 포맷에 종속적이다.

 

이 외에도 폰트 엔진이 필요한 경우는 많다. 하옇든 운영체제가 제공하는 문자열 출력 기능이 뭔가 부족할 때 직접 폰트를 다루어야 한다. 폰트 엔진은 폰트를 떡 주무르듯이 주무를 수 있게 해 주며 부족한 2%를 넉넉하게 채워줄 수 있다. 폰트 엔진은 여러 가지가 있지만 현재 가장 범용적이고 기능적으로 앞선 라이브러리가 바로 FreeType이다.

참 좋은 라이브러리인데 한글로 된 강좌가 없다. 국내에도 사용자가 꽤 많은데 다들 실무에 급급하다 보니 대충 익혀서 쓰기만 할 뿐 간단한 사용기조차도 올리는 사람도 보기 어렵다. 영문으로 된 강좌는 가끔 구할 수 있지만 이마저도 윈도우즈 환경이 아니라 주로 리눅스나 매킨토시 환경으로 되어 있어 국내 사정과는 잘 맞지 않다.

그래서 비록 사용 경험이 일천하지만 아는데까지 강좌를 써 보았다. 상업적으로 출판되는 출판물이 아니고 짧은 시간에 후다닥 쓰다 보니 디테일이 좀 떨어지지만 편하게 읽을 수 있도록 격식없이 썼으니 양해 바란다. 아무리 대충 썼다고는 하나 그래도 16년간 강좌만 써온 강좌의 달인... 퍽! 나가~

이 강좌의 예제들은 비스타 환경에서 한글 비주얼 스튜디오 2008로 작성했다. XP 환경의 VS 2005 컴파일러를 쓰더라도 이 강좌를 읽는데는 큰 문제가 없겠지만 사소하게 틀린 면들이 있을 수는 있으므로 환경이 다르다면 주의해서 읽기 바란다.

.특징

FreeType의 웹 사이트는 FreeType 라이브러리를 다음과 같이 소개하고 있다.

 

small, efficient, highly customizable and portable, producing high-quality output font engine

 

작고 효율적이고 커스터마이징 가능하고 이식성있는 고품질 폰트 엔진이라고 되어 있다. 좋은말 다 붙여 놨는데 과연 어떤 특징이 있는지 정리해 보자. 장점도 있지만 단점도 있다.

 

■ 폰트 파일에 독립적이다. 특정 포맷만 읽는 것이 아니라 다양한 폰트를 일관된 인터페이스로 읽을 수 있다. TypeType, OpenType, Type1, CFF, PFR, BDF 등등 현재 널리 사용되는 거의 모든 폰트를 읽을 수 있다.

■ 확대 가능한(Scalable) 폰트를 지원한다. 외곽선 추출 기능이 있어서 품질 저하없이 미려한 모양으로 얼마든지 크게 출력할 수 있다. 비트맵 폰트도 물론 지원한다.

■ 힌트, 커닝 등의 고급 정보들도 섬세하게 조작할 수 있으며 트루타입 인터프리터까지 내장되어 있어 작은 크기로 출력해도 가독성이 높은 문자열을 출력할 수 있다.

256 레벨의 안티 알리아싱 기능이 제공되어 고품질의 텍스트를 출력할 수 있다. 윈도우즈 2000 이하의 버전에서 고작 5레벨의 안티 알리아싱을 제공하는데 비해 훨씬 더 품질이 높다.

■ 응용 프로그램에 연결하는 형태가 자유롭다. 컴파일 타임에 정적으로 연결할 수도 있고 DLL로 만들어 실행중에 연결하여 사용할 수도 있다.

■ 라이브러리 내에 쓰기 가능한 전역 변수가 없으며 필요한 모든 메모리를 동적으로 할당한다. 그래서 ROM에서도 바로 실행할 수 있는데 이런 특성으로 인해 모바일 환경에도 충분히 활용할 수 있다. 즉, 영문폰에 한글 문자열을 출력할 수 있다는 뜻이다.

■ 라이브러리 자체는 표준 C언어로 작성되어 있어 함수만 호출하면 바로 사용할 수 있다. 물론 객체 지향적인 라이브러리보다 손이 많은 가기는 하지만 함수 레벨의 라이브러리가 처음 배우기 쉽고 효율도 좋다. C언어만 컴파일할 수 있으면 어떤 컴파일러에서나 사용할 수 있다. 물론 C++ 컴파일러에서도 당연히 사용 가능하다.

■ 특허가 걸린 기술은 일체 사용하지 않는다. 예를 들어 TrueType 관련 기술들은 애플사가 특허를 보유하고 있는데 이런 기술들은 대체 기술을 적용한다. 그래서 소송 걱정없이 사용할 수는 있지만 특정 기능에서는 품질이 조금 떨어질 수도 있다.

FreeType은 텍스트를 바로 출력하는 고수준의 함수가 아니라 저수준의 서비스이다. 그래서 텍스트 출력, 문자열 정렬, 캐싱 등의 작업은 직접 해야 한다. 또한 폰트를 읽기만 할 뿐 편집하는 기능도 제공되지 않는다. 즉, 아무나 쉽게 쓸 수 있는 먹기 좋은 떡은 아닌 셈이다.

 

FreeType은 다양한 포맷의 폰트를 지원하지만 이 강좌에서는 주로 트루 타입만을 다룬다. 왜냐하면 강좌 자체가 윈도우즈 환경에서 쓰여졌기 때문이다. FreeType은 유닉스나 매킨토시에서도 쓸 수 있지만 이 강좌에서는 다루지 않는다. 유닉스는 조금 알지만 설치할 남는 컴퓨터가 없고 집이 가난해서 매킨토시를 살 돈이 없기 때문이다.

.설치

FreeType은 공개된 라이브러리이다. 떳떳하지 못하게 불법 복사하거나 P2P 사이트에서 남에게 아쉬운 소리해 가며 어렵게 구할 필요없이 다음 사이트에서 언제든지 다운로드받을 수 있다. 로그인이나 회원가입도 필요없다.

 

http://www.freetype.org

 

최신 버전이 나왔는지도 항상 살펴 봐야 하고 자습서나 레퍼런스도 여기서 참조해야 하므로 즐겨찾기에 등록해 두기 바란다. 장사를 하는 사이트가 아니다 보니 디자인이 아주 검소하고 군더더기가 없다. 여러분이 이 강좌를 읽고 있는 WinApi와 거의 동급의 디자인 수준이다(솔직히 말해 WinApi가 조금 더 나아 보인다 ^_^).

여기서 라이브러리와 문서, 예제들을 다운받을 수 있다. FreeType도 나름대로 역사가 있는데 최초 1.0은 트루타입만 지원했으나 2.0부터 지원 포맷이 대폭 늘어 났으며 버전이 높아질수록 기능이 더 많이 추가되었다.

이 강좌를 쓰는 시점에서 최신 버전은 2.3.7이지만 여러분들이 이글을 읽을 때 쯤에는 아마도 더 최신 버전으로 업데이트되어 있을 것이다. 가급적이면 최신 버전을 받되 버전이 올라가면 기능의 첨삭이 당연히 있을 것이다. 최신 버전 사용자는 어! 강좌랑 다르네 하고 헷갈려하지 말고 눈치껏 강좌를 읽기 바란다.

일단 라이브러리를 받아야 실습을 해 볼 수 있으므로 다운로드부터 받아보자. Downloads의 Stable releases를 클릭하여 링크를 따라 들어가면 다음 페이지가 나타난다. 물론 지금 당장 그렇다는 것이지 장래에는 링크가 어떻게 바뀔지 알 수 없으므로 역시 눈치껏 다운로드받기 바란다.

여기서 라이브러리와 데모, 문서를 다운로드받는다. 문서는 웹 사이트에서도 읽을 수 있으므로 별도로 다운받지 않아도 상관없다. 다운로드받아봐야 어차피 html이라 웹에서 읽는것과 다르지 않다.

도표의 2번째에 있는 freetype2 링크를 클릭하여 ft237.zip을 다운로드 받는다. 압축을 풀면 freetype-2.3.7 폴더가 생기는데 이 폴더를 일단 루트에 복사해 놓자. 물론 원하는 곳에 풀어 놔도 상관없지만 이 강좌와 환경을 맞추려면 가급적 게기지 말고 시키는대로 따라하는 것이 좋다. 만약 최신 버전보다 이 강좌에서 사용하는 버전을 사용하려면 다음 사본을 받기 바란다.

 

ft237.zip

 

압축 파일에는 바로 사용 가능한 바이너리가 포함되어 있지 않다. 다양한 운영체제에서 사용할 수 있으므로 사용 환경에 맞게 빌드해서 써야 한다. 일단 라이브러리부터 빌드하자. 다양한 운영체제별로 메이크 파일이 제공되는데 비주얼 스튜디오의 경우 builds/win32/visualc 폴더안에 솔루션 파일이 제공된다. freetype.sln 파일을 비주얼 스튜디오로 연다.

솔루션 파일은 VS 2005로 작성되어 있지만 VS 2008에서도 변환만 하면 문제없이 열 수 있다. 솔루션을 컴파일한다. 디버깅해 볼 게 아니므로 그냥 Release로 컴파일하면 된다. 경고가 엄청나게 발생하는데 확장자 C인 소스에 왜 //로 된 C++ 주석을 쓰느냐는 잔소리다. 그냥 무시해 버리면 된다. 컴파일이 완료되면 objs 폴더에 freetype237MT.lib라는 845K짜리 라이브러리 파일이 생성된다. 이 파일이 우리가 사용해야 할 라이브러리이며 배포 예제에도 포함되어 있으므로 이 강좌의 예제는 바로 컴파일해 볼 수 있다.

라이브러리의 크기가 부담스럽다면 꼭 필요한 모듈만 포함시켜 크기를 줄일 수도 있는데 커스텀 빌드 방법에 대해서는 배포 문서에 자세히 설명되어 있다. 그러나 굳이 그럴 필요는 없다. 비주얼 C++의 링커는 호출되는 함수만 쏙쏙 골라서 실행 파일에 링크할 정도로 충분히 똑똑하다. 845K가 통째로 실행 파일에 다 들어가는 것은 아니므로 부담없이 사용하면 된다.

다음은 비주얼 스튜디오에게 FreeType 라이브러리의 헤더 파일의 위치를 알려 주어야 한다. 도구/옵션 메뉴로 환경설정창을 열고 VC++ 디렉터리 노드에서 포함 파일 경로를 지정한다.

라이브러리는 프로젝트별로 직접 지정할 것이므로 포함 파일 경로만 가르쳐 주면 된다. 여기까지 작업하면 FreeType을 쓸 준비가 완료되었다. 운영체제나 링크 방식에 따라 조금씩 달라질 수도 있는데 상세한 빌드 방법은 압축 파일내의 문서에 설명되어 있다.

.레퍼런스

어떤 과목을 공부하든지 레퍼런스는 꼭 필요하다. FreeType은 홈 페이지의 Documentation에 레퍼런스가 잘 구비되어 있으므로 도움말이 필요할 때 웹 사이트에서 원하는 정보를 바로 구할 수 있다. Index 링크로 들어가면 FreeType의 모든 함수, 구조체에 대한 정보를 볼 수 있다.

알파벳순으로 정렬되어 있으므로 별 어려움없이 함수나 구조체에 대한 도움말을 육안으로 검색할 수 있을 것이다. 도움말은 모두 링크로 연결되어 있으므로 마우스로 꾹꾹 누르기만 하면 된다. 초기화 함수에 대한 설명을 보자.

인수에 대한 설명, 리턴값에 대한 설명이 잘 기록되어 있으며 주의 사항도 친절하게 설명되어 있다. 구조체에 대한 정보도 아주 상세해서 모든 멤버의 의미를 바로 바로 조사할 수 있도록 되어 있다.

영문이지만 결코 어려운 영어가 아니므로 필요할 때마다 참조하면 된다. 만약 인터넷에 접속할 수 없는 환경이라면, 예를 들어 도서관에서 공부를 해야 한다면 이 도움말 전체를 다운로드받아 가지고 다니며 볼 수도 있다. 우리나라에서는 왠만해서는 인터넷 안되는 곳이 없으므로 그럴 필요가 없을 것이다.

도움말 외에 Typography에 대한 일반론과 Tutorial도 제공된다. 이 문서들은 분량이 얼마 안되지만 굉장히 쉽고 상세하게 쓰여져 있으므로 꼭 읽어 보기 바란다. 나는 이 문서를 인쇄하여 춘천 시립 도서관에 짱박혀서 아주 열심히 탐독했으며 그 결과 이런 강좌까지 쓰게 되었다. 처음부터 영문으로 공부하기 부담스럽다면 이 강좌를 통해 워밍업을 한 후 차근히 읽어 보기 바란다.