phpThumb를 이용해 이미지 글자 만들기

웹에서 사용하기에 한글 글꼴의 용량은 너무 크다. 10~20년 후면 그런 용량도 커버하는 인터넷 속도가 자연스러워질지 모르나, 지금은 아니다.

그래서 나눔고딕 cufon을 minify로 압축하고, 글꼴을 가진 경우에는 cufon을 적용하지 않으며, 캐시를 사용하는 방법이 있다. 그러면 300kb 정도로 용량을 줄일 수 있다.

cufon은 ‘함초롬 돋움’ 같은 용량이 큰 글꼴로는 만들 수 없다. 그래서 이런 글꼴을 사용하려면 어쩔 수 없이 이미지 글자를 생성해야 한다.

이미지 글꼴의 커다란 단점은 수정이 불편하다는 거다. 디자이너에게 의뢰해야만 고치거나 새로 만들 수 있다.

그런데 만약 이미지 글자를 생성해 주는 스크립트를 만든다면?

phpThumb를 이용하면 간단하게 이미지 글자 생성 스크립트를 만들 수 있다. 아래와 같은 URL 형식을 따르면 된다.

/phpThumb/phpThumb.php?src=/t.png&w=398&h=94&zc=2&fltr[]=wmt|다국적군은 리비아 폭격을 중단하라|30|L|000000|NanumGothicBold.ttf|100|0|0&f=png&aoe=1

나 같은 경우는 배경을 투명하고 글자만 나오게 할 생각이므로, 일단 투명하기만 한 png가 하나 필요하다. (투명하기만 한 png 다운로드 : 다른이름으로 다운로드를 사용해 다운받는 게 속편할 거다. 열어봤자 투명해서 안 보인다.)

그렇지 않은 사람은 파라미터 맨 마지막의 f=pngf=jpeg 으로 고치면 되겠다.

위의 파라미터를 하나씩 설명하겠다.

fltr 워터마크 옵션

fltr[]의 어쩌고 저쩌고 부분을 설명하겠다. 이건 phpThumb의 phpthumb.readme.txt 의 Parameters 항목을 보고 쓴 거다. 맨 앞의 wmt 는 WaterMarkText 필터를 사용하겠다는  선언이다.

fltr[]=wmt|다국적군은 리비아 폭격을 중단하라|30|L|000000|NanumGothicBold.ttf|100
fltr[]=wmt|글자|폰트사이즈(pt)|정렬|컬러hex코드|사용할 글꼴파일|투명도|마진|기울임 각도|배경색hex코드|배경색 투명도|배경 확산 방향

위에 쓴 두 개를 비교해 보면 알겠지만, 내가 실제 사용한 코드에서는 글자의 투명도까지만 옵션을 줬다. 즉, 안 써주면 기본값이 들어간다.

참고

이미지 폰트를 출력하는 함수를 짜 봤다. 가장 기본적인 것은 날변수로 받고, 기타 잘 사용하지 않을 만한 옵션은 옵션 배열로 처리하도록 만들었다. 자신의 상황에 맞게 수정해서 사용하기 바란다.

특히 폰트 파일명의 경우 대소문자 구분을 잘 해 줘야 한다. 윈도우 서버라면 모를까 리눅스 서버에서는 대소문자를 칼같이 구분하기 때문이다.

(여기 함수 소스를 넣어 뒀었는데 에디터 오류로 깨졌다)

텍스트에 엔터값을 넣으려면 %0A 라고 써 주면 된다. %0A은 urlencode를 한 엔터값이다. 또한, 한글을 사용할 경우에도 당연히 urlencode를 해 주는 게 좋을 거다. ie에서 제대로 보일 거라고 장담할 수 없다.

그러나 엔터값을 줘 봤자 줄간격을 조절할 수 없어 글자가 딱 붙어 나온다.

따라서 여러 줄을 사용하려면 그냥 두 번 생성하는 게 낫다. 만약 블로그 제목 같은 걸 자동으로 생성할 생각이라면 일정 글자 수 이상이면 공백을 기준으로 나눠서 이미지를 두 번 생성하도록 스크립트를 짜면 될 것이다.

👇 카테고리 글 목록

대표글

“phpThumb를 이용해 이미지 글자 만들기”에 대한 4개의 응답

  1. 좋네요~ 속도는 빠른가요??

    1. 네 한 번 생성되면 phpThumb의 캐시에 저장되어 다음부터는 만들어 놓은 것을 뿌려 주기 때문에 두 번째부터는 빨라요 ㅋ

  2. 서버가 이미지를 생성한 다음 보내주는 방식인가요?
    데이터 변동에 따라 실시간으로 갱신돼야 하면서도 이미지로 제공하고 싶은 경우에 진가를 발휘하겠네요!

    1. 그렇다고 할 수 있죠. 하지만 줄바꿈이 되는 경우에 대응하는 건 좀 까다로워 보입니다. 제가 쓴대로 하면 어느정도는 가능할 수고 있겠지만요. 실용성이 있는지 테스트해 보지는 않았으므로 가설일 뿐입니다.
      또한, 카테고리의 제목이나 항목의 제목 같은 경우는 이미지로 처리할 수 있겠지만 내용이 있는 콘텐츠의 경우에는 긁을 수 있어야 하는데 이 경우에는 이미지로 제공하기 보다는 텍스트로 직접 제공하는게 가장 좋습니다.  따라서 활용범위는 제한적이라고 할 수 있겠습니다.

댓글 남기기