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

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

 

결과 화면입니다.

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

 

 

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

 

결과 화면입니다.

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

 

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

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

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

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

 

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

www.php.net" data-og-source-url="https://www.php.net/" data-og-url="https://www.php.net/" data-og-image="" style="box-sizing: inherit; margin: 30px 0px; max-width: 100%; clear: both; color: rgb(51, 51, 51); font-family: "Noto Sans KR", Arial, "Apple SD Gothic Neo", "Malgun Gothic", "맑은 고딕", "Nanum Gothic", Dotum, 돋움, Helvetica, sans-serif; font-size: medium;">

 


0
0
이 글을 페이스북으로 퍼가기 이 글을 트위터로 퍼가기 이 글을 카카오스토리로 퍼가기 이 글을 밴드로 퍼가기

PHP

번호 제목 글쓴이 날짜 조회수
16 PhpSpreadsheet 설정 샘플 코드 관리자 06-21 231
15 PHP & JavaScript 엑셀 파일 다운로드 및 업로드 구현 (PhpSpreadsheet 사용) 관리자 06-21 225
14 PHP 스크립트에서 JSON 반환하기 관리자 11-26 2,481
13 PhpSpreadsheet 설치 및 사용법 정리 관리자 11-07 483
12 PHP 프로그램에서 BULK INSERT 문장을 만드는 방법 관리자 07-07 490
11 PHP 문자 암호화하여 Form 전송하기 관리자 07-07 470
10 전화번호 체크하기(휴대전화, 유선, 대표번호 등등) 관리자 07-03 424
9 get vimeo thumb 관리자 04-14 436
8 PHP 에서 MySQL 사용하기 (연결, DB&테이블 생성, 데이터 삽입/선택) 관리자 04-13 567
7 [PHP] 특정 영역 자동 스크린샷 저장 후 가장 최신 이미지 DB 저장 관리자 03-15 500
6 GD PHP TEXT ALIGN 한글 관리자 03-14 416
5 [PHP] 이미지파일에 텍스트 넣기 (라이브러리) 관리자 03-12 728
4 PHP 이미지 워터마크(텍스트&이미지) 삽입하기 관리자 03-11 413
3 한글 종성유무에 맞는 조사(은/는/이/가/을/를/과/와) 변환 관리자 06-22 651
2 한국어 조사 처리 함수 관리자 04-08 737
1 PHP 에서 callback 함수를 이용하여서 mysql select row 함수 개발하는 방법 관리자 10-22 907