웹마스터 팁

안녕하세요, 요즘 이미지 관리툴을 짜고 있는 막강커플홈 희민닷컴(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달밖에 안됐습니다. 원래 디자이너입니다.. ㅋㅋ ㅡ.ㅡ;;
제목 글쓴이 날짜
좋은 난수값을 얻기위한 시드배정 방법 mt_srand(), srand() 차카게살자 2002.02.21
필터링조금 다른거.. [7] 두기두바 2002.02.10
한글 필터링 정확히 하기 [1] mini 2002.02.09
원고지 함수;; [3] 디쓰 2002.02.07
md5() 알고리듬 [8] 양창민 2002.02.05
이제 홈페이지 업데이트 안하는 수모를 겪지 말자! [7] 담배를끊으면복이옴과 2002.02.02
이제 PHP에 ?id=가나다라 같은것을 넣자! [12] 담배를끊으면복이옴과 2002.01.30
초보분들을 위한 연산자 총정리 [6] TheMics 2002.01.29
[PHP]모르는 분이 있는듯 해서...변수관련 [2] TheMics 2002.01.24
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
[GD] 이미지 회전 함수 공개합니다. [7] 노경민 2001.11.05