<?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개
게시글 목록
| 번호 | 제목 |
|---|---|
| 8624 |
기타
소유권변경
|
| 8623 | |
| 8617 | |
| 8615 | |
| 28464 | |
| 8613 | |
| 8612 | |
| 8611 |
JavaScript
vim 의 들여쓰기 + 색상 눈 덜피곤 c++ php 등.. (리눅스용)
|
| 8610 |
JavaScript
vim 의 간단한 사용법
|
| 8609 |
JavaScript
[자바스크립트] 상태표시줄 제어 + 간단한 복사 제어
|
| 8606 |
Linux
/etc 디렉토리 아래의 파일들
2
|
| 8605 |
기타
shadow 잠금 해제
|
| 8604 | |
| 8603 |
JavaScript
yum 업데이트 되는곳 7.3 or 페도라
|
| 8602 |
MySQL
mysql 링크하기
|
| 8601 | |
| 8600 |
MySQL
mysql.sock 삭제 하였을 경우
|
| 8599 | |
| 8598 | |
| 8597 |
JavaScript
ps 시 화면 짤리는부분 보이게 하기
|
| 8596 | |
| 8595 | |
| 8594 |
기타
chmod 의 스틱키
|
| 8593 |
JavaScript
tripwire 의 twr 파일 보기
|
| 8592 |
JavaScript
최근 사용자 접속 리스트 보기
|
| 8591 | |
| 8590 | |
| 8589 |
JavaScript
atd 데몬
|
| 28463 | |
| 8588 |
JavaScript
portmap
|
| 8587 | |
| 8586 | |
| 8585 |
JavaScript
md5sum 사용방법
|
| 8584 |
JavaScript
TAR 압축방법
|
| 8583 | |
| 8581 | |
| 8580 |
기타
crontab 사용하기
|
| 8579 |
JavaScript
umask 설정법
|
| 8578 | |
| 8577 |
기타
Find 명령어 활용
|
| 8576 |
기타
zip 압축 해제
|
| 8575 |
JavaScript
삼바(samba)에서 내부만 들어오게 하기
|
| 8574 | |
| 8572 | |
| 8571 |
JavaScript
quota 젠체 용량 확인
|
| 8570 | |
| 8569 | |
| 8568 |
JavaScript
런레벨 편집
|
| 8567 |
기타
리눅스에서 문자찾기
|
| 8566 | |
| 8565 |
JavaScript
삼바로 리눅스에서 윈도우로 공유하기
|
| 8564 |
JavaScript
shadow 패스워드 잠금 해제 하기
|
| 8563 | |
| 8562 | |
| 8561 |
JavaScript
vim에서 컬러는 나오게 하기
|
| 8560 | |
| 8558 | |
| 8557 |
MySQL
my.cnf 파일은 어디에?
|
| 8556 | |
| 8555 |
MySQL
cron 설정
|
| 8554 |
JavaScript
호스트네임 바꾸기
|
| 8553 |
JavaScript
하드링크와 심볼릭링크?
|
| 28462 |
HTML
콘솔의 화면보호기능을 끄려면?
|
| 8552 |
기타
스틱키
|
| 8551 |
JavaScript
날짜 바꾸기 date 명령을 이용
|
| 28461 |
HTML
스왑 사용 안하기
|
| 8549 | |
| 8548 |
기타
SSH
|
| 8547 |
JavaScript
rsync 백업
|
| 8545 |
JavaScript
저 사양 PC로 리눅스 라우터 만들기
1
|
| 8544 |
Linux
Tripwire
|
| 8543 | |
| 8542 | |
| 8541 | |
| 8540 |
JavaScript
링크 시킨 파일 찾기
|
| 8539 |
JavaScript
리눅스 하드웨어 정보 보기
|
| 8538 | |
| 8537 | |
| 8536 |
MySQL
my.cnf 파일은 위치..
|
| 8535 |
MySQL
부팅시 자동으로 mysql 서버 자동실행
|
| 8533 |
MySQL
MySQL 루트비번 분실시 대처요령
1
|
| 8532 |
MySQL
mysql에서 log 파일 남기기
|
| 8531 |
MySQL
ALTER 테이블 추가,변경
|
| 8530 |
MySQL
sql 파일로 테이블 간단히 만들기
|
| 8529 |
MySQL
mysql 4.1 의 password()
|
| 8528 |
MySQL
mysql 에서 최대 사용자 수
|
| 8525 | |
| 8524 | |
| 8523 |
기타
핑(ping) 막기
|
| 8522 | |
| 8521 |
JavaScript
su 사용자 제한하기
|
| 8520 | |
| 8519 |
JavaScript
기본적인 삼바 설정
|
| 8518 |
기타
실시간 로그 보기..
|
| 8517 | |
| 8516 |
JavaScript
부팅 로고 삭제
|
| 8515 |
JavaScript
콘솔에서 해상도 높이기
|
| 8514 | |
| 8513 | |
| 8512 |
JavaScript
ssh로 접속할때 메시지를 보여주는 방법..
|
댓글 작성
댓글을 작성하시려면 로그인이 필요합니다.
로그인하기