<?php #php##source###image####썸네일을 원본의 비율대로 생성하여 주는 함수 - gd를 이용 ?>
<?php
/*제작자 : 유창화
사용제한 : 사용은 자유롭습니다. 단, 강의나 책의 내용으로서 사용될 경우 허락을 받으셔야 합니다.*/
//모든 에러를 출력하도록 설정한다.
error_reporting(E_ALL);
//기본 함수 모음을 인클루드
define('YFUNCTION_INCLUDED', true);// 소스를 보여주기 위한 상수
include_once './Yfunction.php';
//처리시간 측정시작
$Ystarttime = Yget_microtime();
//썸네일 이미지 사이지 결정하여 썸네일 생성
//$src_file_size, $dest_file_size 이미지 정보를 담은 배열 0은 너비 1은 높이
function Ysumnail_rule($src_file, $dest_file, $src_file_size, $dest_file_size, $image_quality=90, $lib='gd'){
//생성도중 에러가 날수 있는 것들을 체크 하여 return false
if (!is_array($src_file_size) || !is_array($dest_file_size) || empty($src_file_size[0]) || empty($src_file_size[1]) || empty($dest_file_size[0]) || empty($dest_file_size[0])) {
return false;
}
//$lib 확인후 조건에 맞지 않으면 기본값 세팅
if (empty($lib) || ($lib != 'gd' && $lib != 'netpbm')) $lib = 'gd';
$rate = $src_file_size[1] / $src_file_size[0];
$temp[1] = (int)($dest_file_size[0] * $rate);
if ($dest_file_size[1] < $temp[1]) {
$rate = $src_file_size[0] / $src_file_size[1];
$dest_file_size[0] = (int)($dest_file_size[1] * $rate);
}
else{
$dest_file_size[1] = $temp[1];
}
//썸네일의 너비나 높이가 10 미만인것은 만들지 않는다.
if ($dest_file_size[0] < 10 || $dest_file_size[1] < 10) {
return false;
}
//썸네일 이미지가 원본이미지 크기보다 크게 설정되었을 경우, 원본이미지와 동일하게
if ($dest_file_size[0] > $src_file_size[0]) {
$dest_file_size = $src_file_size;
}
if ($lib == 'netpbm') return Ymake_sumnail_netpbm($src_file, $dest_file, $src_file_size, $dest_file_size, $image_quality);
else return Ymake_sumnail_gd($src_file, $dest_file, $src_file_size, $dest_file_size, $image_quality);
}
//섬네일 생성
function Ymake_sumnail_gd($src_file, $dest_file, $src_file_size, $dest_file_size, $image_quality=90){
//생성도중 에러가 날수 있는 것들을 체크 하여 return false
if (empty($src_file) || empty($dest_file) || !is_file($src_file) || !is_array($src_file_size) || !is_array($dest_file_size) || empty($src_file_size[0]) || empty($src_file_size[1]) || empty($src_file_size[2]) || empty($dest_file_size[0]) || empty($dest_file_size[0])) {
return false;
}
//$image_quality 확인후 조건에 맞지 않으면 기본값 세팅
if(!is_numeric($image_quality) || empty($image_quality)) $image_quality = 90;
//원본사이즈보다 썸네일 사이즈가 더 크면 원본사이즈와 같게 썸네일을 생성
if ($dest_file_size[0] > $src_file_size[0]) {
$dest_file_size = $src_file_size;
}
switch($src_file_size[2]) {
case 1: // GIF image
$src = @ImageCreateFromGIF($src_file); break;
case 2: // JPEG image
$src = @ImageCreateFromJPEG($src_file); break;
case 3: // PNG image
$src = @ImageCreateFromPNG($src_file); break;
default: // 정해진 이외의 포맷은 return false
return false;
}
if (function_exists("imagecreatetruecolor")) {
// This function requires GD 2.0.1 or later.
$dst = @ImageCreateTrueColor($dest_file_size[0], $dest_file_size[1]);
}
else {
$dst = @ImageCreate($dest_file_size[0], $dest_file_size[1]);
}
// 1.00.05 gd 버전에 따라
if (function_exists("imagecopyresampled")) {
@imagecopyresampled($dst, $src, 0, 0, 0, 0, $dest_file_size[0], $dest_file_size[1], $src_file_size[0], $src_file_size[1]);
}
else {
// 1.00.02 imagecopyresized -> imagecopyresampled 로 교체
@imagecopyresized($dst, $src, 0, 0, 0, 0, $dest_file_size[0], $dest_file_size[1], $src_file_size[0], $src_file_size[1]);
}
@ImageJPEG($dst, $dest_file, $image_quality);
@ImageDestroy($src);
@ImageDestroy($dst);
//퍼미션 변경가능 여부를 가지고 썸네일 생성 실패 판단
return @chmod($dest_file, 0777);
}
$src_file = './temp/test.png';
$src_file_size = getimagesize($src_file);
$dest_file = './temp/s_gd_test.png';
$dest_file_size = Array(200, 100);
$result = Ysumnail_rule($src_file, $dest_file, $src_file_size, $dest_file_size, 90, 'gd');
echo "<br>png 원본이미지 <img src='" . $src_file . "' border=0>";
if (empty($result)) echo "<br>png 썸네일 생성에 실패하였습니다. 저장디렉토리의 퍼미션이나 원본의 이미지포맷, 또는 gd지원여부를 확인하세요.";
else echo "<br>png 썸네일이미지 <img src='" . $dest_file . "' border=0>";
$src_file = './temp/test.jpg';
$src_file_size = getimagesize($src_file);
$dest_file = './temp/s_gd_test.jpg';
$dest_file_size = Array(200, 100);
$result = Ysumnail_rule($src_file, $dest_file, $src_file_size, $dest_file_size, 90, 'gd');
echo "<br>jpg 원본이미지 <img src='" . $src_file . "' border=0>";
if (empty($result)) echo "<br><b>jpg 썸네일 생성에 실패하였습니다. 저장디렉토리의 퍼미션이나 원본의 이미지포맷, 또는 gd지원여부를 확인하세요.</b>";
else echo "<br>jpg 썸네일이미지 <img src='" . $dest_file . "' border=0>";
$src_file = './temp/test.gif';
$src_file_size = getimagesize($src_file);
$dest_file = './temp/s_gd_test.gif';
$dest_file_size = Array(200, 100);
$result = Ysumnail_rule($src_file, $dest_file, $src_file_size, $dest_file_size, 90, 'gd');
echo "<br>gif 원본이미지 <img src='" . $src_file . "' border=0>";
if (empty($result)) echo "<br><b>gif 썸네일 생성에 실패하였습니다. 저장디렉토리의 퍼미션이나 원본의 이미지포맷, 또는 gd지원여부를 확인하세요.</b>";
else echo "<br>gif 썸네일이미지 <img src='" . $dest_file . "' border=0>";
$src_file = './temp/test.bmp';
$src_file_size = getimagesize($src_file);
$dest_file = './temp/s_gd_test.bmp';
$dest_file_size = Array(200, 100);
$result = Ysumnail_rule($src_file, $dest_file, $src_file_size, $dest_file_size, 90, 'gd');
echo "<br>bmp 원본이미지 <img src='" . $src_file . "' border=0>";
if (empty($result)) echo "<br><b>bmp 썸네일 생성에 실패하였습니다. 저장디렉토리의 퍼미션이나 원본의 이미지포맷, 또는 gd지원여부를 확인하세요.</b>";
else echo "<br>bmp 썸네일이미지 <img src='" . $dest_file . "' border=0>";
?>
<?php
//처리시간 출력
Yecho_usetime($Ystarttime);
//설명글 출력
$guide_text = '
[Ysumnail_rule 요약]
썸네일을 원본의 비율대로 생성하여 줍니다.
gd를 사용하여 썸네일을 만듭니다.
gif, jpeg, png 포맷만 가능합니다.
썸네일의 확장자는 원본과 동일하나 파일포맷은 모두 jpeg입니다.
php 에서 gd가 지원되어야만 사용가능합니다.
[리턴값]
썸네일이나 복사 성공시 true, 실패시 false;
[사용법]
Ysumnail_rule(원본파일 경로, 생성할 썸네일경로, 이미지정보배열(0=>원본 너비, 1=>원본 높이, 2=>이미지포맷정보), 생성할 썸네일정보배열(0=>원본 너비, 1=>원본 높이), 썸네일생성질(100 이하의 숫자입력), 사용할라이브러리 지정(gd 나 netpbm))
';
Yecho_guide($guide_text);
//소스보기 출력
Yecho_viewsource();
?><div class='small'>[이 게시물은 관리자님에 의해 2011-10-31 17:12:10 PHP & HTML에서 이동 됨]</div>
<?php
/*제작자 : 유창화
사용제한 : 사용은 자유롭습니다. 단, 강의나 책의 내용으로서 사용될 경우 허락을 받으셔야 합니다.*/
//모든 에러를 출력하도록 설정한다.
error_reporting(E_ALL);
//기본 함수 모음을 인클루드
define('YFUNCTION_INCLUDED', true);// 소스를 보여주기 위한 상수
include_once './Yfunction.php';
//처리시간 측정시작
$Ystarttime = Yget_microtime();
//썸네일 이미지 사이지 결정하여 썸네일 생성
//$src_file_size, $dest_file_size 이미지 정보를 담은 배열 0은 너비 1은 높이
function Ysumnail_rule($src_file, $dest_file, $src_file_size, $dest_file_size, $image_quality=90, $lib='gd'){
//생성도중 에러가 날수 있는 것들을 체크 하여 return false
if (!is_array($src_file_size) || !is_array($dest_file_size) || empty($src_file_size[0]) || empty($src_file_size[1]) || empty($dest_file_size[0]) || empty($dest_file_size[0])) {
return false;
}
//$lib 확인후 조건에 맞지 않으면 기본값 세팅
if (empty($lib) || ($lib != 'gd' && $lib != 'netpbm')) $lib = 'gd';
$rate = $src_file_size[1] / $src_file_size[0];
$temp[1] = (int)($dest_file_size[0] * $rate);
if ($dest_file_size[1] < $temp[1]) {
$rate = $src_file_size[0] / $src_file_size[1];
$dest_file_size[0] = (int)($dest_file_size[1] * $rate);
}
else{
$dest_file_size[1] = $temp[1];
}
//썸네일의 너비나 높이가 10 미만인것은 만들지 않는다.
if ($dest_file_size[0] < 10 || $dest_file_size[1] < 10) {
return false;
}
//썸네일 이미지가 원본이미지 크기보다 크게 설정되었을 경우, 원본이미지와 동일하게
if ($dest_file_size[0] > $src_file_size[0]) {
$dest_file_size = $src_file_size;
}
if ($lib == 'netpbm') return Ymake_sumnail_netpbm($src_file, $dest_file, $src_file_size, $dest_file_size, $image_quality);
else return Ymake_sumnail_gd($src_file, $dest_file, $src_file_size, $dest_file_size, $image_quality);
}
//섬네일 생성
function Ymake_sumnail_gd($src_file, $dest_file, $src_file_size, $dest_file_size, $image_quality=90){
//생성도중 에러가 날수 있는 것들을 체크 하여 return false
if (empty($src_file) || empty($dest_file) || !is_file($src_file) || !is_array($src_file_size) || !is_array($dest_file_size) || empty($src_file_size[0]) || empty($src_file_size[1]) || empty($src_file_size[2]) || empty($dest_file_size[0]) || empty($dest_file_size[0])) {
return false;
}
//$image_quality 확인후 조건에 맞지 않으면 기본값 세팅
if(!is_numeric($image_quality) || empty($image_quality)) $image_quality = 90;
//원본사이즈보다 썸네일 사이즈가 더 크면 원본사이즈와 같게 썸네일을 생성
if ($dest_file_size[0] > $src_file_size[0]) {
$dest_file_size = $src_file_size;
}
switch($src_file_size[2]) {
case 1: // GIF image
$src = @ImageCreateFromGIF($src_file); break;
case 2: // JPEG image
$src = @ImageCreateFromJPEG($src_file); break;
case 3: // PNG image
$src = @ImageCreateFromPNG($src_file); break;
default: // 정해진 이외의 포맷은 return false
return false;
}
if (function_exists("imagecreatetruecolor")) {
// This function requires GD 2.0.1 or later.
$dst = @ImageCreateTrueColor($dest_file_size[0], $dest_file_size[1]);
}
else {
$dst = @ImageCreate($dest_file_size[0], $dest_file_size[1]);
}
// 1.00.05 gd 버전에 따라
if (function_exists("imagecopyresampled")) {
@imagecopyresampled($dst, $src, 0, 0, 0, 0, $dest_file_size[0], $dest_file_size[1], $src_file_size[0], $src_file_size[1]);
}
else {
// 1.00.02 imagecopyresized -> imagecopyresampled 로 교체
@imagecopyresized($dst, $src, 0, 0, 0, 0, $dest_file_size[0], $dest_file_size[1], $src_file_size[0], $src_file_size[1]);
}
@ImageJPEG($dst, $dest_file, $image_quality);
@ImageDestroy($src);
@ImageDestroy($dst);
//퍼미션 변경가능 여부를 가지고 썸네일 생성 실패 판단
return @chmod($dest_file, 0777);
}
$src_file = './temp/test.png';
$src_file_size = getimagesize($src_file);
$dest_file = './temp/s_gd_test.png';
$dest_file_size = Array(200, 100);
$result = Ysumnail_rule($src_file, $dest_file, $src_file_size, $dest_file_size, 90, 'gd');
echo "<br>png 원본이미지 <img src='" . $src_file . "' border=0>";
if (empty($result)) echo "<br>png 썸네일 생성에 실패하였습니다. 저장디렉토리의 퍼미션이나 원본의 이미지포맷, 또는 gd지원여부를 확인하세요.";
else echo "<br>png 썸네일이미지 <img src='" . $dest_file . "' border=0>";
$src_file = './temp/test.jpg';
$src_file_size = getimagesize($src_file);
$dest_file = './temp/s_gd_test.jpg';
$dest_file_size = Array(200, 100);
$result = Ysumnail_rule($src_file, $dest_file, $src_file_size, $dest_file_size, 90, 'gd');
echo "<br>jpg 원본이미지 <img src='" . $src_file . "' border=0>";
if (empty($result)) echo "<br><b>jpg 썸네일 생성에 실패하였습니다. 저장디렉토리의 퍼미션이나 원본의 이미지포맷, 또는 gd지원여부를 확인하세요.</b>";
else echo "<br>jpg 썸네일이미지 <img src='" . $dest_file . "' border=0>";
$src_file = './temp/test.gif';
$src_file_size = getimagesize($src_file);
$dest_file = './temp/s_gd_test.gif';
$dest_file_size = Array(200, 100);
$result = Ysumnail_rule($src_file, $dest_file, $src_file_size, $dest_file_size, 90, 'gd');
echo "<br>gif 원본이미지 <img src='" . $src_file . "' border=0>";
if (empty($result)) echo "<br><b>gif 썸네일 생성에 실패하였습니다. 저장디렉토리의 퍼미션이나 원본의 이미지포맷, 또는 gd지원여부를 확인하세요.</b>";
else echo "<br>gif 썸네일이미지 <img src='" . $dest_file . "' border=0>";
$src_file = './temp/test.bmp';
$src_file_size = getimagesize($src_file);
$dest_file = './temp/s_gd_test.bmp';
$dest_file_size = Array(200, 100);
$result = Ysumnail_rule($src_file, $dest_file, $src_file_size, $dest_file_size, 90, 'gd');
echo "<br>bmp 원본이미지 <img src='" . $src_file . "' border=0>";
if (empty($result)) echo "<br><b>bmp 썸네일 생성에 실패하였습니다. 저장디렉토리의 퍼미션이나 원본의 이미지포맷, 또는 gd지원여부를 확인하세요.</b>";
else echo "<br>bmp 썸네일이미지 <img src='" . $dest_file . "' border=0>";
?>
<?php
//처리시간 출력
Yecho_usetime($Ystarttime);
//설명글 출력
$guide_text = '
[Ysumnail_rule 요약]
썸네일을 원본의 비율대로 생성하여 줍니다.
gd를 사용하여 썸네일을 만듭니다.
gif, jpeg, png 포맷만 가능합니다.
썸네일의 확장자는 원본과 동일하나 파일포맷은 모두 jpeg입니다.
php 에서 gd가 지원되어야만 사용가능합니다.
[리턴값]
썸네일이나 복사 성공시 true, 실패시 false;
[사용법]
Ysumnail_rule(원본파일 경로, 생성할 썸네일경로, 이미지정보배열(0=>원본 너비, 1=>원본 높이, 2=>이미지포맷정보), 생성할 썸네일정보배열(0=>원본 너비, 1=>원본 높이), 썸네일생성질(100 이하의 숫자입력), 사용할라이브러리 지정(gd 나 netpbm))
';
Yecho_guide($guide_text);
//소스보기 출력
Yecho_viewsource();
?><div class='small'>[이 게시물은 관리자님에 의해 2011-10-31 17:12:10 PHP & HTML에서 이동 됨]</div>
댓글 2개
sjsjin
19년 전
거의 유사하군요..
저도 여기다 올릴걸..ㅋ~
http://www.sir.co.kr/bbs/board.php?bo_table=g4_tiptech&wr_id=3120&sca=&sfl=wr_name%2C1&stx=sjsjin&sop=and
저도 여기다 올릴걸..ㅋ~
http://www.sir.co.kr/bbs/board.php?bo_table=g4_tiptech&wr_id=3120&sca=&sfl=wr_name%2C1&stx=sjsjin&sop=and
Photofly
19년 전
감사합니다... 필요할때 요긴하게 쓰이겠습니다....^^
게시판 목록
프로그램
| 번호 | 제목 | 글쓴이 | 날짜 | 조회 |
|---|---|---|---|---|
| 730 |
|
19년 전 | 2716 | |
| 729 |
그레이스웹
|
19년 전 | 3506 | |
| 728 |
|
19년 전 | 2677 | |
| 727 |
|
19년 전 | 2519 | |
| 726 |
|
19년 전 | 2334 | |
| 725 |
|
19년 전 | 2235 | |
| 724 |
|
19년 전 | 2129 | |
| 723 |
|
19년 전 | 4251 | |
| 722 |
|
19년 전 | 2667 | |
| 721 |
|
19년 전 | 2157 | |
| 720 |
|
19년 전 | 2256 | |
| 719 |
|
19년 전 | 2843 | |
| 718 |
|
19년 전 | 1956 | |
| 717 |
|
19년 전 | 3188 | |
| 716 |
|
19년 전 | 2747 | |
| 715 |
|
19년 전 | 2259 | |
| 714 |
|
19년 전 | 1811 | |
| 713 |
|
19년 전 | 2234 | |
| 712 |
|
19년 전 | 2005 | |
| 711 |
|
19년 전 | 1897 | |
| 710 |
|
19년 전 | 2461 | |
| 709 |
|
19년 전 | 2315 | |
| 708 |
|
19년 전 | 3880 | |
| 707 |
|
19년 전 | 3730 | |
| 706 |
|
19년 전 | 2234 | |
| 705 |
|
19년 전 | 3272 | |
| 704 |
|
19년 전 | 1949 | |
| 703 |
|
19년 전 | 2382 | |
| 702 |
|
19년 전 | 2272 | |
| 701 |
홀로남은자
|
19년 전 | 2342 | |
| 700 |
홀로남은자
|
19년 전 | 2174 | |
| 699 | 19년 전 | 2810 | ||
| 698 |
|
19년 전 | 2824 | |
| 697 |
|
19년 전 | 3168 | |
| 696 |
|
19년 전 | 3038 | |
| 695 |
|
19년 전 | 2702 | |
| 694 |
|
19년 전 | 2924 | |
| 693 |
|
19년 전 | 3175 | |
| 692 |
|
19년 전 | 2876 | |
| 691 |
|
19년 전 | 2615 | |
| 690 | 19년 전 | 2919 | ||
| 689 | 19년 전 | 4503 | ||
| 688 | 19년 전 | 2428 | ||
| 687 | 19년 전 | 2446 | ||
| 686 | 19년 전 | 3475 | ||
| 685 | 19년 전 | 3154 | ||
| 684 | 19년 전 | 2803 | ||
| 683 | 19년 전 | 2049 | ||
| 682 | 19년 전 | 1773 | ||
| 681 | 19년 전 | 2875 | ||
| 680 | 19년 전 | 1715 | ||
| 679 | 19년 전 | 2306 | ||
| 678 | 19년 전 | 3954 | ||
| 677 | 19년 전 | 3723 | ||
| 676 | 19년 전 | 3448 | ||
| 675 | 19년 전 | 3406 | ||
| 674 |
|
19년 전 | 1563 | |
| 673 |
|
19년 전 | 1936 | |
| 672 |
|
19년 전 | 1854 | |
| 671 | 19년 전 | 2522 | ||
| 670 | 19년 전 | 4616 | ||
| 669 |
|
19년 전 | 2757 | |
| 668 |
|
19년 전 | 1916 | |
| 667 |
|
19년 전 | 1929 | |
| 666 |
|
19년 전 | 1819 | |
| 665 |
|
19년 전 | 2555 | |
| 664 |
|
19년 전 | 8172 | |
| 663 |
|
19년 전 | 2723 | |
| 662 |
|
19년 전 | 2787 | |
| 661 |
|
19년 전 | 3041 | |
| 660 |
|
19년 전 | 2192 | |
| 659 |
|
19년 전 | 2206 | |
| 658 |
|
19년 전 | 2170 | |
| 657 |
|
19년 전 | 2066 | |
| 656 |
|
19년 전 | 2253 | |
| 655 |
|
19년 전 | 2512 | |
| 654 |
|
19년 전 | 3074 | |
| 653 | 19년 전 | 2328 | ||
| 652 | 19년 전 | 1907 | ||
| 651 |
|
19년 전 | 2828 | |
| 650 | 19년 전 | 4995 | ||
| 649 | 19년 전 | 3494 | ||
| 648 | 19년 전 | 3452 | ||
| 647 | 19년 전 | 2966 | ||
| 646 | 19년 전 | 2390 | ||
| 645 | 19년 전 | 1487 | ||
| 644 | 19년 전 | 3133 | ||
| 643 | 19년 전 | 2010 | ||
| 642 |
|
19년 전 | 5372 | |
| 641 | 19년 전 | 2430 | ||
| 640 | 19년 전 | 3427 | ||
| 639 | 19년 전 | 2852 | ||
| 638 | 19년 전 | 1760 | ||
| 637 | 19년 전 | 3876 | ||
| 636 | 19년 전 | 2414 | ||
| 635 | 19년 전 | 2304 | ||
| 634 |
|
19년 전 | 3023 | |
| 633 |
|
19년 전 | 3294 | |
| 632 | 19년 전 | 2495 | ||
| 631 | 19년 전 | 2256 |
댓글 작성
댓글을 작성하시려면 로그인이 필요합니다.
로그인하기