반응형
이번 포스팅에서는 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_img, true);
// 워터마크 폰트 색상 (RGB 값)
$color = imagecolorallocate($create_img, 0, 0, 0);
imagettftext($create_img, 20, 0, 2, 20, $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_img, true);
// 워터마크 위치 지정
$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_y, 0, 0, $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' 카테고리의 다른 글
[PHP] 네이버 검색 API로 내 사이트에 뉴스 검색 결과 출력하기 (6) | 2018.08.28 |
---|---|
[PHP] 텔레그램 api로 알림(push) 받기 (1) | 2018.03.04 |
[PHP] PHP Mailer로 메일 전송 (네이버 아이디 사용) (4) | 2017.10.20 |
[PHP] 헤더를 이용한 파일 다운로드 구현 (1) | 2017.10.19 |
[PHP] curl 페이지 크롤링 함수 (0) | 2017.10.16 |