제 강좌를 출처를 밝히고 외부로 퍼가는 것은 허용하지만, 다른 강좌의 자료나 책의 자료로 사용되거나 부분적인 인용은 허용하지 않습니다.
예전 개발 환경에서는 GD 나 FREETYPE 등의 연동여부나 php버젼들을 따졌지만, 요새 개발 환경에서는 대부분 기본적으로 다 제공하기 때문에 그렇습니다.
php > 내가 만들어 쓰는 함수 > 종합 썸네일 함수 만들기 1
이전까지는 이미지의 리사이즈, 크롭, 워터마크에 대해 다루었습니다.
이번에는 이전에 다ㅤㄹㅝㅅ던 내용을 모두 포함하는 종합적인 썸네일 함수를 만들어 보겠습니다.
물론, 이번에 만드는 것이 최종 완성판은 아니며, 나중에 내용을 더 진행하면 수정 보완됩니다.
함수를 만들기 이전에 이함수가 어떤 처리를 하는지 대략적인 정리를 해보고자 합니다.
1. 처리에 필요한 기본값을 정의합니다.
2. 원본 파일로 부터 이미지 리소스를 생성합니다.
3. 크롭사용 여부에 따라 크롭이나 리사이즈 처리를 한 썸네일의 리소스를 생성합니다.
4. 워터마크 이미지가 존재한다면 워터마크를 조건에 따라 처리합니다.
5. 지정된 경로로 썸네일을 저장합니다.
위의 처리과정대로 함수를 만들기 위해서는 많은 인자를 필요로 합니다.
하지만, 항상 필요한 인자들은 아닙니다. 경우에 따라 필요할수도 있고 없을수도 있습니다.
그래서 함수의 인자는 최대한 간략한 형태로 하고, $options 배열 인자를 두어 사용에 필요한 인자는 배열을 통해서 받도록 처리하였습니다.
예제1 : thumnail_test1 을 image_proc.function.php 에 추가
function thumnail_test1($path_src_file, $path_save_file, $save_w, $save_h=0, $options=Array()){
//기본값 설정
$save_quality = 70;//저장 품질 : 70 %
$save_force = 2;//저장형태 : 파일 덮어씌움
$crop_use = 0;//크롭 사용여부
$crop_pos_width = 2;//너비 기준 크롭시 중앙을 기준
$crop_pos_height = 1;//높이 기준 크롭시 상단을 기준
$watermark_path_file = '';//워터마크로 사용할 파일 경로 : 없음
$watermark_pos = 4;//워터마크 찍는 위치 : 하단 오른쪽
$watermark_sharpness = 30;//워터마크 이미지의 선명도 : 30 %
$watermark_padding = 10;//원본과 워터마크 사이의 여백 : 10px
//기본값 재설정
if (!empty($options)) @extract($options);
//원본 리소스 생성
list($src, $src_w, $src_h) = get_image_resource_from_file ($path_src_file);
if (empty($src)) return false;
//리사이즈 또는 크롭 리사이즈
if ($crop_use == 1) {//크롭 리사이즈
$dst = get_image_cropresize($src, $src_w, $src_h, $save_w, $save_h, $crop_pos_width,
$crop_pos_height);
}
else {//리사이즈
$dst = get_image_resize($src, $src_w, $src_h, $save_w, $save_h);
}
@imagedestroy($src);
if (empty($dst)) return false;
//워터마크 이미지가 파일일 경우, 워터마크 처리
if (!empty($watermark_path_file) && is_file($watermark_path_file)) {
$result_watermark = proc_watermark($dst, $save_w, $save_h, $watermark_path_file, $watermark_pos, $watermark_sharpness, $watermark_padding);
if (empty($result_watermark)) return false;
}
$result_save = save_image_from_resource ($dst, $path_save_file, $save_quality, $save_force);
@imagedestroy($dst);
return $result_save;
}
함수 내용을 보면 처리해야 할 내용에 비해 아주 간단합니다. 이유는 이미 세부적인 처리를 하는 부분은 함수로 다 만들어 두었기 때문에 이 함수 내에서는 그 함수들을 사용만 하면 되기 때문입니다.
$save_quality = 70;//저장 품질 : 70 %
$save_force = 2;//저장형태 : 파일 덮어씌움
이것은 저장과 관련된 기본값입니다.
$save_quality 는 저장 품질을 결정 짓는 변수입니다. 이전에 만든 save_image_from_resource 함수의 $quality 변수와 동일합니다. 기본값은 70 으로 주었습니다.
$save_force 는 동일 경로상에 동일한 이름의 파일이 존재할 경우에 대처방향을 변수로 저장하는 것입니다. 물론 이것역시 save_image_from_resource 함수의 $save_force 변수와 동일합니다. 0일 경우 return false, 1일 경우 return true, 2일 경우 기존 파일을 삭제하고 새로 저장을 합니다. 기본값은 2 파일 덮어씌움으로 주었습니다.
$crop_use = 0;//크롭 사용여부
$crop_pos_width = 2;//너비 기준 크롭시 중앙을 기준
$crop_pos_height = 1;//높이 기준 크롭시 상단을 기준
이것은 크롭과 관련된 기본값입니다.
$crop_use 는 크롭을 사용할지를 결정짓는 변수입니다. 0 일 경우에는 사용하지 않고, 1일 경우에는 사용합니다. 기본값은 0으로
주었습니다.
$crop_pos_width 는 너비 기준으로 크롭을 하게 되었을때 너비중 어디를 기준으로 크롭을 할것인가를 결정짓는 변수입니다. 1일 경우에는 왼쪽, 2일 경우에는 중앙, 3일 경우에는 오른쪽을 기준으로 크롭을 실행합니다.
$crop_pos_height 는 높이 기준으로 크롭을 하게 되었을때 높이중 어디를 기준으로 크롭을 할것인가를 결정짓는 변수입니다. 1일 경우에는 상단, 2일 경우에는 중단, 3일 경우에는 하단을 기준으로 크롭을 실행합니다.
여기에 설정된 $crop_pos_width 과 $crop_pos_height 는 get_image_cropresize 함수의 $pos_width, $pos_height 와 동일합니다.
$watermark_path_file = '';//워터마크로 사용할 파일 경로 : 없음
$watermark_pos = 4;//워터마크 찍는 위치 : 하단 오른쪽
$watermark_sharpness = 30;//워터마크 이미지의 선명도 : 30 %
$watermark_padding = 10;//원본과 워터마크 사이의 여백 : 10px
이것은 워터마크와 관련된 기본값입니다.
모두 proc_watermark 함수의 $path_mark_file, $pos, $sharpness, $padding 과 동일합니다.
가장 최근에 다른 내용이므로 별도의 설명은 하지 않겠습니다.
워터마크처리 의 경우는 $watermark_path_file 로 설정된 값이 존재하는 파일 일 경우에만 실행됩니다.
기본값이 빈값이기 때문에 워터마크처리를 하기위해선 $options['watermark_path_file'] = '워터마크 파일의 경로';
와 같이 설정하고 넘겨 주어야 합니다.
나머지 기본값들의 변경 역시 $options['변수명'] = '값'; 을 통하여 기본값을 변경할수가 있습니다.
아래의 예제를 확인하여 이 썸네일 함수의 사용법을 익혀보도록 합니다.
예제2 : test16.php
<?php
//이미지 처리 함수 인클루드
include_once 'lib/image_proc.function.php';
$path_src_file = 'sample_image/test.jpg';//원본파일
$path_mark_file ='sample_image/php.png';//워터마크에 사용할 파일
$path_400X0_file = 'sample_image/test_400X0.jpg';//원본파일을 너비 400으로 정비율 리사이즈
//원본을 너비 400 정비율 리사이즈, $path_400X0_file 에 기본 저장 옵션
$save_w = 400;
$result = thumnail_test1($path_src_file, $path_400X0_file, $save_w);
if (empty($result)) die($GLOBALS['errormsg'] . "<br />\n");
echo "
너비 $save_w 으로 정비율 리사이즈 <br />
<img src='$path_400X0_file'> <br /><br />
";
flush();
//$path_400X0_file을 높이 200 정비율 리사이즈, 저장시 quality 10%로 저장
$save_w = 0;
$save_h = 200;
$options = Array();//옵션설정
$options['save_quality'] = 10;
$path_save_file = 'sample_image/test_' . $save_w . 'X' . $save_h . '.jpg';
$result = thumnail_test1($path_400X0_file, $path_save_file, $save_w, $save_h,
$options);
if (empty($result)) die($GLOBALS['errormsg'] . "<br />\n");
echo "
높이 $save_h 으로 정비율 리사이즈, 저장시 quality 10% <br />
<img src='$path_save_file'> <br /><br />
";
flush();
//$path_400X0_file을 너비 300, 높이 300 강제 리사이즈, 기본 저장 옵션
$save_w = 300;
$save_h = 300;
$path_save_file = 'sample_image/test_' . $save_w . 'X' . $save_h . '.jpg';
$result = thumnail_test1($path_400X0_file, $path_save_file, $save_w, $save_h);
if (empty($result)) die($GLOBALS['errormsg'] . "<br />\n");
echo "
너비 $save_w, 높이 $save_h 강제 리사이즈 <br />
<img src='$path_save_file'> <br /><br />
";
flush();
//$path_400X0_file을 너비 300, 높이 100 크롭 리사이즈, 기본 저장 옵션
$save_w = 300;
$save_h = 100;
$options = Array();//기본옵션
$options['crop_use'] = 1;//크롭 사용함
$options['crop_pos_height'] = 1;
$path_save_file = 'sample_image/test_crop_top_' . $save_w . 'X' . $save_h . '.jpg';
$result = thumnail_test1($path_400X0_file, $path_save_file, $save_w, $save_h,
$options);
if (empty($result)) die($GLOBALS['errormsg'] . "<br />\n");
echo "
너비 $save_w, 높이$save_h 상단 크롭 리사이즈 <br />
<img src='$path_save_file'> <br /><br />
";
flush();
//$path_400X0_file을 너비 300, 높이 100 크롭 리사이즈, 기본 저장 옵션
$save_w = 300;
$save_h = 100;
$options = Array();//기본옵션
$options['crop_use'] = 1;//크롭 사용함
$options['crop_pos_height'] = 2;
$path_save_file = 'sample_image/test_crop_middle_' . $save_w . 'X' . $save_h . '.jpg';
$result = thumnail_test1($path_400X0_file, $path_save_file, $save_w, $save_h,
$options);
if (empty($result)) die($GLOBALS['errormsg'] . "<br />\n");
echo "
너비 $save_w, 높이$save_h 중단 크롭 리사이즈 <br />
<img src='$path_save_file'> <br /><br />
";
flush();
//$path_400X0_file을 너비 300, 높이 100 크롭 리사이즈, 기본 저장 옵션
$save_w = 300;
$save_h = 100;
$options = Array();//기본옵션
$options['crop_use'] = 1;//크롭 사용함
$options['crop_pos_height'] = 3;
$path_save_file = 'sample_image/test_crop_bottom_' . $save_w . 'X' . $save_h . '.jpg';
$result = thumnail_test1($path_400X0_file, $path_save_file, $save_w, $save_h,
$options);
if (empty($result)) die($GLOBALS['errormsg'] . "<br />\n");
echo "
너비 $save_w, 높이$save_h 하단 크롭 리사이즈 <br />
<img src='$path_save_file'> <br /><br />
";
flush();
//$path_400X0_file을 너비 200, 높이 300 크롭 리사이즈, 기본 저장 옵션
$save_w = 200;
$save_h = 300;
$options = Array();//기본옵션
$options['crop_use'] = 1;//크롭 사용함
$options['crop_pos_width'] = 1;
$path_save_file = 'sample_image/test_crop_left_' . $save_w . 'X' . $save_h . '.jpg';
$result = thumnail_test1($path_400X0_file, $path_save_file, $save_w, $save_h,
$options);
if (empty($result)) die($GLOBALS['errormsg'] . "<br />\n");
echo "
너비 $save_w, 높이$save_h 왼쪽 크롭 리사이즈 <br />
<img src='$path_save_file'> <br /><br />
";
flush();
//$path_400X0_file을 너비 200, 높이 300 크롭 리사이즈, 기본 저장 옵션
$save_w = 200;
$save_h = 300;
$options = Array();//기본옵션
$options['crop_use'] = 1;//크롭 사용함
$options['crop_pos_width'] = 2;
$path_save_file = 'sample_image/test_crop_center_' . $save_w . 'X' . $save_h . '.jpg';
$result = thumnail_test1($path_400X0_file, $path_save_file, $save_w, $save_h,
$options);
if (empty($result)) die($GLOBALS['errormsg'] . "<br />\n");
echo "
너비 $save_w, 높이$save_h 중앙 크롭 리사이즈 <br />
<img src='$path_save_file'> <br /><br />
";
flush();
//$path_400X0_file을 너비 200, 높이 300 크롭 리사이즈, 기본 저장 옵션
$save_w = 200;
$save_h = 300;
$options = Array();//기본옵션
$options['crop_use'] = 1;//크롭 사용함
$options['crop_pos_width'] = 3;
$path_save_file = 'sample_image/test_crop_right_' . $save_w . 'X' . $save_h . '.jpg';
$result = thumnail_test1($path_400X0_file, $path_save_file, $save_w, $save_h,
$options);
if (empty($result)) die($GLOBALS['errormsg'] . "<br />\n");
echo "
너비 $save_w, 높이$save_h 오른쪽 크롭 리사이즈 <br />
<img src='$path_save_file'> <br /><br />
";
flush();
//$path_400X0_file을 너비 300, 높이 300 크롭 리사이즈, 워터마크 사용, 기본 저장 옵션
$save_w = 300;
$save_h = 300;
$options = Array();//기본옵션
$options['crop_use'] = 1;//크롭 사용함
$options['watermark_path_file'] = $path_mark_file;//워터마크 이미지
$options['watermark_pos'] = 1;
$path_save_file = 'sample_image/test_mark_top_left_' . $save_w . 'X' . $save_h . '.jpg';
$result = thumnail_test1($path_400X0_file, $path_save_file, $save_w, $save_h,
$options);
if (empty($result)) die($GLOBALS['errormsg'] . "<br />\n");
echo "
너비 $save_w, 높이$save_h 크롭 리사이즈, 상단 왼쪽 워터마크 <br />
<img src='$path_save_file'> <br /><br />
";
flush();
//$path_400X0_file을 너비 300, 높이 300 크롭 리사이즈, 워터마크 사용, 기본 저장 옵션
$save_w = 300;
$save_h = 300;
$options = Array();//기본옵션
$options['crop_use'] = 1;//크롭 사용함
$options['watermark_path_file'] = $path_mark_file;//워터마크 이미지
$options['watermark_pos'] = 2;
$path_save_file = 'sample_image/test_mark_top_right_' . $save_w . 'X' . $save_h . '.jpg';
$result = thumnail_test1($path_400X0_file, $path_save_file, $save_w, $save_h,
$options);
if (empty($result)) die($GLOBALS['errormsg'] . "<br />\n");
echo "
너비 $save_w, 높이$save_h 크롭 리사이즈, 상단 오른쪽 워터마크 <br />
<img src='$path_save_file'> <br /><br />
";
flush();
//$path_400X0_file을 너비 300, 높이 300 크롭 리사이즈, 워터마크 사용, 기본 저장 옵션
$save_w = 300;
$save_h = 300;
$options = Array();//기본옵션
$options['crop_use'] = 1;//크롭 사용함
$options['watermark_path_file'] = $path_mark_file;//워터마크 이미지
$options['watermark_pos'] = 3;
$path_save_file = 'sample_image/test_mark_bottom_left_' . $save_w . 'X' . $save_h . '.jpg';
$result = thumnail_test1($path_400X0_file, $path_save_file, $save_w, $save_h,
$options);
if (empty($result)) die($GLOBALS['errormsg'] . "<br />\n");
echo "
너비 $save_w, 높이$save_h 크롭 리사이즈, 하단 왼쪽 워터마크 <br />
<img src='$path_save_file'> <br /><br />
";
flush();
//$path_400X0_file을 너비 300, 높이 300 크롭 리사이즈, 워터마크 사용, 기본 저장 옵션
$save_w = 300;
$save_h = 300;
$options = Array();//기본옵션
$options['crop_use'] = 1;//크롭 사용함
$options['watermark_path_file'] = $path_mark_file;//워터마크 이미지
$options['watermark_pos'] = 4;
$path_save_file = 'sample_image/test_mark_bottom_right_' . $save_w . 'X' . $save_h . '.jpg';
$result = thumnail_test1($path_400X0_file, $path_save_file, $save_w, $save_h,
$options);
if (empty($result)) die($GLOBALS['errormsg'] . "<br />\n");
echo "
너비 $save_w, 높이$save_h 크롭 리사이즈, 하단 오른쪽 워터마크 <br />
<img src='$path_save_file'> <br /><br />
";
flush();
//$path_400X0_file을 너비 300, 높이 300 크롭 리사이즈, 워터마크 사용, 기본 저장 옵션
$save_w = 300;
$save_h = 300;
$options = Array();//기본옵션
$options['crop_use'] = 1;//크롭 사용함
$options['watermark_path_file'] = $path_mark_file;//워터마크 이미지
$options['watermark_pos'] = 5;
$path_save_file = 'sample_image/test_mark_middle_center_' . $save_w . 'X' . $save_h . '.jpg';
$result = thumnail_test1($path_400X0_file, $path_save_file, $save_w, $save_h,
$options);
if (empty($result)) die($GLOBALS['errormsg'] . "<br />\n");
echo "
너비 $save_w, 높이$save_h 크롭 리사이즈, 중앙 워터마크 <br />
<img src='$path_save_file'> <br /><br />
";
flush();
//$path_400X0_file을 너비 300, 높이 300 크롭 리사이즈, 워터마크 사용, 기본 저장 옵션
$save_w = 300;
$save_h = 300;
$options = Array();//기본옵션
$options['crop_use'] = 1;//크롭 사용함
$options['watermark_path_file'] = $path_mark_file;//워터마크 이미지
$options['watermark_pos'] = 10;
$path_save_file = 'sample_image/test_mark_all_' . $save_w . 'X' . $save_h . '.jpg';
$result = thumnail_test1($path_400X0_file, $path_save_file, $save_w, $save_h,
$options);
if (empty($result)) die($GLOBALS['errormsg'] . "<br />\n");
echo "
너비 $save_w, 높이$save_h 크롭 리사이즈, 전체 워터마크 <br />
<img src='$path_save_file'> <br /><br />
";
flush();
?>
이상으로 이미지 썸네일 처리에 대한 1차적인 내용은 마칩니다.
앞으로 진행될 내용은 이미지에 점을 찍거나 선을 긋거나 박스를 그리거나 박스안에 색을 집어넣거나 하는등의 처리를 다루어 볼까 합니다.
댓글 25개
게시글 목록
| 번호 | 제목 |
|---|---|
| 13686 | |
| 13683 | |
| 21003 | |
| 13680 |
jQuery
jQuery로 만든 라이트 박스...
2
|
| 25150 | |
| 25143 | |
| 20981 | |
| 13679 | |
| 13678 |
기타
프로세스 빨리 종료하기
|
| 13677 | |
| 13675 |
JavaScript
리눅스 서버의 BIOS 및 시스템 정보 확인하기
1
|
| 13674 | |
| 29483 |
HTML
[TIP] 퀵메뉴 스크립트
1
|
| 13672 | |
| 13671 |
jQuery
성능향상을 위한 팁-9
|
| 13670 |
기타
성능향상을 위한 팁-8
|
| 13669 |
기타
성능향상을 위한 팁-7
|
| 29482 |
HTML
성능향상을 위한 팁-6
|
| 13668 |
JavaScript
성능향상을 위한 팁-5
|
| 13666 | |
| 29481 |
HTML
성능향상을 위한 팁-3
|
| 29480 |
HTML
성능향상을 위한 팁-2
|
| 13665 |
JavaScript
성능향상을 위한 팁-1
|
| 13664 |
정규표현식
자바스크립트 팁 (고급 팁)
|
| 13663 |
기타
이미지 바꾸기 이벤트
|
| 13662 | |
| 13661 |
JavaScript
Javascript 정의 팁입니다.
|
| 25124 | |
| 25116 | |
| 20970 | |
| 13660 |
JavaScript
adsc
|
| 13658 |
기타
pause 함수
1
|
| 29479 |
HTML
URL Encode & Decide
|
| 13655 | |
| 13650 |
jQuery
jQuery.each break continue
4
|
| 13648 | |
| 13647 | |
| 13646 |
Flash
insert에서 where 사용하기
|
| 29478 |
HTML
테이블 복사
|
| 13645 |
PHP
3.0
|
| 13643 |
정규표현식
정규식 온라인 테스트 사이트
1
|
| 13642 | |
| 13640 |
MySQL
박씨빌더 에러문에 대해서 질문요
1
|
| 13637 |
jQuery
이미지 마우스 온 버블 이펙트 2
2
|
| 13636 |
jQuery
cheat sheet 1.4 and so on
|
| 13635 | |
| 13634 | |
| 29476 | |
| 13633 |
JavaScript
수행시간 체크
|
| 13632 |
JavaScript
거래명세표나 견적서에 합계금액 한글로 표시.
|
| 13630 | |
| 29473 | |
| 13624 |
jQuery
플리커 이미지 랜덤 출력하기
5
|
| 13620 |
jQuery
jquery 오른쪽 마우스금지
3
|
| 13582 | |
| 13556 | |
| 29472 | |
| 29471 | |
| 13555 |
JavaScript
php > 내가 만들어 쓰는 함수 > 이미지에 워터마크 처리하기
|
| 13554 | |
| 13553 |
jQuery
jQuery + 정규표현식( 이메일검증법)
|
| 13552 |
MySQL
CentOS 5.4 에서 APM 설치
|
| 13551 | |
| 13550 | |
| 13546 | |
| 13545 | |
| 13544 | |
| 29470 | |
| 13541 | |
| 13540 | |
| 13538 | |
| 13535 | |
| 29466 | |
| 13533 | |
| 29463 | |
| 13532 |
JavaScript
입력값이 한글이 포함되어있는지 체크
|
| 13531 |
JavaScript
영문과 숫자로만 이루어졌는지 체크
|
| 13529 | |
| 29462 |
HTML
로컬 텍스트 엑셀 파일 읽기/쓰기
|
| 13528 | |
| 29459 | |
| 29458 |
HTML
숫자만 입력할수있게...
|
| 13527 | |
| 13526 | |
| 13525 | |
| 13523 | |
| 13522 |
Flash
플래시를 이용한 비쥬얼한 정규식 프로그램
|
| 13512 |
JavaScript
PHP입문부터 기초까지?;;;;;;; - 4편
9
|
| 13510 | |
| 13507 | |
| 13498 |
MySQL
[보안] MD5 해독 불능 팁
8
|
| 29452 | |
| 13492 | |
| 13487 | |
| 29450 | |
| 13480 |
JavaScript
PHP입문부터 기초까지?;;;;;;; - 2편
6
|
| 13474 |
jQuery
jquery로 label값 정렬하기...
5
|
| 13460 |
JavaScript
PHP입문부터 기초까지?;;;;;;; - 1편
13
|
| 13457 | |
| 29447 |
image_proc.function.php
댓글 작성
댓글을 작성하시려면 로그인이 필요합니다.
로그인하기