링크
http://82da.com/Ybbs/sample/Ymake_sumnail_remoteimage.php (299) http://82da.com/Ybbs/sample/source/Yfilereader.php?file=Ymake_sumnail_remoteimage.php (284)
안녕하세요
요새 관련 내용이 조금 보이길래 한번 만들어봣습니다.
원리는 외부의 이미지를 소켓으로 읽어와서 내 서버에 저장한다.
그런다음 그 서버에 저장된 이미지로 부터 썸네일을 만든다.
썸네일을 만든후 원본 이미지는 삭제한다.
입니다.
전 그냥 샘플을 만드는 정도로 해봣습니다.
응용하셔서 사용하세요.
예제 : http://82da.com/Ybbs/sample/Ymake_sumnail_remoteimage.php
소스 : http://82da.com/Ybbs/sample/source/Yfilereader.php?file=Ymake_sumnail_remoteimage.php
다음은 소스입니다.
----------------------------------------------------------------------
//썸네일 이미지 사이지 결정하여 썸네일 생성
//$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
@exec( "gifsicle -I " . $src_file, $tempinfo);
$info = @join(" " , $tempinfo);
//gifsicle rpm이 설치되었을 경우 움직인는 gif도 썸네일 가능하다.
if (preg_match("'(loop forever|loop count)'", $info)) {
@exec( "gifsicle -O " . $image_quality . " --resize " . $dest_file_size[0] . "x" . $dest_file_size[1] . " " . $src_file . " > " . $dest_file );
//퍼미션 변경가능 여부를 가지고 썸네일 생성 실패 판단
return @chmod($dest_file, 0777);
}
else {
$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);
}
//원격이미지 정보 가져오는 함수
function Ymake_sumnail_remoteimage($url, $save_dir, $referer=''){
global $dest_file;
$src_file = $save_dir . '/' . base64_encode($url);
$text = Yreadfile($url, $referer);
if (empty($text)) return Array();
$fp = @fopen ($src_file, "w");
@fwrite($fp, $text);//유일한 파일이므로 파일에 락을 걸지 않는다.
@fclose($fp);
@chmod ($src_file, 0777);
$src_file_size = @getimagesize($src_file);
$dest_file = $save_dir . '/s_' . base64_encode($url);
$dest_file_size = Array(200, 100);
$result = Ysumnail_rule($src_file, $dest_file, $src_file_size, $dest_file_size, 90, 'gd');
@unlink($src_file);
return $result;
}
//플록님 이미지
$url = "http://phosay.com/g4/data/file/demo_gallery/3660583642_49cb97ad_wo%2B091.jpg";//읽어올 url
$referer = "http://phosay.com/g4/";//속일 리퍼러, 넣지 않아도 됨
$save_dir = "./temp";
//임시저장디렉토리 지정, 상대경로
//퍼미션은 웹서버가 읽을 수 있도록, 일반적으로 777
//맨마지막에 / 를 붙이지 않는다.
$result = Ymake_sumnail_remoteimage($url, $save_dir, $referer);
echo "<br>원본이미지 <img src='" . $url . "' border=0>";
if (empty($result)) echo "<br>png 썸네일 생성에 실패하였습니다. 저장디렉토리의 퍼미션이나 원본의 이미지포맷, 또는 gd지원여부를 확인하세요.";
else echo "<br>png 썸네일이미지 <img src='" . $dest_file . "' border=0>";<div class='small'>[이 게시물은 관리자님에 의해 2011-10-31 17:12:10 PHP & HTML에서 이동 됨]</div>
요새 관련 내용이 조금 보이길래 한번 만들어봣습니다.
원리는 외부의 이미지를 소켓으로 읽어와서 내 서버에 저장한다.
그런다음 그 서버에 저장된 이미지로 부터 썸네일을 만든다.
썸네일을 만든후 원본 이미지는 삭제한다.
입니다.
전 그냥 샘플을 만드는 정도로 해봣습니다.
응용하셔서 사용하세요.
예제 : http://82da.com/Ybbs/sample/Ymake_sumnail_remoteimage.php
소스 : http://82da.com/Ybbs/sample/source/Yfilereader.php?file=Ymake_sumnail_remoteimage.php
다음은 소스입니다.
----------------------------------------------------------------------
//썸네일 이미지 사이지 결정하여 썸네일 생성
//$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
@exec( "gifsicle -I " . $src_file, $tempinfo);
$info = @join(" " , $tempinfo);
//gifsicle rpm이 설치되었을 경우 움직인는 gif도 썸네일 가능하다.
if (preg_match("'(loop forever|loop count)'", $info)) {
@exec( "gifsicle -O " . $image_quality . " --resize " . $dest_file_size[0] . "x" . $dest_file_size[1] . " " . $src_file . " > " . $dest_file );
//퍼미션 변경가능 여부를 가지고 썸네일 생성 실패 판단
return @chmod($dest_file, 0777);
}
else {
$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);
}
//원격이미지 정보 가져오는 함수
function Ymake_sumnail_remoteimage($url, $save_dir, $referer=''){
global $dest_file;
$src_file = $save_dir . '/' . base64_encode($url);
$text = Yreadfile($url, $referer);
if (empty($text)) return Array();
$fp = @fopen ($src_file, "w");
@fwrite($fp, $text);//유일한 파일이므로 파일에 락을 걸지 않는다.
@fclose($fp);
@chmod ($src_file, 0777);
$src_file_size = @getimagesize($src_file);
$dest_file = $save_dir . '/s_' . base64_encode($url);
$dest_file_size = Array(200, 100);
$result = Ysumnail_rule($src_file, $dest_file, $src_file_size, $dest_file_size, 90, 'gd');
@unlink($src_file);
return $result;
}
//플록님 이미지
$url = "http://phosay.com/g4/data/file/demo_gallery/3660583642_49cb97ad_wo%2B091.jpg";//읽어올 url
$referer = "http://phosay.com/g4/";//속일 리퍼러, 넣지 않아도 됨
$save_dir = "./temp";
//임시저장디렉토리 지정, 상대경로
//퍼미션은 웹서버가 읽을 수 있도록, 일반적으로 777
//맨마지막에 / 를 붙이지 않는다.
$result = Ymake_sumnail_remoteimage($url, $save_dir, $referer);
echo "<br>원본이미지 <img src='" . $url . "' border=0>";
if (empty($result)) echo "<br>png 썸네일 생성에 실패하였습니다. 저장디렉토리의 퍼미션이나 원본의 이미지포맷, 또는 gd지원여부를 확인하세요.";
else echo "<br>png 썸네일이미지 <img src='" . $dest_file . "' border=0>";<div class='small'>[이 게시물은 관리자님에 의해 2011-10-31 17:12:10 PHP & HTML에서 이동 됨]</div>
댓글 13개
게시글 목록
| 번호 | 제목 |
|---|---|
| 12452 |
JavaScript
마우스를 따라다니는 그림
|
| 40 | |
| 25015 | |
| 12447 | |
| 12446 |
JavaScript
SQLPLUS & PLSQL 기초
|
| 12445 |
JavaScript
PLSQL이란
|
| 29296 |
HTML
동적 INPUT 박스
|
| 12440 |
기타
메뉴
4
|
| 12438 |
Flash
창밖에 풍경
1
|
| 12437 |
JavaScript
우분투 root관리자 접속 방법 (펌)
|
| 29294 |
HTML
우키막기
1
|
| 35 | |
| 32 | |
| 12434 |
JavaScript
tar로 묶을때 특정 디렉토리나 파일 포함하지 않고 묶기
2
|
| 12433 |
Flash
도스상에서 플렉스 사용하기
|
| 12432 | |
| 29293 |
HTML
컨텐츠 팝업 출력 소스
|
| 29 | |
| 12431 | |
| 12428 | |
| 12421 |
jQuery
JQuery + wSlide 를 이용한 슬라이딩
6
|
| 29292 |
HTML
시계
|
| 12411 | |
| 12402 | |
| 27 | |
| 29290 |
HTML
금액입력시 한글로 변환하여 표시
1
|
| 12400 | |
| 24 | |
| 12397 |
PHP
이번 달 달력 출력
2
|
| 12396 |
JavaScript
동적 테이블 추가,삭제
|
| 21 | |
| 12391 | |
| 12390 | |
| 18 | |
| 16 | |
| 12377 |
Flash
쇼핑몰에서 많이 쓰는 자동 슬라이드
12
|
| 12373 | |
| 13 | |
| 9 | |
| 12372 | |
| 12371 | |
| 12363 | |
| 1 | |
| 13432 | |
| 12362 |
JavaScript
vista에서 한글 php 매뉴얼 chm파일이 안 보일떄
|
| 12360 | |
| 12355 | |
| 25014 | |
| 29287 | |
| 12352 | |
| 12349 | |
| 29279 |
HTML
기상청 날씨정보 XML
7
|
| 12344 |
기타
네이버로그인
4
|
| 12340 | |
| 12335 | |
| 12333 | |
| 12331 | |
| 29273 |
HTML
자신의 홈피에 날씨를 달아보자.
5
|
| 12330 | |
| 12329 | |
| 12328 | |
| 12324 |
JavaScript
홈피 사진 올리는법 사진줄이 는법
3
|
| 12323 |
MySQL
MySQL 자동으로 dump 받기
|
| 12318 |
MySQL
쿼리문 해석좀 부탁드립니다
4
|
| 12316 | |
| 12313 |
JavaScript
이미지에 박스 넣기
2
|
| 12310 |
Flash
[펌] RED5 파헤치기
2
|
| 12309 |
JavaScript
php 파일을 html 확장자로 사용하기
|
| 12307 |
JavaScript
아파치 보안 팁 [외부에서 아파치정보 못 보게하기]
1
|
| 12303 | |
| 12296 |
JavaScript
SSH 공격막아내기 방법 1
6
|
| 12291 | |
| 12280 |
Flash
플래시 배너 소스
10
|
| 12277 | |
| 12275 |
MySQL
[펌] 사용자 계정 트래픽 제한 하기
1
|
| 29272 |
HTML
JavaScript MD5 사용하기~
|
| 12274 |
기타
휠로 이미지 크기 제어
|
| 12260 | |
| 12252 | |
| 12250 | |
| 12248 | |
| 29267 | |
| 12245 | |
| 29266 | |
| 29261 |
HTML
그림안에 투명텍스트박스 넣기...
4
|
| 12239 |
Flash
플래시점선없애주는 자바스크립트
5
|
| 12238 |
Flash
[질문] 플래시 테두리 제거 질문이요..ㅠㅠ
|
| 29251 |
HTML
숫자 100이하 절사
9
|
| 12236 | |
| 12231 | |
| 12228 | |
| 12214 | |
| 12211 | |
| 12210 | |
| 29248 | |
| 29247 | |
| 25010 | |
| 12208 |
JavaScript
file_put_contents() 함수
1
|
| 12207 |
MySQL
bash shell의 환경설정 의미와 그 예
|
| 12202 |
댓글 작성
댓글을 작성하시려면 로그인이 필요합니다.
로그인하기