종합 썸네일 함수 만들기 > 개발강좌

매출이 오르면 내리는 수수료! 지금 수수료센터에서 전자결제(PG)수수료 비교견적 신청해 보세요!

개발강좌

프로그램 강좌 :
1. 유창화님의 썸네일, 정규표현식, 이미지관련 강좌
2. Sphinx 검색엔진을 이용한 도로명 주소 검색 시스템 구축

종합 썸네일 함수 만들기 정보

썸네일 종합 썸네일 함수 만들기

첨부파일

image_proc.function.php (23.0K) 86회 다운로드 2013-01-14 16:14:36
test16.php (8.9K) 37회 다운로드 2013-01-14 16:14:36

본문

대단할것은 없는 강좌이지만,
제 강좌를 출처를 밝히고 외부로 퍼가는 것은 허용하지만,
다른 강좌의 자료나 책의 자료로 사용되거나 부분적인 인용은 허용하지 않습니다.

강좌는 php 5. 대를 기준으로 하며, 기본적으로 GD 나 FREETYPE 등의 기본적인 라이브러리는 연동되었다는 가정하에 진행합니다.
예전 개발 환경에서는 GD 나 FREETYPE 등의 연동여부나 php버젼들을 따졌지만, 요새 개발 환경에서는 대부분 기본적으로 다 제공하기 때문에 그렇습니다.

종합 썸네일 함수 만들기
  
  이전까지는 이미지의 리사이즈, 크롭, 워터마크에 대해 다루었습니다.
이번에는 이전에 다뤗던 내용을 모두 포함하는 종합적인 썸네일 함수를 만들어 보겠습니다.

물론, 이번에 만드는 것이 최종 완성판은 아니며, 나중에 내용을 더 진행하면 수정 보완됩니다.

함수를 만들기 이전에 이함수가 어떤 처리를 하는지 대략적인 정리를 해보고자 합니다.

처리과정>
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['변수명'] = '값'; 을 통하여 기본값을 변경할수가 있습니다.

사실, 이러한 부분은 클래스로 만들어서 하면 좀 더 깔끔하고 사용하기도 나아보입니다. 하지만, 강좌의 난이도도 있고 또 php4와 php5 의 클래스 문법차이가 심하기 때문에 더 혼란을 가져올수도 있는 부분이 있습니다. 나중에 클래스 강좌를 하게 된다면 썸네일 클래스를 다뤄보도록 하겠습니다.


아래의 예제를 확인하여 이 썸네일 함수의 사용법을 익혀보도록 합니다.

예제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();

?>

  
  
 
추천
2

댓글 1개

전체 103
개발강좌 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT