Font(글꼴)

Development/Common 2012. 3. 6. 12:19

폰트는 인쇄하거나 또는 화면에 보여질 수 있도록 특별한 스타일과 크기로 되어 있는 서식 문자들을 말한다. 폰트의 유형별 디자인은 디자인 서체들이 변화되어진 것이다. 따라서 "헬베티카"라고 하면 서체군(群)을 의미하며 "헬베티카 이탤릭"은 하나의 서체를, 그리고 "헬베티카 이탤릭 10 포인트"라고 하면 비로소 그게 바로 하나의 "폰트"을 의미하는 것이다. 그렇지만, 실제로 "폰트"라는 용어와 "서체"라는 용어에 대해 그렇게까지 엄격하게 의미를 따지지 않고, 가끔은 서로 혼용해서 사용하는 경우도 있다.

외곽선 폰트는 다양한 크기로 만들어질 수 있는 소프트웨어 서체이며, 비트맵 폰트는 이미 크기가 고정되어 있거나 크기가 제한된 폰트를 디지털 방식으로 표시하는 것을 말한다. 요즈음 컴퓨터에서 가장 보편적으로 쓰이고 있는 외곽선 폰트로는 "트루타입"과 "어도비 Type 1"을 들 수 있다. 트루타입 폰트는 윈도우와 매킨토시 운영체계에 모두 쓰인다. 그러나 "Type 1"은 ISO 9541에 규정되어 있는 표준 외곽선 폰트이다. 트루타입과 Type 1 폰트 모두 어도비의 포스트스크립트 프린터에서 사용될 수 있다. 독자적인 개발자들과 그래픽 디자이너들은 계속해서 트루타입과 Type 1을 위한 새로운 서체를 만들어 내고 있다. 어도비사의 말에 따르면 이미 3만 개가 넘는 Type 1 폰트가 존재한다고 한다.

대개 윈도우95나 윈도우98과 같은 운영체계나 또는 마이크로소프트 오피스 같은 제품을 설치하면 기본적으로 딸려오는 폰트들이 있지만, 이외에 더 다양한 폰트를 사용하려면 개별적으로 서체군이나 서체 모음집을 구입한 다음, 자신의 PC에 추가로 설치하여야 한다.

출처 - terms.co.kr


① 활자꼴을 기록, 표시, 인쇄 등의 구체적인 표현에 이용될 수 있도록, 같은 크기의 글자의 형상 표현의 집합으로서 기억 모체에 기록한 정보. 원래 이 말은 영문자 인쇄를 위한 알파벳숫자기호 등의 같은 활자꼴, 같은 크기의 활자 한 벌을 ‘폰트’ 라고 하였다. 곧 폰트는 활자꼴을 구체적인 기록, 표시, 인쇄에 이용할 수 있도록 한 것으로, 그 활자꼴의 정보 형태에 따라 사진식자판 등의 아날로그 폰트와 점이나 윤곽선 등의 디지털 데이터로 된 디지털 폰트로 나뉘나, 오늘날에는 주로 디지털 폰트를 가리키는 의미로 쓰이고 있다. 이 말은 본래 ‘foundry(활자주조소)’ 의 ‘found(녹이다. 주조하다)’ 에서 유래되었다.

② 컴퓨터를 통해 모니터나 프린터 등의 출력장치에 출력되는 글자의 모양. 혹은 미리 디자인된 여러 가지 스타일과 크기의 글자를 보관해 놓은 일종의 문자 라이브러리(Library) 또는 글리프(glyph)의 라이브러리로, 컴퓨터에서 사용되는 모든 문자의 모양과 크기에 대한 정보를 총칭한다. 폰트의 정보에는 글자의 모습을 정의하는 활자의 서체(typeface)와 글자의 크기, 그리고 위첨자(ascent), 아래첨자(decent), 강조(Bold) 등과 같은 속성 등이 포함되며, 그 구성 방법에 따라 크게 비트맵 폰트와 윤곽선
 폰트로 나뉘어진다. 이 용어는 종종 서체(typeface)나 폰트 군을 가리키는 것으로 잘못 사용된다. 

비트맵(Bitmap)
2차원적인 사각 평면을 작은 격자로 나누고 그 위에 이미지가 표현된다고 했을 때, 비트맵은 0과 1로 된 격자(grid)이다. 이 격자를 컴퓨터가 픽셀로 변환시켜 표현하는 것으로, 컴퓨터 그래픽에서 글자 혹은 이미지를 표현하는 픽셀(pixel)의 집합이라고도 할 수 있다. 각 픽셀은 컴퓨터 메모리에서 비트(bit)에 대응한다. 각 비트에 대응되는 이미지에 대한 정보의 상태가 0과 1로 표현된 것이고, 비트들이 온(on), 오프(off)가 되면서 여러 개의 점들이 조합되어 정보가 표현된다. 색채와 명암을 표현하려면 많은 정보가 필요하며, 여러 개의 점들로 표현되기 때문에 화면에서 이미지나 글자를 확대했을 때 매끄럽지 못한 모습을 보게 되는 것이다. 일반적으로 대부분의 컴퓨터가 비트맵 방식으로 이미지를 저장하고 관리하며, 대표적인 비트맵 파일로는 그래픽 이미지 저장 형식인 GIF와 JPG가 있다. 글자의 모양을 비트맵의 형태로 저장하고 관리하기도 하는데 이를 비트맵 글꼴이라고 한다. 


윤곽선 글꼴 
글자의 윤곽을 여러 부분으로 나누고, 점이 아닌 직선, 원호, 자유곡선 등으로 표현한 다음, 출력할 때에 안쪽을 채워서 재현하는 글꼴. 윤곽선 글꼴은 하나의 크기에 대한 글자 데이터만 가지고, 수식 계산에 따라 자유롭게 임의의 글자 크기나 기울임, 각도 등을 처리하므로 기억 용량이 매우 감소하며, 글자의 크기를 확대해도 글자의 모습이 매끄럽게 나타난다. 이러한 글꼴의 변형은 사진 식자기에서 렌즈가 처리해주는 부분까지 모두 가능하지만, 획의 굵기 변화 등 글꼴 모양 자체의 변화까지는 처리할 수 없다. 
출력 글자를 생성할 때는 일단 출력하는 크기에 맞추어 윤곽선의 직선이나 곡선부분을 좌표로 계산하고 그 내부를 채우는 과정이 필요하므로 속도가 느려진다. 이러한 계산 과정 때문에 70년대까지는 실용화되지 못하다가 80년대 중반 이후컴퓨터 프로세서의 발달로 고가의 레이저 프린터 등에서 사용이 시작되었다. 90년대에는 컴퓨터의 속도 향상이 더욱 가속되어 현재에는 출력기에는 물론이고 우리가 늘 접하는 윈도우나 인터넷 등의 화면에서도 대부분 윤곽선 글꼴의 글자를 실시간으로 출력하여 보여준다. 윤곽선 글꼴은 벡터 글꼴이라고도 하며, 많이 사용되는 윤곽선 글꼴 형식으로는 포스트스크립트 타이프 1(Type 1)과 트루타이프(TrueType)가 있다. 


윤곽선 글꼴

윤곽선 글꼴











출처 - 네이버  


폰트란 본래 인쇄 관계의 용어이며, 동일 사이즈, 동일 서체로 디자인된 한 조의 활자 세트를 의미하는 것이지만, 정보 처리 분야에서는 인쇄에 있어서 활자와 CRT 디스플레이 상에서 자체, 서체, 폰트라고 번역되는 경우가 많다. 활자에서는 고딕체, 명조체, 교과서체 등이 있으며 문장의 느낌과 책의 종류에 따라서 분리하여 사용된다. 또 CRT 디스플레이 상에서는 각 문자(character)는 도트를 모아 표현함으로써 구성된다. 이 도트의 빛나는 부분, 빛나지 않은 부분의 조합을 바꿈으로써 자체를 변경할 수 있다. 일반 표준적인 단말기(terminal)의 도트의 포인트 수는 세로 8도트, 가로 8도트로 되어 있으므로 각 문자마다 특징이 있으며, 보기 쉽도록 되어 있다. 또한 프린터 등에서의 자체는 인쇄된 것을 광학 문자 인식 등에 이용하기 쉽도록 각 문자는 각각 특징을 갖도록 되어 있다.

출처 - 네이버 


==============================================================================================


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


출처 -  http://www.winapi.co.kr/project/library/freetype/ft1.htm 




'Development > Common' 카테고리의 다른 글

main 함수  (0) 2012.03.07
프로그램 소스코드를 공개하는 사이트  (0) 2012.03.07
Freemarker  (0) 2012.02.26
1세대/2세대/3세대/4세대/5세대 언어  (0) 2012.02.24
확장문자 or 특수문자(escape sequence)  (0) 2012.02.18
Posted by linuxism
,