Cairo test…

서체 관련된 샘플 페이지를 만들면서 손에 익숙한 gd를 활용해왔는데, gd의 fontconfig 지원이 미약하다보니 아쉬운 점들이 눈에 보이기 시작했습니다.

가장 큰 예로 굴림체, 바탕체, 나눔고딕_코딩 글꼴 같은 고정폭(정확하게는 dual-width) 서체의 영문/한글 너비가 동일하게 보여지는 문제는 fontconfig의 global advance옵션을 통해 해결할 수 있지만, gd에서는 fontconfig의 옵션을 제대로 활용하지 않고 있기 때문에 이 문제를 해결할 수가 없었습니다.

그런 이유로 fontconfig를 제대로 활용하는 그래픽 API를 찾던 도중 Cairo가 생각났습니다. Cairo는 fdo에서 개발한 그래픽 API로 현재 모질라, Gnome 등에서 활발하게 사용되고 있는데, 의외로 X 없이도 설치가 가능하고, API도 아주 단순해서 제가 활용하려던 용도로 딱이더군요.

char *(text[])={
	"다람쥐 쳇바퀴 돌아 아햏햏 똠방각하",
	"abcdefghijklmnopqrstuvwxyz",
	"ABCDEFGHIJKLMNOPQRSTUVWXYZ",
	"1234567890!@#$%^&*()"
};
 
cairo_surface_t *surface;cairo_t *cr;
int i;  
double pos;
cairo_font_extents_t fe;cairo_text_extents_t te;
 
/* Prepare drawing area */
surface = cairo_image_surface_create (CAIRO_FORMAT_ARGB32, 500, 500);cr = cairo_create (surface);
cairo_set_font_size (cr, size);
cairo_set_source_rgb (cr, 0, 0, 0);
cairo_select_font_face (cr, font,
        CAIRO_FONT_SLANT_NORMAL, CAIRO_FONT_WEIGHT_NORMAL);
 
cairo_font_extents (cr, &fe);
 
pos = 3.0;
for( i = 0 ; i < 4 ; i++ ){
    cairo_text_extents (cr, text[i], &te);
 
    pos += te.height + 3.0;
 
    cairo_move_to (cr, 3.0, pos);
    cairo_show_text (cr, text[i]);
}
 
cairo_surface_write_to_png(surface, out );
 
cairo_destroy (cr);
cairo_surface_destroy (surface);

위 코드 정도만으로도 서체를 렌더링하고, 그 결과를 png로 저장할 수 있습니다. (surface를 resize하는 기능이 없기 때문에 저대로보단, 약간의 꼼수를 부려야할 것 같습니다.)

freetype의 경우 초기화에만 저 정도 코드가 필요하다는 것을 생각하면 -_-a 아주 편리하다고 할 수 있겠습니다.

언제 짬을 내서 서체 샘플을 새롭게 빌드해야겠네요. 카이로 만세!!!

테스트 코드나 결과물은 아래서…

http://mytears.org/tmp/dir/?path=./cairo&N

Related Posts

This entry was posted by 정태영 on Saturday, January 24th, 2009 at 2:13 AM and is taged under , , , , , , , , . You can follow any responses to this entry through the RSS 2.0 feed. You can leave a response, or trackback from your own site.

Leave a Reply

믹시