[질문]gd library 사용시, 한글이 깨질 경우, iconv 사용방법에
글쓴이: paraline / 작성시간: 목, 2004/10/07 - 5:20오후
gd library를 사용하여, 이미지 프로세싱 프로그래밍을 하고 있습니다.
이미지 위에 텍스트를 넣을 경우, 영문은 잘 나오는데, 한글은 깨져서 나옵니다.
여기서 검색을 해보니, iconv로 UTF-8으로 인코딩 해서, 사용하라고 하셔서, 그대로 해봤는데, 역시 깨져서 나오는군요.
iconv를 사용할 경우, 영문도 역시 깨져서 나옵니다.(원래의 깨지지 않은 글자가 나오고, 그뒤에 붙어서 깨진 글자가 나옵니다.
iconv를 아래처럼 사용했는데, 어디가 잘못됐는지 모르겠습니다.
코드 중 필요한 부분만 발췌했으며, 에러처리는 생략했습니다.
//char *s = "Hello!"; char *s = "안녕!"; //////////////////////////////////////////////////////////////////// // iconv 사용 부분... char *out, *in, *inbuf, *outbuf; size_t oleft, ileft; iconv_t converter; ileft = strlen(s); oleft = ileft * 2; out = outbuf = (char *)malloc( oleft +1 ); in = inbuf = (char *)malloc( ileft + 1); strcpy(inbuf, s); inbuf[strlen(s)] = '\0'; converter = iconv_open("UTF-8","EUC-KR"); iconv(converter, (const char **)&inbuf, &ileft, &outbuf, &oleft); iconv_close( /////////////////////////////////////////////////////////////////// gdImageStringFT(bg,&brect[0],black,f,sz,0.0,x,y,out);
위에서 gdImageStringFT()가 이미지 위에 텍스트를 삽입해 주는 함수인데, 위에서 말씀드린대로, iconv를 통해서, UTF-8로 인코딩을 해도 글자가 깨지는군요.
현재 솔라리스에서 작업중인데, 혹시 한글코드(?)가 EUC-KR이 아니라서 그런건지도 모르겠습니다( :oops: 사실, 한글코드(?)가 뭘로 되어 있는지도 잘 모르겠습니다. ㅠ.ㅠ 유니코드에 대해서 공부가 많이 필요한 상황입니다.)
위의 char *s는 원래 코드 내에 들어가 있는게 아니고, 외부에서 입력 받는 문자열입니다.
어느 부분을 검토해야 할지 조언좀 부탁드립니다.
관심 가져 주실 모든 분들께 미리 감사의 말씀 드립니다.
File attachments:
첨부 | 파일 크기 |
---|---|
![]() | 49.17 KB |
![]() | 880바이트 |
![]() | 221바이트 |
Forums:
f 엔.. ttf나 ttc파일의 full path 가 들어가야 하는데..
f 엔.. ttf나 ttc파일의 full path 가 들어가야 하는데.. 우선 저게 의심이 되는군요..
그 담으로 의심되는 부분은..
폰트가 unicode로 인코딩되어있는지 여부구요..
아 그리고 strcpy 로 복사하셨음.. inbuf[strlen(s)]='\0'; 을 하실 필요가 없습니다 :) 그건 strncpy로 하셨을때만 =3=33
오랫동안 꿈을 그리는 사람은 그 꿈을 닮아간다...
http://mytears.org ~(~_~)~
나 한줄기 바람처럼..
답변 주셔서 감사합니다.일단, 폰트의 패스는 문제가 없습니다.기타
답변 주셔서 감사합니다.
일단, 폰트의 패스는 문제가 없습니다.
기타 다른 글꼴로 바꿨을때도 영문인 경우, iconv()를 하지 않으면 제대로 나오거든요.
다만, 폰트가 유니코드로 인코딩 되어 있는지를 말씀하셨는데, 솔직히 무슨 말씀이시진지 이해가 안됩니다.
유니코드용 폰트가 따로 있다는 말씀이시진지, 아니면, 문자열을 받을때, 유니코드로 입력받아야 한다는 말씀이신지...
좀 더 자세히 설명해 주시면 감사하겠습니다.
아, 그리고, strcpy()는 님께서 말씀하신 내용이 맞습니다. 제가 착각을 했군요. ^^
P.S : 혹시 gd library를 이용해서, 간단하게 이미지 파일 읽어서 한글 텍스트를 쓰는데, 안깨지고 제대로 되는 샘플이 있으시면 어느분이라도 좀 부탁드립니다.
제가 개발하는 환경에서 해보고 그 결과에 대해 다시 질문을 드리면, 문제가 뭔지 좀 더 정확히 알수 있을것 같습니다. ^^
좌절금지!!!
피할수 없다면 즐겨라.
Re: [질문]gd library 사용시, 한글이 깨질 경우, iconv 사용방
저같은 경우 iconv를 이용하지 않고 그냥 utf변환함수를 하나 만들고 gdImageStringTTF에서 utf변환함수를 이용해서 한글을 출력하도록 gdlib도 약간 수정했습니다. 그냥 일반적인 euckr문자를 입력하면 내부적으로 utf변환후 출력하도록 했습니다.
gdImageStringTTF를 보면 폰트를 지정하는 곳이 있는데 여기에 UTF를 지원하는 폰트의 경로를 지정하면 되구요, 저 같은 경우 "/usr/X11R6/lib/X11/fonts/gulim.ttc"를 사용했습니다.
iconv를 사용해도 같을 거라고 생각되는데, 입력된 문자열을 UTF로 변환한후 gdImageStringTTF를 호출할 때 폰트경로만 잘 지정해 주면 될것으로 생각됩니다.
참고로 저는 gdlib-1.8.3을 수정해서 사용하고 있읍니다. 소스코드는 http://www.joinc.co.kr/cgi-bin/JCvs/cgi/viewcvs.cgi/gdlib 에서 얻을 수 있구요. gdttf.c 에서 gdImageStringTTF와 str2uni함수를 주의해서 보시면 될겁니다.
출력 결과물은 http://www.joinc.co.kr/modules.php?op=modload&name=webreport을 보시면 됩니다.
[quote]gdImageStringTTF를 보면 폰트를 지정하는 곳이
UTF를 지원하는 폰트가 따로 있나요?
이런건 어떻게 구하는건지요? 아니면, 환경설정에서 바꿔주면 되는건가요?
제가 모르는게 너무 많아서 답답합니다.
지금 사용하는게 Solaris Sparc Sun OS 5.8인데, gulim.ttc 폰트가 없군요.
아, 그리고, 저는 지금 gd library 2.0.28 버전을 사용하고 있고, 한글뿐만이 아니라, 기타 유니코드로 처리해야할 문자들(중국어, 일어, 기타...)을 모두 이미지로 변환해야 하는데, iconv를 쓰면 될것 같아서, 시도중인데, 어렵군요.
안되는 이유가 iconv는 제대로 썼는데, 폰트가 UTF 지원을 안해서인지, 아니면, iconv의 사용상 문제인지 모르겠습니다.
이미 gd library 가 설치되어 있는 상황이라, 다른걸로 테스트하기도 그렇고(제가 솔라리스를 잘 모릅니다. :oops: )해서, iconv를 이용해서 한글이 깨지지 않게 처리된 소스를 보여주시면, 제가 테스트해봐서 제 시스템에서만 한글이 깨진다면, UTF 지원이 안되는 폰트문제인줄로 판단하면 될것 같습니다만...
조언 좀 부탁드립니다. ^^
좌절금지!!!
피할수 없다면 즐겨라.
저도.. gd 2.0.28 버젼을 사용하고 있는데.. 예전에.. 짜놨던.
저도.. gd 2.0.28 버젼을 사용하고 있는데.. 예전에.. 짜놨던.. euc-kr->utf-8 코드와..
테스트성으로 짜놨던 코드를 좀 조합해서.. 해봤는데 잘되는군요 :)
오랫동안 꿈을 그리는 사람은 그 꿈을 닮아간다...
http://mytears.org ~(~_~)~
나 한줄기 바람처럼..
정태영님 정말 감사합니다.역시나 폰트의 문제였습니다.[code
정태영님 정말 감사합니다.
역시나 폰트의 문제였습니다.
님께서 올려주신 소스에서 폰트를 1번과 2번으로 바꾸어서 테스트 해보니, 1번의 경우는 한글이 깨져서 나오고, 2번의 경우는 한글이 제대로 나왔습니다.
그렇다면, 결론은 UTF를 지원하는 폰트를 사용해야 한다는 것인데, 앞서 질문드린대로, 한글뿐만이 아니라, 2바이트 문자를 사용하는 나라의 문자를 제대로 표현하려면, 이들 역시 UTF 지원 폰트를 사용해야겠군요?
한가지 질문을 더 드리자면, UTF 지원 폰트는 어떻게 만드는지요?
기존의 폰트를 가지고, 일종의 툴을 사용하면, 간단하게 되는것인지, 아니면, 새로 만들던가, 만들어진 폰트를 구해야 하는건가요?
자꾸 질문만 드려서 죄송합니다.
그리고, 정태영님 다시 한번 감사의 말씀 전합니다. ^^
좌절금지!!!
피할수 없다면 즐겨라.
[quote="paraline"]#define FONT "/usr/ope
Arial 은.. unicode로 인코딩되어있고 말고를 떠나서.. 한글 영역이
"전혀" 들어있지 않습니다 -_-;;;
그리고 요근래 구할 수 있는 대부분의 폰트들은.. unicode로 인코딩되어있습니다..
오랫동안 꿈을 그리는 사람은 그 꿈을 닮아간다...
http://mytears.org ~(~_~)~
나 한줄기 바람처럼..
감사합니다.정말 많은 걸 배웠습니다.속이 다 후련합니다. :D
감사합니다.
정말 많은 걸 배웠습니다.
속이 다 후련합니다. :D
좌절금지!!!
피할수 없다면 즐겨라.
댓글 달기