php > 내가 만들어 쓰는 함수 > 워터마크 함수 기능 보강 및 종합 썸네일함수 버그 수정 > 개발자팁

개발자팁

개발과 관련된 유용한 정보를 공유하세요.
질문은 QA에서 해주시기 바랍니다.

php > 내가 만들어 쓰는 함수 > 워터마크 함수 기능 보강 및 종합 썸네일함수 버그 수정 정보

기타 php > 내가 만들어 쓰는 함수 > 워터마크 함수 기능 보강 및 종합 썸네일함수 버그 수정

첨부파일

image_proc.function.php (24.0K) 315회 다운로드 2010-03-01 21:55:34

본문

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

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

php > 내가 만들어 쓰는 함수 > 워터마크 함수 기능 보강 및 종합 썸네일함수 버그 수정

이전에는 종합 썸네일 함수를 만들어 보았습니다.
이번에는 워터마크 함수의 기능 보강과 종합 썸네일 함수의 버그을 수정해 보겠습니다.

기존 워터마크 함수는 투명 이미지는 사용할수 없었습니다.
이유는 선명도($sharpness) 때문입니다. 투명이미지 이기 때문에 선명도를 줄수 없기 때문입니다.
그래서 php의 내장함수인 imagecopymerge 는 불투명 이미지로 간주하고 이미지를 처리하기 때문에 불투명 이미지를 사용할 경우에는 불투명 하게 제대로 썸네일이 처리 되지 않았습니다.

좀 더 유연한 워터마크의 처리를 위해서 선명도가 100 일 경우에는 imagecopymerge 대신 imagecopyresampled 를 사용하여 투명이미지를 워터마크로 사용할수 있도록 처리하겠습니다.

예제1 : proc_watermark 수정

function proc_watermark($src, $src_w, $src_h, $path_mark_file, $pos, $sharpness, $padding=0){

  if (empty($src))  {//원본의 리소스 id 가 빈값일 경우

    $GLOBALS['errormsg'] = '원본 리소스가 없습니다.';

    return false;
  }


  //정수형이 아니라면 정수형으로 강제 형변환
  if (!is_int($src_w)) settype($src_w, 'int');
  if (!is_int($src_h)) settype($src_h, 'int');
  if (!is_int($sharpness)) settype($sharpness, 'int');
  if (!is_int($padding)) settype($padding, 'int');



  if ($src_w < 1 || $src_h < 1){//원본의 너비와 높이가 둘중에 하나라도 0보다 큰 정수가 아닐경우

    $GLOBALS['errormsg'] = "원본의 너비와 높이가 0보다 큰 정수가 아닙니다. ($src_w, $src_h)";

    return false;
  }



  if (empty($path_mark_file)) {//워터마크 이미지 경로값이 없다면

    $GLOBALS['errormsg'] = '워터마크 이미지경로값이 없습니다.';

    return false;
  }

  list($mark, $mark_w, $mark_h) = get_image_resource_from_file ($path_mark_file);

  if (empty($mark)) return false;//에러 메시지 작성은 get_image_resource_from_file 내부에서 함



  if ($src_w < $mark_w + (2 * $padding)) {//원본너비가 워터마크 이미지 너비보다 작으면 워터마크 처리 안함, return true;

    return true;
  }

  if ($src_h < $mark_h + (2 * $padding)) {//원본높이가 워터마크 이미지 높이보다 작으면 워터마크 처리 안함, return true;

    return true;
  }



  if ($sharpness < 0 || $sharpness > 100) $sharpness = 30;//$sharpness 가 지정된 범위 이상의 숫자라면 30으로 강제 재설정

  if ($padding < 0 || $padding > $mark_w || $padding > $mark_h) $padding = 10;//$padding이 0보다 작거나 워터마크의 너비나 높이보다 크면 10으로 강제 재설정



  if ($pos == 10) {//워터마크 전체로 찍을 경우의 처리

    $w_max = $src_w - $padding;
    $h_max = $src_h - $padding;

    //x 축으로 워터마크를 몇번 찍을 것인지 계산, 패딩을 더해서 나눔
    $x_max = ceil($w_max / ($mark_w + $padding));

    //y 축으로 워터마크를 몇번 찍을 것인지 계산
    $y_max = ceil($h_max / ($mark_h + $padding));

    //루프를 돌리면서 워터마크를 찍음
    for($x = 0; $x < $x_max; $x++){

      for($y = 0; $y < $y_max; $y++){

        //기준점을 구한다.
        $src_x = $x * ($mark_w + $padding) + $padding;
        $src_y = $y * ($mark_h + $padding) + $padding;

        $copy_w = $mark_w;
        $copy_h = $mark_h;

        if ($src_x + $mark_w > $w_max) $copy_w = $w_max - $src_x;
        if ($src_y + $mark_h > $h_max) $copy_h = $h_max - $src_y;

        if ($sharpness != 100) {//선명도가 100 이 아닐경우에는 선명도를 사용할수 있는 imagecopymerge 사용

          $result_watermark = imagecopymerge($src, $mark, $src_x, $src_y, 0, 0, $copy_w, $copy_h, $sharpness);
        }
        else {//선명도가 100 일 경우에는 투명이미지를 사용할수 없는 imagecopyresampled 사용

          $result_watermark = imagecopyresampled ($src , $mark , $src_x, $src_y, 0 , 0 , $copy_w, $copy_h , $copy_w, $copy_h);
        }

        if ($result_watermark === false) {

          @imagedestroy($mark);

          $GLOBALS['errormsg'] = "워터마크 처리에 실패하였습니다.";

          return false;
        }
      }
    }
  }
  else {//워터마크를 하나만 찍을 경우에의 처리

    //워터마크의 복사할 너비, 높이 기본값 지정
    $copy_w = $mark_w;
    $copy_h = $mark_h;

    switch($pos){

      case 1 : //상단 왼쪽

        $src_x = 0 + $padding;
        $src_y = 0 + $padding;

        break;

      case 2 : //상단 오른쪽

        $src_x = $src_w - $mark_w - $padding;
        $src_y = 0 + $padding;

        break;

      case 3 : //하단 왼쪽

        $src_x = 0 + $padding;
        $src_y = $src_h - $mark_h - $padding;

        break;

      case 4 : //하단 오른쪽

        $src_x = $src_w - $mark_w - $padding;
        $src_y = $src_h - $mark_h - $padding;

        break;

      case 5 : //중앙

        $src_x = ceil(($src_w - $mark_w) / 2);
        $src_y = ceil(($src_h - $mark_h) / 2);

        break;

      default : // 그 밖의 값은 전부 상단 왼쪽 치부

        $src_x = 0 + $padding;
        $src_y = 0 + $padding;

    }

    if ($sharpness != 100) {//선명도가 100 이 아닐경우에는 선명도를 사용할수 있는 imagecopymerge 사용

      $result_watermark = imagecopymerge($src, $mark, $src_x, $src_y, 0, 0, $copy_w, $copy_h, $sharpness);
    }
    else {//선명도가 100 일 경우에는 투명이미지를 사용할수 없는 imagecopyresampled 사용

      $result_watermark = imagecopyresampled ($src , $mark , $src_x, $src_y, 0 , 0 , $copy_w, $copy_h , $copy_w, $copy_h);
    }

    @imagedestroy($mark);

    if ($result_watermark === false) {

      $GLOBALS['errormsg'] = "워터마크 처리에 실패하였습니다.";

      return false;
    }
  }

  return true;
}


이전시간에 만들어 보았던 종합 썸네일 테스트 함수인 thumnail_test1 은 약간의 버그가 있었습니다.
버그의 내용은 썸네일의 너비와 높이중 둘중 하나의 값이 0 일경우 내부적으로 정비율로 리사이즈하는 부분이 있는데, 리사이즈후 계산된 너비와 높이를 받아오지 않아서 워터마크가 작동하지 않는 부분이 있었습니다. 리사이즈나 크롭을 처리한후에 생성된 썸네일의 리소스로부터 다시 실제 너비와 높이를 받아오는 부분을 넣음으로서 이 버그를 해결 하였습니다.

예제2 : thumnail_test1 수정

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;

  $save_w = imagesx($dst);//생성된 썸네일 리소스에서 실제 너비를 구한다.
  $save_h = imagesx($dst);//생성된 썸네일 리소스에서 실제 높이를 구한다.

  //워터마크 이미지가 파일일 경우, 워터마크 처리
  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;
}


썸네일 리소스로부터 실제 너비와 높이를 구할때 imagesx 와 imagesy php 내장함수가 사용되었습니다.
이 두 함수는 각각 이미지 리소스로 부터 너비와 높이를 구해주는 함수입니다.


다음 예제를 통해 투명이미지의 워터마크 사용과 불투명 이미지의 워터마크 사용을 처리해 보도록 하겠습니다.

예제3 : test17.php

<?php

//이미지 처리 함수 인클루드
include_once 'lib/image_proc.function.php';



$path_src_file = 'sample_image/test.jpg';//원본파일
$path_mark_file1 ='sample_image/php.png';//워터마크에 사용할 파일, 불투명
$path_mark_file2 ='sample_image/noback.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을 너비 300 정비율 리사이즈, 불투명 워터마크 사용
$save_w = 300;
$save_h = 0;

$options = Array();//옵션설정

$options['watermark_path_file'] = $path_mark_file1;//워터마크 이미지
$options['watermark_sharpness'] = 50;
$options['watermark_pos'] = 10;

$path_save_file = 'sample_image/test_' . $save_w . 'X' . $save_h . '_1.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 으로 정비율 리사이즈, 불투명 워터마크 사용 <br />
<img src='$path_save_file'> <br /><br />
";
flush();



//$path_400X0_file을 너비 300 정비율 리사이즈, 투명 워터마크 사용
$save_w = 300;
$save_h = 0;

$options = Array();//옵션설정

$options['watermark_path_file'] = $path_mark_file2;//워터마크 이미지
$options['watermark_sharpness'] = 100;
$options['watermark_pos'] = 10;

$path_save_file = 'sample_image/test_' . $save_w . 'X' . $save_h . '_2.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 으로 정비율 리사이즈, 투명 워터마크 사용 <br />
<img src='$path_save_file'> <br /><br />
";
flush();



//$path_400X0_file을 높이 300 정비율 리사이즈, 불투명 워터마크 사용
$save_w = 0;
$save_h = 300;

$options = Array();//옵션설정

$options['watermark_path_file'] = $path_mark_file1;//워터마크 이미지
$options['watermark_sharpness'] = 50;
$options['watermark_pos'] = 10;

$path_save_file = 'sample_image/test_' . $save_w . 'X' . $save_h . '_1.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 으로 정비율 리사이즈, 불투명 워터마크 사용 <br />
<img src='$path_save_file'> <br /><br />
";
flush();



//$path_400X0_file을 높이 300 정비율 리사이즈, 투명 워터마크 사용
$save_w = 0;
$save_h = 300;

$options = Array();//옵션설정

$options['watermark_path_file'] = $path_mark_file2;//워터마크 이미지
$options['watermark_sharpness'] = 100;
$options['watermark_pos'] = 10;

$path_save_file = 'sample_image/test_' . $save_w . 'X' . $save_h . '_2.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 으로 정비율 리사이즈, 투명 워터마크 사용 <br />
<img src='$path_save_file'> <br /><br />
";
flush();



//$path_400X0_file을 너비 300, 높이 300 강제 리사이즈, 불투명 워터마크 사용
$save_w = 300;
$save_h = 300;

$options = Array();//기본옵션
$options['watermark_path_file'] = $path_mark_file1;//워터마크 이미지
$options['watermark_sharpness'] = 50;
$options['watermark_pos'] = 10;

$path_save_file = 'sample_image/test_' . $save_w . 'X' . $save_h . '_1.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['watermark_path_file'] = $path_mark_file2;//워터마크 이미지
$options['watermark_sharpness'] = 100;
$options['watermark_pos'] = 10;

$path_save_file = 'sample_image/test_' . $save_w . 'X' . $save_h . '_2.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();

?>

image_proc.function.php사용자 삽입 이미지사용자 삽입 이미지
[이 게시물은 관리자님에 의해 2011-10-31 17:16:08 PHP & HTML에서 이동 됨]
추천
6

댓글 37개

워터마크가 1,2는 제대로 작동되는데,
3,4,5 는 높이가 일정정도 아래로 나옵니다.

그래서 그런지 선별적으로 워터마크가 만들어지기도 하고, 그렇지 않기도 합니다.

http://ongga.com/bbs/board.php?bo_table=basicU_N&wr_id=2
는 $options['watermark_pos'] = 3; 입니다.

이 게시판  전체의 설정이기도 합니다.
3,4,5로 할 때에는 워터마크가 있는 것도 있고, 없는 것도 있습니다.
감사합니다.

썸네일의 위치와 크기설정하는 것을 보면
나타나는 결과는 이전과 같으면서도,
스킨을 만들고, 게시판을 사용하기가
http://sir.co.kr/bbs/board.php?bo_table=tip_php&wr_id=1087&page=4
보다 훠얼씬 단순하면서도 사용하기는 더 훠어얼씬 좋습니다.

이전 스킨을 아주 조금 손봐도 제대로 작동합니다.

정말 굳입니다.


사용예
http://ongga.com/bbs/board.php?bo_table=basicU_N
http://ongga.com/bbs/board.php?bo_table=U_N_html
만족 하신다는 기분이 좋네요.

나중에 좀 더 업그레이드 될수도 있어요

뭐 또 모르죠 제가 기분좋으면 새로운 팁도 알려드릴지도..... ㅎㅎ
유창하님썸을 사용하기까지는 조금 시간이 걸리지만,
일단 사용법을 익히기만 하면 상당히 편리하더군요.
비행기타는 고난도의 연습까지야 필요없지만 자전거타는 연습정도는 필요한 것 같아요.
죄송합니다. 유창화님!!!

링크시켜드린 게시판에 좀 문제가 있는 같아요.

썸네일을 삭제하거나 글을 새로 올렸을 때에, 처음에는 엑박이 뜹니다.  다시고침을 해야만이 그림이 보입니다.

뷰화면을 아래처럼 했습니다.
사용법이 맞는가요?
------------------------
$image = $view[file][$i][file];

if (preg_match("/\.(gif|jpg|png)$/i", $image)) {

$thumbsource = $data_path . '/' . $image;

$options = Array();//옵션설정

$path_mark_file ="$g4[path]/img/watermark.png";//워터마크에 사용할 파일

$options['watermark_path_file'] = $path_mark_file;//워터마크 이미지
$options['watermark_sharpness'] = 100;
$options['watermark_pos'] = 4;

$thumb = $thumb_path . '/' . $thumb_w . 'X' . $thumb_h . '_' . 'watermark_' . $image ;

if (!file_exists($thumb)){

$thumb = thumnail_test1($thumbsource, $thumb, $thumb_w, $thumb_h, $options);

if (empty($result)) die($GLOBALS['errormsg'] . "<br />\n");
}
그리구...
원격이미지 썸네일을 여기에 추가 안되나요?

이부분은 잃어버려서는 안될 것 같아요.
에딛그림때문에라도 게속 사용하도록 해야 때가되면 보편화될 수 있다고 봅니다.
글세요 소스상에서는 이상이 없어보입니다.

맨마지막에 } 없는것 빼고는요.

의심되는 부분이라면 해당 소스가 이미지를 출력하는 부분위에 있어야 하는데 아래에 있다면 그럴수 있겟네요.

원격이미지는 나중에 추가될거에요.

강좌에 맞춰서 해야 해서요.
와~~~~~ 이제 100% 완벽하게 적용됩니다.
100% 완벽하게 작동합니다.

사용예
http://ongga.com/bbs/board.php?bo_table=basicU_N
최신글에서도 크랍설정이 원활하게 잘 돌아갑니다.
일괄적인 크랍설정이 잘 될 뿐만 아니라 , 옵션을 사용하면 같은 스킨으로 다양한 크랍을 사용할 수 있습니다.
http://ongga.com/index9.php

문제가 있습니다.
그누보드에 기본으로 깔리는 gnu4/lib/latest.lib.php  에 $options 를 이미 사용하고 있습니다.
$result = thumnail_test1($path_src_file, $path_save_file, $save_w, $save_h, $options);
에서 $options  를 $option_array 이렇게 하라는 말씀인가요?

음음... 이상이 생기는대요..
function latest($skin_dir="", $bo_table, $rows=10, $subject_len=70, $options="", $options1="",  $options2="")
이렇게 하고,

최신글스킨에서는 $options 이 중복사용되지 않게 하니 됩니다.
음...

제 말뜻을 잘 모르시는듯.

이상이 생길 이유가 없습니다.

함수의 인자는 정해진 갯수와 형태만 맞으면 됩니다.

넘길때의 변수명은 상관없습니다.

함수를 수정하는것이 아니라 함수인자를 $options_array와 같이 다른 이름으로 넘기면 됩니다.
죄송합니다.
너무 화내지 마세요....

스킨에서 줄수조정하는대에 $options 이런 단어가 사용되고,
썸네일설정부분에서도 $result = thumnail_test1($path_src_file, $path_save_file, $save_w, $save_h, $options);  에서 $options 가 사용되면 줄수가 분명히 제대로 작동하질 않습니다.
여러번 확인했어요.

제 생각으로는 저의 결과물이나 유창화님의 가르침이나 같다고 생각됩니다.
죄송합니다. 주제넘게 굴어서요.
최신글 리브화일이고요
-------------------------
function latest2($skin_dir="", $bo_table, $rows=10, $subject_len=70, $options="", $options1="", $options2="")
---------------------------
여기서 $options="" 부분은 여러사람들의 사용을 고려해서 그대로 두고자 한 것입니다.



스켄에서는
----------------------
 echo "<table border='0' cellspacing='5' cellpadding='0' align='center'>";
 echo "<tr>";

for ($k=0; $one_row = sql_fetch_array($one_result); $k++)
{
    if ($k && $k%$options1==0)
{
        echo "</tr><tr>";
}

$image = $one_row[bf_file]; // 첫번째 파일이 이미지라면

if (preg_match("/\.(gif|jpg|png)$/i", $image))
{

$save_w = 150; // 썸네일 넓이
$save_h = 100; // 썸네일 높이

$options['crop_use'] = 1;

if ($options2 ==1){ $save_h = 0;}
if ($options2 ==2){ $save_w = 0;}
if ($options2 ==3){
$options['crop_pos_width'] = 2; // 1 좌, 2 가운데, 3 우
$options['crop_pos_height'] = 1; // 1 상, 2 중, 3 하
}
if ($options2 ==4){
$options['crop_pos_width'] = 2; // 1 좌, 2 가운데, 3 우
$options['crop_pos_height'] = 2; // 1 상, 2 중, 3 하
}


$path_src_file = "$g4[path]/data/file/$bo_table/$image";//원본파일
$path_save_file = "$g4[path]/data/file/$bo_table/thumb/" . $save_w . 'X' . $save_h . '_' . $options2 . '_e' . $image;

if (!file_exists($path_save_file)) {

$result = thumnail_test1($path_src_file, $path_save_file, $save_w, $save_h, $options);

if (empty($result)) die($GLOBALS['errormsg'] . "<br />\n");

flush();
}

    echo "<td width='{$save_w}+10' height='{$save_h}+10' align='center' valign='middle' style='padding:0; border:1 solid #494134;'>";
    echo "<a href='$g4[bbs_path]/board.php?bo_table=$bo_table&wr_id=$one_row[wr_id]' onfocus='this.blur()'><img src='$path_save_file' alt='{$list[$i][subject]}' border='0'></a>";
    echo "</td>";
//    echo "<br><a href='{$list[$i][href]}'>{$list[$i][subject]}</a> <font color=#5A99DE>/</font> <a href='{$list[$i][ca_name_href]}'><font color=#cccccc>{$list[$i][ca_name]}</font></a>";
}
}

// 나머지 td

if ($cnt)
{
$cnt = $k%$options1;
    for ($k=$cnt; $k<$options1; $k++)
{
        echo "<td width='{$thumb_width}+10' height='1'>&nbsp;</td>";
}
}
echo "</tr></table>";
-----------------------
결과물은 http://ongga.com/index7.php 입니다.
갘은 게시판에 대한 세개의 최신글인대,
같은 최신글스킨으로 세가지의 옵션을 사용한 것입니다.


이런 식으로 처리했어요.
원래대로 한다면
$cnt = $k%$options1;
    for ($k=$cnt; $k<$options1; $k++)
이런 부분들이 다
$cnt = $k%$options;
    for ($k=$cnt; $k<$options; $k++) 
으로 사용되어집니다.
그러면 줄수에 문제가 생기드라고요..

여기서 함수인자를 다른 이름으로 넘긴다는 말이 어덯게하라는 것인가요?
주제 넘게 굴다니요......ㅠㅠ

제말은 제 말뜻을 잘 모르신다는 뜻이에요.

이렇게만 가지고 알수 없으니, 함수부분 전체랑, 스킨부분 전체랑 올려보세요
썸네일에 관해서는 최신글에서도 세발자전거 타다가 두발자전거 타는 기분입니다.
그것도 아주 고급스러운 자전거요....
옵션이라는 방식이 아주 좋은 쿠션같아요.
스킨에서도 그 옵션중 어던 것을 사용하는냐 여부를 결정할 수 있고요..
유창화님, 답변 늦어서 죄송합니다.
제가 응용하기 좋게 단순한 것으로 다시 올렸습니다.


최신글리브화일입니다.
-----------------------
<?
if (!defined('_GNUBOARD_')) exit;

// 최신글 추출
function latest($skin_dir="", $bo_table, $rows=10, $subject_len=70, $option1="", $option2="")
{
    global $g4;

    if ($skin_dir)
        $latest_skin_path = "$g4[path]/skin/latest/$skin_dir";
    else
        $latest_skin_path = "$g4[path]/skin/latest/basic";

    $list = array();

    $sql = " select * from $g4[board_table] where bo_table = '$bo_table'";
    $board = sql_fetch($sql);

    $tmp_write_table = $g4['write_prefix'] . $bo_table; // 게시판 테이블 전체이름
    //$sql = " select * from $tmp_write_table where wr_is_comment = 0 order by wr_id desc limit 0, $rows ";
    // 위의 코드 보다 속도가 빠름
    $sql = " select * from $tmp_write_table where wr_is_comment = 0 order by wr_num limit 0, $rows ";
    //explain($sql);
    $result = sql_query($sql);
    for ($i=0; $row = sql_fetch_array($result); $i++)
        $list[$i] = get_list($row, $board, $latest_skin_path, $subject_len);
   
    ob_start();
    include "$latest_skin_path/latest.skin.php";
    $content = ob_get_contents();
    ob_end_clean();

    return $content;
}
?>
--------------------

아래는 최신글스킨입니다
--------------------
<?
if (!defined("_GNUBOARD_")) exit; // 개별 페이지 접근 불가
$latest_img    = "$g4[path]/img/latest/";

// 썸네일방식은 유창화님의 소스.

include_once "$g4[path]/lib/image_proc.function.php";

//경로 변수 설정
$path_data = $g4['path'] . '/data/file/' . $bo_table;
$path_data_thumb = $path_data . '/thumb';

//디렉토리 생성 여부 확인 및 생성, 퍼미션 조정
if (!is_dir($path_data_thumb)){

  @mkdir($path_data_thumb, 0707);
  @chmod($path_data_thumb, 0707);
}
?>

<STYLE>P.BigFirst:first-letter { color:red; font-size: 200%; float: left; line-height:1.2em; padding:7 7 7 3; }</STYLE>

<table width=100% cellpadding=0 cellspacing=3 style="border:1 solid #FFCC00;">
<tr>
<td width=2></td>
    <td bgcolor="#A7CE31" width="10"></td>
<td height=17 valign="bottom">&nbsp;&nbsp;
<a href='<?=$g4[bbs_path]?>/board.php?bo_table=<?=$bo_table?>' style="font-size:13px;text-decoration:none;"><b><?=$board[bo_subject]?></b></a>
</td>
</tr>
</table>
<table width=100% border='0' cellspacing='0' cellpadding='0'>
<?
for ($i=0; $i<count($list); $i++)
{

$letters1 = '150'; // 그림있을 경우 글자수(아래처럼 적당한 숫자가능)
$letters2 = '200'; // 그림없을 경우 글자수

if($i >=0 && $i<2) {

//첨부파일1번이 있다면 우선사용합니다.

$path_save_file = '';

$image = $list[$i]['file'][0]['file'];  //첫번째 이미지 파일로 지정
if (preg_match("/\.(gif|jpg|png)$/i", $image))
{

$save_w = 120; // 썸네일 넓이
$save_h = 80; // 썸네일 높이

$options['crop_use'] = 1;

if ($option2 ==1){ $save_h = 0;}
if ($option2 ==2){ $save_w = 0;}
if ($option2 ==3){
$options['crop_pos_width'] = 2; // 1 좌, 2 가운데, 3 우
$options['crop_pos_height'] = 1; // 1 상, 2 중, 3 하
}
if ($option2 ==4){
$options['crop_pos_width'] = 2; // 1 좌, 2 가운데, 3 우
$options['crop_pos_height'] = 2; // 1 상, 2 중, 3 하
}


$path_src_file = "$g4[path]/data/file/$bo_table/$image";//원본파일
$path_save_file = "$g4[path]/data/file/$bo_table/thumb/" . $save_w . 'X' . $save_h . '_' . $option2 . '_' . $image;

if (!file_exists($path_save_file)) {

$result = thumnail_test1($path_src_file, $path_save_file, $save_w, $save_h, $options);

if (empty($result)) die($GLOBALS['errormsg'] . "<br />\n");

flush();
}
}

    $wr_content = preg_replace("/<(.*?)\>/"," ",$list[$i][wr_content]);
$wr_content = preg_replace("/&nbsp;/"," ",$wr_content);
$wr_content = str_replace("//##", " ", $wr_content);
$wr_content1 = cut_str(get_text($wr_content), $letters1, '…');
$wr_content2 = cut_str(get_text($wr_content), $letters2, '…');//본문 글 줄이는 함수
$href = $list[$i]['href'];
$num = $list[$i][num];

if (file_exists($path_save_file)) {

echo "<tr><td style='padding:5;'>";
echo "<span style='float:left' style='padding:5 5 0 5;'>
<a href='{$list[$i][href]}'><img src='$path_save_file' border=0></a></span>
&nbsp;<img src='{$latest_skin_path}/img/icon_li.gif' border='0' align='absmiddle'>&nbsp;
<a href='{$list[$i][href]}' style='font-size:10px; text-decoration:none;'><b>{$list[$i][subject]}</b></a>";

if ($list[$i]['comment_cnt']) {
echo " <a href=\"{$list[$i]['comment_href']}\"><span style='font-family:돋움; font-size:8px; color:#9A9A9A;'>{$list[$i]['comment_cnt']}</span></a>";
echo " " . $list[$i]['icon_new'];
echo " " . $list[$i]['icon_file'];
echo " " . $list[$i]['icon_link'];
echo " " . $list[$i]['icon_hot'];
echo " " . $list[$i]['icon_secret'];
}

echo "<br><div align='justify' style='margin-right:1; margin-left:1;'><a href='{$list[$i][href]}' style='font-size:10px; line-height:150%; text-decoration:none;'>$wr_content1</a>&nbsp;{$list[$i][datetime2]}</div>";
echo "</td></tr>";
echo "<tr><td height=1 background='$g4[path]/img/dot_line.gif'></td></tr>";
}
else {
echo "<tr><td  style='padding:5 0 0 5;'>";
echo "&nbsp; <img src='{$latest_skin_path}/img/icon_li.gif' border='0' align='absmiddle'>&nbsp;<a href='{$list[$i][href]}' style='font-size:10px;text-decoration:none;'><b>{$list[$i][subject]}</b></a>";

if ($list[$i]['comment_cnt']) {
echo " <a href=\"{$list[$i]['comment_href']}\"><span style='font-family:돋움; font-size:8pt; color:#9A9A9A;'>{$list[$i]['comment_cnt']}</span></a>";
echo " " . $list[$i]['icon_new'];
echo " " . $list[$i]['icon_file'];
echo " " . $list[$i]['icon_link'];
echo " " . $list[$i]['icon_hot'];
echo " " . $list[$i]['icon_secret'];
}

echo "</td></tr>";
echo "<tr><td style='padding:0 5 5 5;'>";
echo "<div align='justify' style='margin-right:1; margin-left:1;'><P class='BigFirst'><a href='{$list[$i][href]}' style='font-size:10px; line-height:170%; text-decoration:none;'>$wr_content2</a>&nbsp;{$list[$i][datetime2]}</P></div>";

/* echo "<div align='justify' style='margin-right:1; margin-left:1;'><a href='{$list[$i][href]}' style='font-size:10px; line-height:170%; text-decoration:none;'>$wr_content2</a>&nbsp;{$list[$i][datetime2]}</div>";
*/
echo "</td></tr>";
echo "<tr><td height=1 background='$g4[path]/img/dot_line.gif'></td></tr>";
}
}
else {
echo "<tr><td height='20' align='left'>";
echo "&nbsp; <img src='{$latest_skin_path}/img/icon_li.gif' border='0' align='absmiddle'>
<a href='{$list[$i][href]}' style='font-size:10px;text-decoration:none;'>{$list[$i][subject]}</a>&nbsp;&nbsp;{$list[$i][datetime2]}";

if ($list[$i]['comment_cnt']) {
echo " <a href=\"{$list[$i]['comment_href']}\"><span style='font-family:돋움; font-size:8pt; color:#9A9A9A;'>{$list[$i]['comment_cnt']}</span></a>";
echo " " . $list[$i]['icon_new'];
echo " " . $list[$i]['icon_file'];
echo " " . $list[$i]['icon_link'];
echo " " . $list[$i]['icon_hot'];
echo " " . $list[$i]['icon_secret'];
}
echo"</td></tr>";
}
}
?>
</table>
-------------------

index화일에서 아래와 같은 식으로 불러왔어요.
-------------------
<?
~~~~~~
echo latest('latest_morningWebU3N_2', "$row[bo_table]", '7', '25', '', '4', '', '');
?>

이런 식으로 불러왔어요.
좋은 가르침 부탁드립니다.
이건 제가 가르친다기 보다는 다 만들어 주는것 같은데....... ㅎㅎ
다음부터는 정말 사양합니다.

최신글 라이브러리는 그누보드의 원형을 유지하면 확장하도록 하는게 여러므로 좋습니다.
기존 $option1 는 원래대로 $options 로 바꾸었습니다.
기존 $option2 는 $thumb_rule 로 바꾸었습니다.
<?
if (!defined('_GNUBOARD_')) exit;

// 최신글 추출
function latest($skin_dir="", $bo_table, $rows=10, $subject_len=70, $options="", $thumb_rule="")
{
    global $g4;

    if ($skin_dir)
        $latest_skin_path = "$g4[path]/skin/latest/$skin_dir";
    else
        $latest_skin_path = "$g4[path]/skin/latest/basic";

    $list = array();

    $sql = " select * from $g4[board_table] where bo_table = '$bo_table'";
    $board = sql_fetch($sql);

    $tmp_write_table = $g4['write_prefix'] . $bo_table; // 게시판 테이블 전체이름
    //$sql = " select * from $tmp_write_table where wr_is_comment = 0 order by wr_id desc limit 0, $rows ";
    // 위의 코드 보다 속도가 빠름
    $sql = " select * from $tmp_write_table where wr_is_comment = 0 order by wr_num limit 0, $rows ";
    //explain($sql);
    $result = sql_query($sql);
    for ($i=0; $row = sql_fetch_array($result); $i++)
        $list[$i] = get_list($row, $board, $latest_skin_path, $subject_len);
 
    ob_start();
    include "$latest_skin_path/latest.skin.php";
    $content = ob_get_contents();
    ob_end_clean();

    return $content;
}
?>

최신글 스킨에서는
썸네일 만드는 규칙이 담긴 배열변수를 $thumb_options 로 담아서 처리했습니다.

스킨을 만들거나 할때는 나름데로의 규칙을 정해놓고 일관성있게 해야 합니다.
변수의 이름도 그렇고 처리방식도 그렇습니다.
그리고 중복으로 사용되는 부분을 없애야 프로그램이 최적화 됩니다.

<?
if (!defined("_GNUBOARD_")) exit; // 개별 페이지 접근 불가

// 썸네일방식은 유창화님의 소스.

include_once "$g4[path]/lib/image_proc.function.php";

//경로 변수 설정
$path_data = $g4['path'] . '/data/file/' . $bo_table;
$path_data_thumb = $path_data . '/thumb';

//디렉토리 생성 여부 확인 및 생성, 퍼미션 조정
if (!is_dir($path_data_thumb)){

  @mkdir($path_data_thumb, 0707);
  @chmod($path_data_thumb, 0707);
}

$thumb_print_num = 2;//썸네일 출력 갯수
$thumb_save_w = 120; // 썸네일 넓이
$thumb_save_h = 80; // 썸네일 높이

$letters1 = '150'; // 그림있을 경우 글자수(아래처럼 적당한 숫자가능)
$letters2 = '200'; // 그림없을 경우 글자수

?>

<STYLE>P.BigFirst:first-letter { color:red; font-size: 200%; float: left; line-height:1.2em; padding:7 7 7 3; }</STYLE>

<table width=100% cellpadding=0 cellspacing=3 style="border:1 solid #FFCC00;">
<tr>
<td width=2></td>
    <td bgcolor="#A7CE31" width="10"></td>
<td height=17 valign="bottom">&nbsp;&nbsp;
<a href='<?=$g4[bbs_path]?>/board.php?bo_table=<?=$bo_table?>' style="font-size:13px;text-decoration:none;"><b><?=$board[bo_subject]?></b></a>
</td>
</tr>
</table>
<table width=100% border='0' cellspacing='0' cellpadding='0'>
<?

$list_cnt = count($list);
for ($i = 0; $i < $list_cnt; $i++){ 

  if($i >= 0 && $i < $thumb_print_num) {//처음부터 $thumb_print_num 까지 썸네일 출력

    $wr_content = preg_replace("/<(.*?)\>/", ' ', $list[$i]['wr_content']);
    $wr_content = preg_replace("/&nbsp;/", ' ', $wr_content);
    $wr_content = str_replace("//##", ' ', $wr_content);

    $path_save_file = '';
    $name_src_file = $list[$i]['file'][0]['file'];  //첫번째 이미지 파일로 지정

    if (preg_match("/\.(gif|jpe?g|png)$/i", $name_src_file)){

      $thumb_options['crop_use'] = 1;

      if ($thumb_rule ==1){ $thumb_save_h = 0;} //너비 기준 정비율 리사이즈

      if ($thumb_rule ==2){ $thumb_save_w = 0;} //높이 기준 정비율 리사이즈

      if ($thumb_rule ==3){//너비 기준은 가운데, 높이 기준은 상단으로 크롭

        $thumb_options['crop_pos_width'] = 2; // 1 좌, 2 가운데, 3 우
        $thumb_options['crop_pos_height'] = 1; // 1 상, 2 중, 3 하
      }

      if ($thumb_rule ==4){//너비 기준은 가운데, 높이 기준은 중앙으로 크롭

        $thumb_options['crop_pos_width'] = 2; // 1 좌, 2 가운데, 3 우
        $thumb_options['crop_pos_height'] = 2; // 1 상, 2 중, 3 하
      }


      $path_src_file = $path_data . '/' . $name_src_file;//원본파일
      $path_save_file = $path_data_thumb . '/' . $thumb_save_w . 'X' . $thumb_save_h . '_' . $thumb_rule . '_' . $name_src_file;//썸네일 파일

      if (!file_exists($path_save_file)) {

        $result = thumnail_test1($path_src_file, $path_save_file, $thumb_save_w, $thumb_save_h, $thumb_options);

        //실패일경우는 굳이 스크립트를 종료할 필요는 없음
        //if (empty($result)) die($GLOBALS['errormsg'] . "<br />\n");
        //flush();
      }
    }

    if (file_exists($path_save_file)) {//썸네일이 존재할때의 출력

      $wr_content = cut_str(get_text($wr_content), $letters1, '…');

      echo "<tr><td style='padding:5;'>";
      echo "<span style='float:left' style='padding:5 5 0 5;'>
      <a href='{$list[$i][href]}'><img src='$path_save_file' border=0></a></span>
      &nbsp;<img src='{$latest_skin_path}/img/icon_li.gif' border='0' align='absmiddle'>&nbsp;
      <a href='{$list[$i][href]}' style='font-size:10px; text-decoration:none;'><b>{$list[$i][subject]}</b></a>";

      if ($list[$i]['comment_cnt']) {

        echo " <a href=\"{$list[$i]['comment_href']}\"><span style='font-family:돋움; font-size:8px; color:#9A9A9A;'>{$list[$i]['comment_cnt']}</span></a>";
        echo " " . $list[$i]['icon_new'];
        echo " " . $list[$i]['icon_file'];
        echo " " . $list[$i]['icon_link'];
        echo " " . $list[$i]['icon_hot'];
        echo " " . $list[$i]['icon_secret'];
      }

      echo "<br><div align='justify' style='margin-right:1; margin-left:1;'><a href='{$list[$i][href]}' style='font-size:10px; line-height:150%; text-decoration:none;'>$wr_content</a>&nbsp;{$list[$i][datetime2]}</div>";
      echo "</td></tr>";
      echo "<tr><td height=1 background='$g4[path]/img/dot_line.gif'></td></tr>";
    }
    else {//썸네일이 존재 하지 않을때의 출력

      $wr_content = cut_str(get_text($wr_content), $letters2, '…');

      echo "<tr><td  style='padding:5 0 0 5;'>";
      echo "&nbsp; <img src='{$latest_skin_path}/img/icon_li.gif' border='0' align='absmiddle'>&nbsp;<a href='{$list[$i][href]}' style='font-size:10px;text-decoration:none;'><b>{$list[$i][subject]}</b></a>";

      if ($list[$i]['comment_cnt']) {

        echo " <a href=\"{$list[$i]['comment_href']}\"><span style='font-family:돋움; font-size:8pt; color:#9A9A9A;'>{$list[$i]['comment_cnt']}</span></a>";
        echo " " . $list[$i]['icon_new'];
        echo " " . $list[$i]['icon_file'];
        echo " " . $list[$i]['icon_link'];
        echo " " . $list[$i]['icon_hot'];
        echo " " . $list[$i]['icon_secret'];
      }

      echo "</td></tr>";
      echo "<tr><td style='padding:0 5 5 5;'>";
      echo "<div align='justify' style='margin-right:1; margin-left:1;'><P class='BigFirst'><a href='{$list[$i][href]}' style='font-size:10px; line-height:170%; text-decoration:none;'>$wr_content</a>&nbsp;{$list[$i][datetime2]}</P></div>";

      /* echo "<div align='justify' style='margin-right:1; margin-left:1;'><a href='{$list[$i][href]}' style='font-size:10px; line-height:170%; text-decoration:none;'>$wr_content</a>&nbsp;{$list[$i][datetime2]}</div>";
      */
      echo "</td></tr>";
      echo "<tr><td height=1 background='$g4[path]/img/dot_line.gif'></td></tr>";
    }
  }
  else {

    echo "<tr><td height='20' align='left'>";
    echo "&nbsp; <img src='{$latest_skin_path}/img/icon_li.gif' border='0' align='absmiddle'>
    <a href='{$list[$i][href]}' style='font-size:10px;text-decoration:none;'>{$list[$i][subject]}</a>&nbsp;&nbsp;{$list[$i][datetime2]}";

    if ($list[$i]['comment_cnt']) {
    echo " <a href=\"{$list[$i]['comment_href']}\"><span style='font-family:돋움; font-size:8pt; color:#9A9A9A;'>{$list[$i]['comment_cnt']}</span></a>";
    echo " " . $list[$i]['icon_new'];
    echo " " . $list[$i]['icon_file'];
    echo " " . $list[$i]['icon_link'];
    echo " " . $list[$i]['icon_hot'];
    echo " " . $list[$i]['icon_secret'];
    }
    echo"</td></tr>";
  }
}

?>

모닝님에게 당부하고 싶은 말은 기초공부가 절실하십니다.
변수에 대한 이해같은것이 많이 부족해 보입니다.
기초를 조금만 익히신다면 더욱더 훌륭한 결과물이 나오지 싶습니다.
감사합니다.
앞으로 하나,둘 정도는 더 만들어주셔야 하지 않겠습니까? ㅋㅋㅋㅋ

정말 감사드립니다.
적용해본 후 다시 질문드리겠습니다.
http://ongga.com/index.php
잘 돌아갑니다.

$thumb_options['crop_use'] = 1;
저에게 핵심적인 문제는 여기였었군요...
['crop_use'], ['crop_pos_width'] ... 등등의 앞머리는 마음대로 바꾸고,

썸을 만들때 다시 
$result = thumnail_test1($path_src_file, $path_save_file, $thumb_save_w, $thumb_save_h, 앞머리);


감사합니다.



다른 것 사용후 다시 질문드릴게요.
지금 손보아(만들어?)주신 스킨의 경우,
리브화일의
function latest($skin_dir="", $bo_table, $rows=10, $subject_len=70, $options="", $thumb_rule="")
에서 $thumb_rule 를 $options 로 바꾸어 원래대로 
function latest($skin_dir="", $bo_table, $rows=10, $subject_len=70, $options="")
로 하고,


스킨에서도
$thumb_rule 를 $options 로 한 후


불러오기에서
latest('latest_morningWebU3N_2', "$row[bo_table]", '7', '25', '', '4');
가 아니라
latest('latest_morningWebU3N_2', "$row[bo_table]", '7', '25', '4');
로 했습니다.

정상적으로 작동합니다.


유창화님 가르침의 취지대로 한다면 이렇게 해도 전혀 무리가 안되는 것이지요?
이와 같이 해도 다른 최신글스킨도 정상작동합니다.
http://ongga.com/muzonU.php


뷰화면이나, 리스트에서나, 최신글에서나,$image = $one_row[bf_file] 이런 식으로 불러오는 곳에서도 유창화님의 썸네일은 잘 잘동합니다.
어떠한 상황에서도 작동가능하다는 생각이 듭니다.

그누보드 외에는 사용하질 않아서 잘 모르겠는데,
아마도 그누보드 외의 다른 보드에도 작동되리라 생각듭니다.


작동범위가 넓고,
스킨만드는 사람의 의도대로 썸크기와 위치가 자요롭고....얼쑤
사용법만 어느정도 익히면 사용하기 좋고......얼쑤

정말 좋습니다.


유창화님의 소스가 여러사람들에게 애용되리라 생각합니다.
거듭감사드립니다.



앞으로도 좋은 가르침 부탁드립니다.
만들어주지 마시고, 가르쳐주세요...ㅡ,.ㅡ(음)
그누보드3에도 잘 적용됩니다.
http://peace.biz/way/?doc=bbs/gnuboard.php&bo_table=Link_1

리스트와 뷰화면 모두 유창화썸네일로 작동합니다.
대단히 감사합니다.
뒤늦게 정독했습니다.

유창화님 라이브러리를 활용 latest 스킨에서
갤러리용 썸네일과 규격이미지를 동시에 생성하고
생성한 규격이미지(크롭 이미지사이즈)에 똑같은 크기의 png 투명 마스크를 씌웠습니다.

퀄리티 90%로 생성된 이미지도 사이즈가 크지않아서 더욱 좋습니다.
100% 만족한 결과를 얻었습니다.

latest_skin 옵션부분만 올려봅니다.
최신글 함수 수정없이 latest("jqmbgallery", "review", 16, 40,1);처럼 호출한 경우입니다.
참고로 생성한 규격과 똑같은 크기의 마스크를 덧씌울 경우 $options['watermark_padding'] = 0; 설정 필수입니다.

            // 썸네일과 규격파일 동시생성
            // 규격파일에는 투명 워터마크 씌움
            if (preg_match("/\.(jp[e]?g|gif|png)$/i", $filename) && file_exists($file))
            {
                // ----------------------------------- 썸네일
                $options = '';
                $options = Array(); // 옵션설정
                $options['crop_use'] = 1;
                if ($options ==1){ $tmp_thumb_height = 0;} //너비 기준 정비율 리사이즈
                if ($options ==2){ $tmp_thumb_width = 0;} //높이 기준 정비율 리사이즈
                if ($options ==3){ //너비 기준은 가운데, 높이 기준은 상단으로 크롭
                    $options['crop_pos_width'] = 2; // 1 좌, 2 가운데, 3 우
                    $options['crop_pos_height'] = 1; // 1 상, 2 중, 3 하
                }
                if ($options ==4){ //너비 기준은 가운데, 높이 기준은 중앙으로 크롭
                    $options['crop_pos_width'] = 2; // 1 좌, 2 가운데, 3 우
                    $options['crop_pos_height'] = 2; // 1 상, 2 중, 3 하
                }

                $save_thumb = $thumb_path.'/'.$tmp_thumb_width.'_'.$tmp_thumb_height.'_'.$filename;// 썸네일 파일

                if (!file_exists($save_thumb))
                {
                    $result = thumnail_test1($file, $save_thumb, $tmp_thumb_width, $tmp_thumb_height, $options);
                }

                // ----------------------------------- 규격 이미지
                $options = '';
                $options = Array();// 옵션설정

                $options['save_quality'] = 90; // 파일로 저장시 저장될 파일의 품질, 100 이하의 양의 정수만 사용, gif는 의미 없음
                //$options['save_force'] = 1; // 이미 동일한 경로에 동일이름의 파일이 존재할때의 처리 결정
                                                      // 0 이면 false 반환, 1 이면 더이상 실행안하고 true 반환, 2 이면 기존거는 지우고 새로 저장
                $options['crop_use'] = 1; // 크롭 사용 여부, 0 은 사용안함, 1은 사용함
                $options['crop_pos_width'] = 1; // 너비 기준으로 크롭할때 기준부위 결정, 1은 왼쪽, 2는 가운데, 3은 오른쪽
                $options['crop_pos_height'] = 1; // 높이 기준으로 크롭할때 기준부위 결정, 1은 상단, 2는 중단, 3은 하단

                $options['watermark_path_file'] = $mark_file;// 워터마크 이미지
                $options['watermark_pos'] = 5; // 1 은 상단 왼쪽, 2는 상단 오른쪽, 3은 하단 왼쪽, 4는 하단 오른쪽, 5는 중앙, 10 은 전체에 반복
                $options['watermark_sharpness'] = 100; // 워터마크의 선명도, 100 이하의 양의 정수만 사용
                                                                      // ==> 100 일경우에는 투명이미지 사용가능
                $options['watermark_padding'] = 0; // 워터마크의 여백, 0이상의 양의 정수
                                                                // 패딩의 크기는 워터마크이미지의 너비나 높이보다 클수 없음
                                                                // 원본과 같은 크기의 마스크를 씌울때 반드시 0으로 지정

                if ($options ==1){ $tmp_height = 0;} //너비 기준 정비율 리사이즈
                if ($options ==2){ $tmp_width = 0;} //높이 기준 정비율 리사이즈
                if ($options ==3){//너비 기준은 가운데, 높이 기준은 상단으로 크롭
                    $options['crop_pos_width'] = 2; // 1 좌, 2 가운데, 3 우
                    $options['crop_pos_height'] = 1; // 1 상, 2 중, 3 하
                }
                if ($options ==4){//너비 기준은 가운데, 높이 기준은 중앙으로 크롭
                    $options['crop_pos_width'] = 2; // 1 좌, 2 가운데, 3 우
                    $options['crop_pos_height'] = 2; // 1 상, 2 중, 3 하
                }

                $save_file = $thumb_path.'/'.$tmp_width.'_'.$tmp_height.'_'.$filename;// 규격 파일

                if (!file_exists($save_file))
                {
                    $result = thumnail_test1($file, $save_file, $tmp_width, $tmp_height, $options);
                }

            }
플록님!!!
플록님의 웹진에 지금도 감사하고 있습니다.

플록님!
이왕이면 만드신 최신글스킨을 스킨자료실에 올려주시지요...
단순히 인트로에 이미지 몇개 슬라이딩 시킬 목적으로 해본것입니다.
테두리와 중간에 들어간 로고등을 투명 png로 디자인하고 이미지는 특정게시판에서 가져오는 정도롤 생각하고 하는거라 스킨 자체는 별다를게 없습니다.
레이어로 할까 하는 생각을 가지고 있었는데 마침 유창화님 께서 공개해주신 라이브러리에 그 기능이 있어서 적용해보았는데 굉장히 좋군요.

http://www.studioif.kr 첫페이지에 테스트 중입니다.
보시면 외부 테두리와 중간에 글씨가 테스트로 만든 png24포맷의 투명 이미지입니다.
일단 급조해서 돌아가는 정도만 확인한 것입니다만, 정리되면 올리든지 하겠습니다.
전체 64
개발자팁 내용 검색

회원로그인

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