웹마스터 팁
page_full_width" class="col-xs-12" |cond="$__Context->page_full_width">
[GD] 이미지 회전 함수 공개합니다.
2001.11.05 14:35
안녕하세요, 요즘 이미지 관리툴을 짜고 있는 막강커플홈 희민닷컴(www.HeeMin.com)의 민이(irismin@heemin.com)라고 합니다.
저희 커플이 디카로 사진 찍는 걸 좋아해서 디카 산 지 4개월여 만에 사진이 거의 2300여장이나 되었습니다.
웹상에서 이미지를 보고 싶을 때, 제로보드를 썼는데, 화일이 많아지니, 올리는 작업도 보통이 아니더군요. 게다가 이미지 용량이 큰 경우, 제로보드의 썸네일 방식으로는 버벅거림이 있기도 하고, 한 꺼번에 올릴 수 있는 방식 등을 고민하다가, FTP, HTTP 를 모두 지원하는 PICDB 프로그램을 짜고 있고, 현재 스킨 처리 부분만 되면 완성 단계입니다. 1.0 버전으로 조만간 공개할까 하네요.. ^^;; (스킨 부분을 뺀 부분)
완성이 되면, DB를 사용하지 않고 빠르고 간편한 웹용 이미지 뷰어, 관리툴이 될 것입니다. 현재 저희 커플은 비밀리에 2300여장의 이미지를 관리하고 있답니다.. ^^;;; 에... 여자친구도 그다지 컴퓨터에 밝지 않은데, 재밌고 간편해서 좋다더군요... 에... 팔이 안으로 굽는 다거나 하는건 아닌 것 같은데..
헷...
그 중에서 제가 마지막에 풀었던 문제입니다.
이미지 회전 함수인데요, 속도가 느립니다. ^^;;;
100x100 정도 크기면 모르겠는데, 640x480 정도 가면 많이 느리군요..
php 자체에서 분산처리를 해보까 하는 생각도 들고... 으음...
하여간 회전은 다 되니까, 일단 공개하겠습니다. 조만간 속도 업글이 된 함수를 다시 공개하겠습니다.
사설이 길었네요.. ㅡ.ㅡ;; 죄송합니다.
--------------------------------------------------------------------
function ImageRotate($src_file, $tag_file, $rotate) {
// ImageRotate function ver 1.0
// -------------------------------------------------------------
// $rotate : 90, 180, 270, horizontal, vertical
// -------------------------------------------------------------
// 이 이미지 회전 함수는 막강커플홈 희민닷컴(www.heemin.com)의
// 민이(irismin@heemin.com)가 만들었습니다.
// 사용하실 때는 고맙다는 인사라도.. ㅡ.ㅡ;;
// 희민닷컴에 오셔서 방명록에 함만 끄적여 주심 감사하겠습니다.
// 속도가 느려서 좀 더 빨리 처리할 수 있는 방법을 고민 중입니다.
// 2001.11.5 -민이-
$src_img=ImageCreateFromjpeg($src_file); //원본
$sx=imagesx($src_img);
$sy=imagesy($src_img);
if ($rotate==180 || $rotate=="horizontal" || $rotate=="vertical") {
$dst_img=ImageCreate($sx, $sy); //빈이미지를 만들어주고
ImageCopyResized($dst_img,$src_img,0,0,0,0,$sx,$sy,$sx,$sy); //줄여서 그려준다
}
else
{
$dst_img=ImageCreate($sy, $sx); //빈이미지를 만들어주고
ImageCopyResized($dst_img,$src_img,0,0,0,0,$sy,$sx,$sx,$sy); //줄여서 그려준다
}
for ($j=0; $j<$sx; $j++) {
for ($i=0; $i<$sy; $i++) {
$pixcol1=imagecolorat($src_img,$j,$i); // 좌표값의 색상을 추출한다
$pixcol2=imagecolorsforindex($src_img, $pixcol1); // 추출된 값의 RGB를 반환
$pixcol3=imagecolorclosest($dst_img,$pixcol2[red],$pixcol2[green],$pixcol2[blue]); // RGB를 변경될 이미지의 색상값이 맞춘 INDEX 값으로 변환
switch ($rotate) {
case 270:
$to_x=$i;
$to_y=$sx-$j-1;
break;
case 90:
$to_x=$sy-$i-1;
$to_y=$j;
break;
case 180:
$to_x=$sx-$j;
$to_y=$sy-$i-1;
break;
case "vertical":
$to_x=$j;
$to_y=$sy-$i-1;
break;
case "horizontal":
$to_x=$sx-$j;
$to_y=$i-1;
break;
}
imagesetpixel($dst_img,$to_x,$to_y,$pixcol3); // 변환된 색상을 목적 포인트에 찍어준다.
}
}
Imagejpeg($dst_img,$tag_file,100); // 화일로 출력
ImageDestroy($dst_img); //메모리 비워주기
ImageDestroy($src_img); //메모리 비워주기
}
참고로, 에... ImageCopyResized($dst_img,$src_img,0,0,0,0,$sy,$sx,$sx,$sy); //줄여서 그려준다
이 부분이 궁금하실 겁니다. 또는 색상을 추출해서 왜 변환했다가 다시 변환하는 지 궁금하신 분들 계시죠? 이 문제는 마치 그림에 글자를 썼는데, 파스텔 통으로 나와버리는 것과 비슷한 문제 때문인데, 각 이미지의 팔레트가 틀려서 그런 것 같아요.
글구, 굳이 회전되어 그려질 부분에 왜 확대,축소해서 그려줘야 하는가 하는 부분은 미스테리입니다. 이 부분도 속도를 꽤 잡아먹고 있는데, 제가 팔레트 땜에 고민하며 수정하다 보니, 절케 되지 않으면 이상한 색으로 되어 버리더군요..
분석해서 결과를 다음 함수에서 밝혀 드리겠습니다.
^^;;; 글고, 저 초보입니다. 소스 지저분해도 용서하세요. PHP 또는 프로그램 배운지 2달밖에 안됐습니다. 원래 디자이너입니다.. ㅋㅋ ㅡ.ㅡ;;
저희 커플이 디카로 사진 찍는 걸 좋아해서 디카 산 지 4개월여 만에 사진이 거의 2300여장이나 되었습니다.
웹상에서 이미지를 보고 싶을 때, 제로보드를 썼는데, 화일이 많아지니, 올리는 작업도 보통이 아니더군요. 게다가 이미지 용량이 큰 경우, 제로보드의 썸네일 방식으로는 버벅거림이 있기도 하고, 한 꺼번에 올릴 수 있는 방식 등을 고민하다가, FTP, HTTP 를 모두 지원하는 PICDB 프로그램을 짜고 있고, 현재 스킨 처리 부분만 되면 완성 단계입니다. 1.0 버전으로 조만간 공개할까 하네요.. ^^;; (스킨 부분을 뺀 부분)
완성이 되면, DB를 사용하지 않고 빠르고 간편한 웹용 이미지 뷰어, 관리툴이 될 것입니다. 현재 저희 커플은 비밀리에 2300여장의 이미지를 관리하고 있답니다.. ^^;;; 에... 여자친구도 그다지 컴퓨터에 밝지 않은데, 재밌고 간편해서 좋다더군요... 에... 팔이 안으로 굽는 다거나 하는건 아닌 것 같은데..
헷...
그 중에서 제가 마지막에 풀었던 문제입니다.
이미지 회전 함수인데요, 속도가 느립니다. ^^;;;
100x100 정도 크기면 모르겠는데, 640x480 정도 가면 많이 느리군요..
php 자체에서 분산처리를 해보까 하는 생각도 들고... 으음...
하여간 회전은 다 되니까, 일단 공개하겠습니다. 조만간 속도 업글이 된 함수를 다시 공개하겠습니다.
사설이 길었네요.. ㅡ.ㅡ;; 죄송합니다.
--------------------------------------------------------------------
function ImageRotate($src_file, $tag_file, $rotate) {
// ImageRotate function ver 1.0
// -------------------------------------------------------------
// $rotate : 90, 180, 270, horizontal, vertical
// -------------------------------------------------------------
// 이 이미지 회전 함수는 막강커플홈 희민닷컴(www.heemin.com)의
// 민이(irismin@heemin.com)가 만들었습니다.
// 사용하실 때는 고맙다는 인사라도.. ㅡ.ㅡ;;
// 희민닷컴에 오셔서 방명록에 함만 끄적여 주심 감사하겠습니다.
// 속도가 느려서 좀 더 빨리 처리할 수 있는 방법을 고민 중입니다.
// 2001.11.5 -민이-
$src_img=ImageCreateFromjpeg($src_file); //원본
$sx=imagesx($src_img);
$sy=imagesy($src_img);
if ($rotate==180 || $rotate=="horizontal" || $rotate=="vertical") {
$dst_img=ImageCreate($sx, $sy); //빈이미지를 만들어주고
ImageCopyResized($dst_img,$src_img,0,0,0,0,$sx,$sy,$sx,$sy); //줄여서 그려준다
}
else
{
$dst_img=ImageCreate($sy, $sx); //빈이미지를 만들어주고
ImageCopyResized($dst_img,$src_img,0,0,0,0,$sy,$sx,$sx,$sy); //줄여서 그려준다
}
for ($j=0; $j<$sx; $j++) {
for ($i=0; $i<$sy; $i++) {
$pixcol1=imagecolorat($src_img,$j,$i); // 좌표값의 색상을 추출한다
$pixcol2=imagecolorsforindex($src_img, $pixcol1); // 추출된 값의 RGB를 반환
$pixcol3=imagecolorclosest($dst_img,$pixcol2[red],$pixcol2[green],$pixcol2[blue]); // RGB를 변경될 이미지의 색상값이 맞춘 INDEX 값으로 변환
switch ($rotate) {
case 270:
$to_x=$i;
$to_y=$sx-$j-1;
break;
case 90:
$to_x=$sy-$i-1;
$to_y=$j;
break;
case 180:
$to_x=$sx-$j;
$to_y=$sy-$i-1;
break;
case "vertical":
$to_x=$j;
$to_y=$sy-$i-1;
break;
case "horizontal":
$to_x=$sx-$j;
$to_y=$i-1;
break;
}
imagesetpixel($dst_img,$to_x,$to_y,$pixcol3); // 변환된 색상을 목적 포인트에 찍어준다.
}
}
Imagejpeg($dst_img,$tag_file,100); // 화일로 출력
ImageDestroy($dst_img); //메모리 비워주기
ImageDestroy($src_img); //메모리 비워주기
}
참고로, 에... ImageCopyResized($dst_img,$src_img,0,0,0,0,$sy,$sx,$sx,$sy); //줄여서 그려준다
이 부분이 궁금하실 겁니다. 또는 색상을 추출해서 왜 변환했다가 다시 변환하는 지 궁금하신 분들 계시죠? 이 문제는 마치 그림에 글자를 썼는데, 파스텔 통으로 나와버리는 것과 비슷한 문제 때문인데, 각 이미지의 팔레트가 틀려서 그런 것 같아요.
글구, 굳이 회전되어 그려질 부분에 왜 확대,축소해서 그려줘야 하는가 하는 부분은 미스테리입니다. 이 부분도 속도를 꽤 잡아먹고 있는데, 제가 팔레트 땜에 고민하며 수정하다 보니, 절케 되지 않으면 이상한 색으로 되어 버리더군요..
분석해서 결과를 다음 함수에서 밝혀 드리겠습니다.
^^;;; 글고, 저 초보입니다. 소스 지저분해도 용서하세요. PHP 또는 프로그램 배운지 2달밖에 안됐습니다. 원래 디자이너입니다.. ㅋㅋ ㅡ.ㅡ;;
댓글 7
제목 | 글쓴이 | 날짜 |
---|---|---|
cron을 이용해 윈앰프 방송정보를 빠르게 분석. [9] | Romeo | 2002.01.15 |
파일시스템에서 비밀번호 생성/수정/인증 [7] | 두기두바 | 2002.01.10 |
파일시스템(배열)에서의 검색기능 [5] | 두기두바 | 2002.01.09 |
[추천 팁] 디망쉬식 스킨 시스템 [4] | 디망쉬 | 2001.12.11 |
[추천 소스] phpMyAdmin 다중사용자용... [5] | WOWpc | 2001.11.29 |
MySQL에서 한글 정렬 문제 [2] | 손정호 | 2001.11.21 |
phpMyAdmin에서 dump 안 되시는 분들 보세요 [5] | 똥가리 | 2001.11.18 |
컴에 phpMyAdmin 깔고 원격 Mysql 관리.(이것도 팁이 되려나?) [1] | 최형삼 | 2001.11.17 |
[추천 소스] 특정일로부터 몇일 지났나 또는 몇일 남았나 알아보는 소스 ㅡ.ㅡ; [1] | 타스케 | 2001.11.15 |
게시판 만들 때 스팸메일을 막을 수 있는 방법중 한개. [11] | WOWpc | 2001.11.09 |
알렉사 순위 가져오는 스크립트;;
[30]
![]() | zero | 2001.11.06 |
[GD] 이미지 회전 함수 공개합니다. [7] | 노경민 | 2001.11.05 |
자동차세 연체가산금 계산기 | secret | 2001.04.02 |
Imagechar() 함수에서 한문자씩쓰는거 여러글짜이어쓰는함수 | 김승태 | 2001.10.20 |
남은 계정 용량 확인하는 PHP [17] | 겜올드™ | 2001.09.09 |
php 로 swf 맹글기 [3] | 리산 | 2001.08.30 |
mysql_fetch_row함수와 mysql_fetch_array함수의 차이점. [4] | webzzang | 2001.08.22 |
양력을 음력으로... [7] | pupstar | 2001.08.14 |
1900년부터 2043년까지 음력을 양력으로..... [3] | pupstar | 2001.08.14 |
지금까지 살아온 날 계산해 주는 스크립트 [6] | skyel | 2001.07.20 |