php 이미지에 ttf 글씨 쓰기(gd 라이브러리)
php에서 이미지를 편집하는 방법은 여러가지가 있겠지만, 가장 많이 사용하는것은 gd 라이브러리이다.
기본적으론 disable 상태이기 때문에 이를 허용해주어야한다.
php.ini를 열어서 아래와같이 입력해주자.
extension=php_gd2.dll
실제로 허용이 되었는지는 phpinfo.php 파일을 만들고
<?php phpinfo(); ?>
를 입력한뒤에 아래와 같이 enable상태인지 보면된다.
위의 이미지와 같아졌다면 gd 라이브러리를 사용할 준비가 끝났다.
우선 이미지에 글씨를 작성하는 예시 코드는 아래와같다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
|
<?php
header('Content-Type: image/png');
$string = $_GET['text'];
//이미지 생성하기
$im = imagecreatefrompng('./common/img/original.png');
//색상 지정하기
$white = imagecolorallocate($im, 255, 255, 255);
$grey = imagecolorallocate($im, 128, 128, 128);
$black = imagecolorallocate($im, 0, 0, 0);
//폰트 위치(절대경로)
$font = "C:\Fonts\NotoSansCJKkr-Black.otf";
$fontsize = 16;
$width = 568;
$height = 249;
//가운데 정렬
$strsize = imageftbbox($fontsize, 0, $font, $string, array("linespacing" => 1));
$s_width=$strsize[4];
$s_height=$strsize[5];
$x = $width/2 - $s_width/2;
$y = $height/2 - $s_height/2;
//바탕, 폰트사이즈, 기울기, 가로위치, 세로위치, 색상, 폰트, 내용
imagettftext($im, $fontsize, 0, $x, $y, $black, $font, $string);
$date = date("U_u");
$path = "./common/img/".$date.".png";
//이미지 경로에 생성
//imagepng($im,$path);
//이미지 화면에 생성
imagepng($im);
//해제
imagedestroy($im);
?>
|
cs |
위의 코드는 text에 받은 문자열을 화면에 가운데 정렬해서 보여준다.
코드는 쭉 읽다보면 이해가 갈것이다. 이 예제에서 사용한 함수들을 설명하겠다.
1. imagecreatefrompng( string $filename ) : 이미지를 gd에서 사용가능한 변수로 생성해준다.
2. imagecolorallocate( resource $image , int $red , int $green , int $blue ) : rgb 형태로 색상을 생성한다.
3. imageftbbox ( float $size , float $angle , string $fontfile , string $text [, array $extrainfo ] ) : 폰트를 적용한 텍스트 박스의 좌표를 배열 형태로 리턴한다.
index | information |
0 | lower left corner, X position |
1 | lower left corner, Y position |
2 | lower right corner, X position |
3 | lower right corner, Y position |
4 | upper right corner, X position |
5 | upper right corner, Y position |
6 | upper left corner, X position |
7 | upper left corner, Y position |
4. imagettftext( resource $image , float $size , float $angle , int $x , int $y , int $color , string $fontfile , string $text ) : 폰트를 적용한 글씨를 이미지에 쓴다.
5. imagepng( resource $image [, mixed $to = NULL [, int $quality = -1 [, int $filters = -1 ]]] ) : 이미지를 화면에 띄우거나 지정된 경로에 저장한다.
6. imagedestroy( resource $image ) : 이미지를 할당 해제한다.
본 예제를 그대로 사용하면 화면에 내가 매개변수(text)로 준 글씨가 이미지에 써있다. 이를 저장해주고싶으면 주석처리한 imagepng($im,$path); 를 사용하면된다. path로 난 common/img를 사용했고, 파일이름은 생성시각으로 자동생성해주었다.
또한 gd는 매우,, 간단한 라이브러리라 자동정렬 기능이 없다. 정렬을 해주고싶으면 직접 텍스트박스의 크기와 이미지 크기를 가지고 계산해주어야한다. 가로 가운데 정렬은 (가로/2) - (텍스트박스/2) 로 계산해주면된다. 세로도 마찬가지이며 이를 응용하면 오른쪽 왼쪽 정렬도 해줄 수 있다.
참고 : www.php.net/docs.php