웹마스터 팁

안녕하세요, 요즘 이미지 관리툴을 짜고 있는 막강커플홈 희민닷컴(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달밖에 안됐습니다. 원래 디자이너입니다.. ㅋㅋ ㅡ.ㅡ;;
제목 글쓴이 날짜
[클래스] 클래스 #1 [8] file )OsE= 2002.08.07
TheMics의 예제와 함께하는 PHP기초(中) [1] TheMics 2002.08.05
Apache나 IIS등 웹서버 설치 않하고도 PHP 실행해보는 방법 [9] 차카게살자 2002.08.02
[초간단 팁] 프로그래밍 스타일, 절대 경로 [8] )OsE= 2002.08.02
[Header 이용하기 #3] 페이지 이동 [2] )OsE= 2002.08.01
[Header 이용하기 #2] 파일 다운로드 )OsE= 2002.08.01
[Header 이용하기 #1] No-cache [1] )OsE= 2002.08.01
[초보자] 자기 계정에 APM,Perl,PHP이 지원하는지 알아보기. [5] ZipShin 2002.08.01
(삽질완료) 다중도메인, 접속도메인따라 경로결정 [1] nrhythm 2002.07.25
원격침입과 도스공격이 가능한 PHP 취약점 [11] JunYa™ 2002.07.24
PHP를 리눅스 셸 프로그래밍할때 PHP파일 의 경로.. [2] 실버 2002.07.18
[추천 팁] 폴더내의 파일중에서 특정정보만 뽑아오기. [2] M2Vis 2002.07.12
[추천 팁] 파일의 최종접근시간과 파일의 수정시간을 알려주는 함수 [2] ssukai 2002.07.10
PHP 와 Flash 를 이용해 즉석복권을 만들어 보자. [2] 다솜아빠 2002.07.10
[추천 팁] 웹 브라우저가 한글인지 영문인지(다른 언어인지) 자동 인식하기... [1] 박용구 2002.07.10
[PHP]간단한 로그인페이지 만들기 [15] ZipShin 2002.07.09
php소스를 윈도우 실행파일로 만드는 컴파일러 있나요? [2] 소우리 2002.07.08
배경그림과 글자색상,배경색상을 지정해주는 php스크립트 [2] ZipShin 2002.07.07
echo를 처음사용하시는 초보들에게... [10] ZipShin 2002.07.06
HTML 태그 메일 전송하기 [2] ZipShin 2002.07.06