예전에 사용하던 게시판 데이타 백업을 위해
PHP Ming(플래시 라이브러리) extension 을 fedora core 7 에 설치해서 게시판을 살려봤다.
http://ming.sf.net
http://www.libming.net
http://kr2.php.net/manual/en/ref.ming.php
http://www.gazbming.com
예전의 ming 0.2a 버전만 해도 한글 출력이 잘 되지 않아서,
일본에서 만든 jaming 을 패치해서 사용했는데,
최신 베타 버전 소스를 내려받아 예전 소스로 패치할려구 소스를 조금 살펴보니
멀티바이트(UTF8) 처리가 되어 있는 것 같았다.
그래서, 한번 php 에 붙여 봤다.
# tar xvfj ming-0.4.0.beta5.tar.bz2
# cd ming-0.4.0.beta5
# ./configure --prefix=/usr --enable-php
...
...
Config summary:
C++ enabled
Perl extension disabled
PHP extension enabled
Python extension disabled
Tcl extension disabled
ZLIB enabled (-lz)
Freetype library enabled (/usr/bin/freetype-config)
GIF library enabled (-lungif)
PNG library enabled (-lpng)
(perl 이나 python 에서 사용할려면 옵션을 켜주면 된다. jpeg 은 기본지원이고 gif 와 png 는 라이브러리가 있으면 자동 설정된다.)
# make
# make install
PHP 용 확장 모듈은 php_ext/tmp/.libs 디렉토리 밑에 ming.so 파일로 생성된다.
이 파일을 PHP 모듈 디렉토리로 복사한다.

# mv ming.so /usr/lib/php/modules 또는
# mv ming.so /usr/lib64/php/modules (64비트 환경인 경우)
그리고, 다음의 파일을 생성한다.
# cat /etc/php.d/ming.ini

; Enable Ming extension module
extension=ming.so

웹서버를 다시시작하고, ming 예제 소스를 실행하면, 플래시가 생성됨을 알 수 있다.
이제 한글 출력을 해보자.
예전 jaming 패치를 사용할 때에는 iconv 를 써서 변환을 했었는데,
다음의 함수를 써서 바로 사용할 수 있다.

text->addUTF8String()

이제 Fedora 에 기본 설치된 한글 백묵 폰트를 ming 용 fdb 폰트로 생성해 보자.
fdb 폰트 생성은 두단계를 거친다. 처음에는 플래시용 폰트 fft 를 생성하고, 다음에 그것을 ming용 폰트로 변경하면 된다.
ming 소스의 util 디렉토리에는 ttf 를 fft 로 변환하는 ttftofft 유틸리티가 있지만, 한글 폰트의 경우 제대로 변환을 하지
못한다. JGenerator(자바를 이용한 플래시 생성 라이브러리) 프로젝트에서 만든 ttf2fft 유틸리티를 사용하면 된다.
makefdb 는 ming 의 도구를 사용하면 된다.
linux fc7 의 freetype2 에서 컴파일될 수 있도록 수정한 소스가 아래에 있다.

# tar xvfz ttf2fft.tgz
# cd ttf2fft
# make
# cp ttf2fft /usr/local/bin
# ttf2fft
Usage:

ttf2fft {[-f ] [-e ] [-o ] |
[-l]}

where:

-f - specifies face number
-e - specifies charmap number
-o - specifies output file name
-l - prints font info

한글 폰트에 대해 사용할 때에는 다음과 같이 사용하면 된다.
# ttf2fft -e 1 gulim.ttf -o gulim.fft
# makefdb gulim.fft
이렇게 하면 gulim.fdb 가 생성된다.
php-ming, 한글 출력 일부 코드....

....
....
$m = new SWFMovie();
$m->setDimension(745,30);
$m->setBackground(0xff, 0xff, 0xff);
$m->setRate(24.0);
// 폰트 지정
$f = new SWFFont('/usr/share/fonts/ming/Baekmuk Headline.fdb');

// 텍스트 오브젝트 생성후, 한글 출력 예
$t = new SWFText();
$t->setFont($f);
$t->setHeight(20);
$t->setColor(rand(0, 0xff), rand(0,0xff), rand(0, 0xff));
$t->moveTo($f->getWidth($title[$i])/1024/2, 10);
$t->addUTF8String($title[$i]);
....
...
// 하이퍼링크가 가능한 버튼 생성
$b[$i] = new SWFButton();
$b[$i]->addShape($hit, SWFBUTTON_HIT);
$b[$i]->addShape($t, SWFBUTTON_OVER | SWFBUTTON_UP | SWFBUTTON_DOWN);

$b[$i]->addAction(newSWFAction("getURL('$url[$i]','popup');"),
SWFBUTTON_MOUSEUP);

출력 예제,(클릭하면, 해당 페이지를 popup 으로 띄운다.) - 조금 기다려야 합니다.


내 블러그의 최신 글을 보여주는 rss를 받아서 타이틀을 뿌려주는 예제다. Swf 파일로 만들어봤다.
(출력을 ->save 를 사용하면, 파일로 만들 수 있다.)

사용한 샘플 소스 (소스는 여기저기 줏어서 짜깁기했다.)
myrss.tar.gz

참고로 fc7 에서 만든 ming 소스 rpm 파일이 아래에 있다.
ming-0.4.0.beta5-1np.src.rpm

소스파일에는 아래의 파일들이 들어 있다.
ming-0.4.0.beta5.tar.bz2
ming-0.4.spec
ming-fonts-1.00.tar.bz2
ttf2fft.tar.gz
ming.ini
소스 rpm 을 내려받은 후,
ming-0.4.spec 에서 아래 부분을 수정하면, 원하는 모듈을 바이너리 rpm 으로 얻을 수 있다.
올린 소스에는 php 만 활성화시켰으므로 다른 라이브러리가 필요하면 해당 옵션을 켜야 한다.
%define ming_php 1
%define ming_python 1
%define ming_perl 1
%define ming_tcl 1
%define ming_fonts 1

$ rpmbuild -ba ming-0.4.spec
또는
$ rpmbuild --rebuild ming-0.4.spec

바이너리 결과물들....
ming-0.4.0.beta5-1np.x86_64.rpm
ming-fonts-0.4.0.beta5-1np.x86_64.rpm
ming-perl-0.4.0.beta5-1np.x86_64.rpm
ming-php-0.4.0.beta5-1np.x86_64.rpm
ming-python-0.4.0.beta5-1np.x86_64.rpm
ming-tcl-0.4.0.beta5-1np.x86_64.rpm
php 만 테스트했다. ming-fonts 의 원래 버전은 1.00인데, ming 라이브러리에 포함해서 같이 빌드한 후 그냥 버전은
ming 의 버전을 따라 이름지었다. 귀챦다. 하지만, 변환된 한글 백묵 폰트를 자동으로 생성할 수 있도록 하였다.

바이너리 패키지중 fonts 는 아키텍쳐와 무관하게 빌드되어야 하는데, 지금 보니까
잘못 했다.
알아서 spec 파일을 고치면 될듯하다. 지금 고칠수 있지만, 여백이 부족하다.

아무도(나도) 사용하지 않는 ming 라이브러리 삽질을 한것은 역시 심심해서다.

덧글: 아래는 리눅스 사용자가 아닌 경우, 한글 폰트 생성을 할 수 가 없는 것 같아서,
한글 fdb 폰트 바이너리만 따로 올립니다.(백묵폰트 등..)
fdb-batang.zip
batang.fdb
fdb-dotum.zip

dotum.fdb
fdb-gulim.zip

gulim.fdb
fdb-hline.zip

hline.fdb
fdb-malgun.zip

malgun.fdb
fdb-un-fonts.zip

참고로, 은폰트는 생성만 해보고, 실제로 테스트는 하질 않았다.
(은폰트 목록)
-rw-r--r-- root/root 22405 2008-01-21 01:14:46 fdb/UnBatangBold.fdb
-rw-r--r-- root/root 22538 2008-01-21 01:14:47 fdb/UnPen.fdb
-rw-r--r-- root/root 16719 2008-01-21 01:14:46 fdb/UnGraphic.fdb
-rw-r--r-- root/root 16721 2008-01-21 01:14:46 fdb/UnJamoNovel.fdb
-rw-r--r-- root/root 16720 2008-01-21 01:14:47 fdb/UnJamoSora.fdb
-rw-r--r-- root/root 22544 2008-01-21 01:14:47 fdb/UnPenheulim.fdb
-rw-r--r-- root/root 16332 2008-01-21 01:14:47 fdb/UnYetgul.fdb
-rw-r--r-- root/root 16721 2008-01-21 01:14:46 fdb/UnJamoDotum.fdb
-rw-r--r-- root/root 16329 2008-01-21 01:14:46 fdb/UnBom.fdb
-rw-r--r-- root/root 35870 2008-01-21 01:14:47 fdb/UnPilgi.fdb
-rw-r--r-- root/root 34185 2008-01-21 01:14:47 fdb/UnPilgiBold.fdb
-rw-r--r-- root/root 22542 2008-01-21 01:14:47 fdb/UnShinmun.fdb
-rw-r--r-- root/root 16717 2008-01-21 01:14:46 fdb/UnDotum.fdb
-rw-r--r-- root/root 16333 2008-01-21 01:14:46 fdb/UnGraphicBold.fdb
-rw-r--r-- root/root 16331 2008-01-21 01:14:46 fdb/UnDotumBold.fdb
-rw-r--r-- root/root 22542 2008-01-21 01:14:46 fdb/UnGungseo.fdb
-rw-r--r-- root/root 22545 2008-01-21 01:14:46 fdb/UnJamoBatang.fdb
-rw-r--r-- root/root 14815 2008-01-21 01:14:47 fdb/UnTaza.fdb
-rw-r--r-- root/root 22541 2008-01-21 01:14:46 fdb/UnBatang.fdb
>

http://phosphoros.tistory.com/348 에서 발췌
Posted by 김정준
l