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 api, cairo, Computer, font, fontconfig, freetype, gd, graphic, OpenSource. 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.