웹 개발 & 정보/PHP

PHP 이미지 워터마크(텍스트&이미지) 삽입하기

Rozera 2020. 11. 10. 20:27
반응형

 

 

이번 포스팅에서는 PHP로 이미지에 워터마크 넣는 방법을 알려드리겠습니다.

PHP 기본 소스와 이미지 함수 등을 사용하였으며, PHP GD라이브러리가 사용 가능해야 하는 점 참고 바랍니다.

워터마크를 텍스트로 넣는 방법, 이미지로 넣는 방법 2가지를 모두 살펴보겠습니다.

 

 

1. PHP 워터마크 텍스트로 삽입하기

워터마크를 텍스트로 삽입하기 위해서는 TTF 폰트 파일이 필요합니다.

(폰트 파일은 구글링으로 쉽게 구할 수 있음. 저작권 등은 잘 알아보고 사용하세요)

여기서는 배민 주아체를 사용해보았습니다.

 

예제 소스입니다.

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
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
<?php
$img_path = "/image.jpg"// 원본 이미지 절대경로
$watermark_text = "Watermark Text. . . 조용한 웹 개발자의 블로그의 자료입니다 ^^"// 워터마크 텍스트
$watermark_font = "/BM-JUA.ttf"// 폰트 파일도 절대경로로 지정해야함 (url이 아닌 path)
 
// 워터마크 텍스트 삽입
add_watermark_text($img_path$watermark_text$watermark_font);
 
function add_watermark_text($image_path$text$font) {
    
    // $image_path는 반드시 절대경로로 지정해야함 (url이 아닌 path)
    
    $array_img_chk = array("jpg""jpeg""png""gif""bmp");
    
    // 이미지 확장자
    $img_ext = explode(".", strrev($image_path));
    $img_ext = strrev($img_ext[0]);
    $img_ext = strtolower($img_ext);
    
    // 이미지 파일인 경우에만 진행
    if(in_array($img_ext$array_img_chk)) {
 
        if($img_ext == 'jpg' || $img_ext == 'jpeg')
            $create_img = imagecreatefromjpeg($image_path);
 
        if($img_ext == 'png')
            $create_img = imagecreatefrompng($image_path);
 
        if($img_ext == 'gif')
            $create_img = imagecreatefromgif($image_path);
 
        if($img_ext == 'bmp')
            $create_img = imagecreatefromwbmp($image_path);
 
        if($create_img) {
 
            imagealphablending($create_imgtrue);
            
            // 워터마크 폰트 색상 (RGB 값)
            $color = imagecolorallocate($create_img000);
            
            imagettftext($create_img200220$color$font$text);
 
            /* imagettftext 설명 */
            // 원본 이미지 리소스 : $create_img
            // 폰트 크기 : 20
            // 폰트 각도 : 0
            // 폰트 위치 x : 2
            // 폰트 위치 y : 20
            // 텍스트 색상 : $watermark_color (rgb값)
            // 텍스트 폰트 : $font
            // 텍스트 내용 : $text
 
            //header("Content-type: image/jpeg");
            imagejpeg($create_img$image_path);
 
            imagedestroy($create_img);
        }
    }
}
?>
cs

 

결과 화면입니다.

왼쪽이 원본, 오른쪽이 워터마크(텍스트)가 삽입된 이미지입니다.

 

 

2. PHP 워터마크 이미지로 삽입하기

텍스트로 삽입하는 것과 거의 유사한 방식입니다.

예제에서는 워터마크 이미지 위치를 좌상단으로 배치했습니다.

 

예제 소스입니다.

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
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
<?php
$img_path = "/image.jpg"// 원본 이미지 절대경로
$watermark_img_path = "/watermark.png"// 워터마크 이미지 절대경로
 
add_watermark_image($img_path$watermark_img_path);
 
function add_watermark_image($image_path$watermark_path) {
    
    // $image_path, $watermark_path 는 반드시 절대경로로 지정해야함 (url이 아닌 path)
    
    $array_img_chk = array("jpg""jpeg""png""gif""bmp");
    
    // 이미지 확장자
    $img_ext = explode(".", strrev($image_path));
    $img_ext = strrev($img_ext[0]);
    $img_ext = strtolower($img_ext);
    
    // 이미지 파일인 경우에만 진행
    if(in_array($img_ext$array_img_chk)) {
 
        if($img_ext == 'jpg' || $img_ext == 'jpeg')
            $create_img = imagecreatefromjpeg($image_path);
 
        if($img_ext == 'png')
            $create_img = imagecreatefrompng($image_path);
 
        if($img_ext == 'gif')
            $create_img = imagecreatefromgif($image_path);
 
        if($img_ext == 'bmp')
            $create_img = imagecreatefromwbmp($image_path);
 
        if($create_img) {
            
            // 워터마크 이미지 확장자
            $watermark_img_ext = explode(".", strrev($watermark_path));
            $watermark_img_ext = strrev($watermark_img_ext[0]);
            $watermark_img_ext = strtolower($watermark_img_ext);
 
            if($watermark_img_ext == 'jpg' || $watermark_img_ext == 'jpeg')
                $create_watermark_img = imagecreatefromjpeg($watermark_path);
 
            if($watermark_img_ext == 'png')
                $create_watermark_img = imagecreatefrompng($watermark_path);
 
            if($watermark_img_ext == 'gif')
                $create_watermark_img = imagecreatefromgif($watermark_path);
 
            if($watermark_img_ext == 'bmp')
                $create_watermark_img = imagecreatefromwbmp($watermark_path);
 
            if($create_watermark_img) {
 
                list($img_w$img_h= getimagesize($image_path);
                list($watermark_img_w$watermark_img_h= getimagesize($watermark_path);
 
                imagealphablending($create_imgtrue);
                
                // 워터마크 위치 지정
                $pos_x = 50;
                $pos_y = 50;
 
                // (예시) 워터마크를 정중앙으로
                // $pos_x = ceil(($img_w - $watermark_img_w) / 2);
                // $pos_y = ceil(($img_h - $watermark_img_h) / 2);
                
                imagecopy($create_img$create_watermark_img$pos_x$pos_y00$watermark_img_w$watermark_img_h);
 
                /* imagecopy 설명 */
                // 원본 이미지 리소스 : $create_img
                // 워터마크 이미지 리소스 : $create_watermark_img
                // 워터마크 이미지 x 좌표 : $pos_x
                // 워터마크 이미지 y 좌표 : $pos_y
                // 원본 이미지 x 좌표 : 0
                // 원본 이미지 y 좌표 : 0
                // 워터마크 이미지 가로크기 : $watermark_img_w
                // 워터마크 이미지 세로크기 : $watermark_img_h
                
                //header("Content-type: image/jpeg");
                imagejpeg($create_img$image_path);
 
                imagedestroy($create_img);
                imagedestroy($create_watermark_img);
            }
        }
    }
}
?>
cs

 

결과 화면입니다.

왼쪽이 원본, 오른쪽이 워터마크(이미지)가 삽입된 이미지입니다.

 

처음에는 소스가 중복되는 부분이 많아 2가지를 함수 하나로 묶을까 했는데, 하다 보니 너무 지저분해져서 그냥 따로 분리했습니다.

예제 소스에는 기본적으로 원본 이미지에 워터마크 삽입된 이미지가 덮어쓰기 되도록 되어있는 점 참고하시기 바랍니다.

'php 워터마크', 'php 이미지 워터마크' 등으로 구글링해서 나온 자료들을 짜깁기하고 재가공해서 만든 소스입니다.

필요에 맞게 자유롭게 수정해서 사용하시면 됩니다.

 

이미지 함수들의 자세한 설명은 php 공식사이트 메뉴얼을 참고하세요.

 

PHP: Hypertext Preprocessor

The PHP team is pleased to announce the seventh testing release of PHP 8.0.0, Beta 4. This point in the release cycle would normally be RC1, however we're still finalizing development of the JIT and squaring away named arguments, so we've opted for an extr

www.php.net

 

- 같이 보면 좋은 포스팅 추천

2020.11.12 - [웹 개발 & 정보/그누보드] - 그누보드 게시판 이미지 업로드시 워터마크 삽입하기

반응형