웹마스터 팁

원본위치

http://www.vikjavev.com/hovudsida/umtestside.php

원본위치에 가서 test해보세요...

제로보드와 아직 연동 test 소스 변경은 못했지만.
고수님들 참고 하시면 될듯..

글구.. 썸네일 생성시 확실히 화질 차이가 납니다..

------------



<?php

/*

WARNING! Due to a known bug in PHP 4.3.2 this script is not working well in this version. The sharpened images get too dark. The bug is fixed in version 4.3.3.


Unsharp masking is a traditional darkroom technique that has proven very suitable for
digital imaging. The principle of unsharp masking is to create a blurred copy of the image
and compare it to the underlying original. The difference in colour values
between the two images is greatest for the pixels near sharp edges. When this
difference is subtracted from the original image, the edges will be
accentuated.

The Amount parameter simply says how much of the effect you want. 100 is 'normal'.
Radius is the radius of the blurring circle of the mask. 'Threshold' is the least
difference in colour values that is allowed between the original and the mask. In practice
this means that low-contrast areas of the picture are left unrendered whereas edges
are treated normally. This is good for pictures of e.g. skin or blue skies.

Any suggenstions for improvement of the algorithm, expecially regarding the speed
and the roundoff errors in the Gaussian blur process, are welcome.

*/

function UnsharpMask($img, $amount, $radius, $threshold)        {

////////////////////////////////////////////////////////////////////////////////////////////////
////
////                  p h p U n s h a r p M a s k
////
////        Unsharp mask algorithm by Torstein Hønsi 2003.
////                 thoensi_at_netcom_dot_no.
////                   Please leave this notice.
////
///////////////////////////////////////////////////////////////////////////////////////////////


        // $img is an image that is already created within php using
        // imgcreatetruecolor. No url! $img must be a truecolor image.

        // Attempt to calibrate the parameters to Photoshop:
        if ($amount > 500)        $amount = 500;
        $amount = $amount * 0.016;
        if ($radius > 50)        $radius = 50;
        $radius = $radius * 2;
        if ($threshold > 255)        $threshold = 255;
        
        $radius = abs(round($radius));         // Only integers make sense.
        if ($radius == 0) {
                return $img; imagedestroy($img); break;                }
        $w = imagesx($img); $h = imagesy($img);
        $imgCanvas = imagecreatetruecolor($w, $h);
        $imgCanvas2 = imagecreatetruecolor($w, $h);
        $imgBlur = imagecreatetruecolor($w, $h);
        $imgBlur2 = imagecreatetruecolor($w, $h);
        imagecopy ($imgCanvas, $img, 0, 0, 0, 0, $w, $h);
        imagecopy ($imgCanvas2, $img, 0, 0, 0, 0, $w, $h);
        

        // Gaussian blur matrix:
        //                                                
        //        1        2        1                
        //        2        4        2                
        //        1        2        1                
        //                                                
        //////////////////////////////////////////////////

        // Move copies of the image around one pixel at the time and merge them with weight
        // according to the matrix. The same matrix is simply repeated for higher radii.
        for ($i = 0; $i < $radius; $i++)        {
                imagecopy ($imgBlur, $imgCanvas, 0, 0, 1, 1, $w - 1, $h - 1); // up left
                imagecopymerge ($imgBlur, $imgCanvas, 1, 1, 0, 0, $w, $h, 50); // down right
                imagecopymerge ($imgBlur, $imgCanvas, 0, 1, 1, 0, $w - 1, $h, 33.33333); // down left
                imagecopymerge ($imgBlur, $imgCanvas, 1, 0, 0, 1, $w, $h - 1, 25); // up right
                imagecopymerge ($imgBlur, $imgCanvas, 0, 0, 1, 0, $w - 1, $h, 33.33333); // left
                imagecopymerge ($imgBlur, $imgCanvas, 1, 0, 0, 0, $w, $h, 25); // right
                imagecopymerge ($imgBlur, $imgCanvas, 0, 0, 0, 1, $w, $h - 1, 20 ); // up
                imagecopymerge ($imgBlur, $imgCanvas, 0, 1, 0, 0, $w, $h, 16.666667); // down
                imagecopymerge ($imgBlur, $imgCanvas, 0, 0, 0, 0, $w, $h, 50); // center
                imagecopy ($imgCanvas, $imgBlur, 0, 0, 0, 0, $w, $h);

                // During the loop above the blurred copy darkens, possibly due to a roundoff
                // error. Therefore the sharp picture has to go through the same loop to
                // produce a similar image for comparison. This is not a good thing, as processing
                // time increases heavily.
                imagecopy ($imgBlur2, $imgCanvas2, 0, 0, 0, 0, $w, $h);
                imagecopymerge ($imgBlur2, $imgCanvas2, 0, 0, 0, 0, $w, $h, 50);
                imagecopymerge ($imgBlur2, $imgCanvas2, 0, 0, 0, 0, $w, $h, 33.33333);
                imagecopymerge ($imgBlur2, $imgCanvas2, 0, 0, 0, 0, $w, $h, 25);
                imagecopymerge ($imgBlur2, $imgCanvas2, 0, 0, 0, 0, $w, $h, 33.33333);
                imagecopymerge ($imgBlur2, $imgCanvas2, 0, 0, 0, 0, $w, $h, 25);
                imagecopymerge ($imgBlur2, $imgCanvas2, 0, 0, 0, 0, $w, $h, 20 );
                imagecopymerge ($imgBlur2, $imgCanvas2, 0, 0, 0, 0, $w, $h, 16.666667);
                imagecopymerge ($imgBlur2, $imgCanvas2, 0, 0, 0, 0, $w, $h, 50);
                imagecopy ($imgCanvas2, $imgBlur2, 0, 0, 0, 0, $w, $h);
                
                }

        // Calculate the difference between the blurred pixels and the original
        // and set the pixels
        for ($x = 0; $x < $w; $x++)        { // each row
                for ($y = 0; $y < $h; $y++)        { // each pixel
                                
                        $rgbOrig = ImageColorAt($imgCanvas2, $x, $y);
                        $rOrig = (($rgbOrig >> 16) & 0xFF);
                        $gOrig = (($rgbOrig >> 8) & 0xFF);
                        $bOrig = ($rgbOrig & 0xFF);
                        
                        $rgbBlur = ImageColorAt($imgCanvas, $x, $y);
                        
                        $rBlur = (($rgbBlur >> 16) & 0xFF);
                        $gBlur = (($rgbBlur >> 8) & 0xFF);
                        $bBlur = ($rgbBlur & 0xFF);
                        
                        // When the masked pixels differ less from the original
                        // than the threshold specifies, they are set to their original value.
                        $rNew = (abs($rOrig - $rBlur) >= $threshold)
                                ? max(0, min(255, ($amount * ($rOrig - $rBlur)) + $rOrig))
                                : $rOrig;
                        $gNew = (abs($gOrig - $gBlur) >= $threshold)
                                ? max(0, min(255, ($amount * ($gOrig - $gBlur)) + $gOrig))
                                : $gOrig;
                        $bNew = (abs($bOrig - $bBlur) >= $threshold)
                                ? max(0, min(255, ($amount * ($bOrig - $bBlur)) + $bOrig))
                                : $bOrig;
                        
                        
                                                
                        if (($rOrig != $rNew) || ($gOrig != $gNew) || ($bOrig != $bNew)) {
                                    $pixCol = ImageColorAllocate($img, $rNew, $gNew, $bNew);
                                    ImageSetPixel($img, $x, $y, $pixCol);
                                }
}
                }

        imagedestroy($imgCanvas);
        imagedestroy($imgCanvas2);
        imagedestroy($imgBlur);
        imagedestroy($imgBlur2);
        
        return $img;

        }
?>

이상입니다.....!!

사용법은 저두 잘은 몰라요.
하지만 고수님들은 잘 알겠죠..


제목 글쓴이 날짜
재미있는놀이 [ 숫자맞추기] [3] NzeoZen 2003.08.16
[수정]롤오버 메뉴에 하위 부메뉴 레이어..(아웃시 하위메뉴사라짐) [24] 미니 2003.08.18
경우에 따라 공지가 새창에서도 보여야 하고, 일반 페이지에서도 보여야 할때 조은하루 2003.08.22
마우스 움직임에 따라 속도도, 방향도 자유자재 스크롤 소스 [1] RedEye(kaist) 2003.08.24
메인 접속하면 할아버지 나오는... [6] 공유 2003.08.28
변수의 실제 바이트 수를 리턴하는 팁 [2] 한승진 2003.08.29
변수에서 숫자만 리턴합니다. 한승진 2003.08.29
전화번호 유효성 검사(핸폰,집전화 몽땅) [4] 한승진 2003.08.29
주어진 값이 한글,영어,숫자인지 체크 [2] 한승진 2003.08.29
frame으로 홈페이지 구성시 한쪽 페이지는 유동성있는 파일 대입법(?) monozzang 2003.09.02
홈에 TT WEB FTP 달기 [12] PHASE 2003.09.03
진수란? [4] 타키 2003.09.04
변수란? [1] 타키 2003.09.04
### MSN/Windows Messenger용 친구 추가스크립트 ### [10] 웹스 2003.09.05
플레쉬 메뉴를 표방한..=ㅁ= 자바스크립트의 수작 버튼 밑으로 스크롤 되는 아이콘입니다. [47] beMax 2003.09.14
[초간단 자바스크립트!] 창 이동시 경고 메세지 띄우기...!;;; [2] ∑Ztxy 2003.09.26
[초간단 자바스크립트!] 뒤로,앞으로,중지,홈으로 버튼 만들기... [7] ∑Ztxy 2003.09.26
[초간단 자바스크립트!] 이미지에 스포트라이트 효과주기... [1] ∑Ztxy 2003.09.26
[초간단 자바스크립트(강의)!] 버튼을 눌러서 배경색 바꾸기 [5] ∑Ztxy 2003.09.26
[초간단 자바스크립트(강의)!] 풀스크린 창 띄우기... [3] ∑Ztxy 2003.09.27