웹마스터 팁

원본위치

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;

        }
?>

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

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


제목 글쓴이 날짜
윈도우XP 서비스팩2 사용자인지 아닌지 판별하기 [22] file 天高馬肥[쉬드] 2004.10.09
echo 안에 더블쿼테이션을 사용하기 [15] 토토루 2004.10.05
trim 과 addslashes를 일괄처리하는 함수 [7] BigStone 2004.10.02
'' -> ""로 만들기(?) [2] 플로렐라 2004.09.17
crontab 실제 사용 예제, 온라인 웹 게임 운영하기 (팁 + 오픈 소스 게임 소개 ^^;) [1] 박용구 2004.09.14
날씨별로 다양한 말이나 음악 보여주기[수정] [4] 로크 2004.09.13
-긴급소스 수정본- winamp 방송정보 알아내기 file 이승원 2004.09.11
랜덤으로 파일 가져와서 재생하고, 끝나면 다른 랜덤파일 또 재생하기.. 겜방 2004.09.10
썸네일 생성시 unsharp mask활용할수 있는 팁..소스 file 앗싸~~ 곰세마리 2004.09.06
Echo 여러번호출? 할때 깜빡임 없애기 [5] file 신희돈 2004.09.03
서브디렉토리,파일까지 모두 삭제하는 함수. [5] Lepas 2004.08.24
4. include, require 그리고 뽀나쓰~ [8] 티다 2004.08.19
공유 메모리 제어에 관한 함수 정리 (공유메모리) [5] Simsim 2004.08.16
접속자 IP 주소 텍스트로 저장 [7] 천상원 2004.08.15
PHP프로그램에 간단한 인증(로그인) 걸기. [15] Lepas 2004.08.09
파일업로드시 파일명 중복되지 않게 저장하기... [6] 김지호 2004.08.06
ISO 3166 국가코드로인한, 국가 검출소스 [4] kein23 2004.08.04
IP 뒤에 두칸 글자 길이에 따라서 *로 나타내기 [13] Sy-Tgt(stargt) 2004.07.30
php로 이미지를 mysql디비 저장하고 보여주는 소스 [2] QQQ 2004.07.30
디비내용을 엑셀,워드,파워포인트 파일로 다운로드 시키는 방법 [13] QQQ 2004.07.30