스마티용 플러그인을 손봐서 만들것임.
언샤픈마트크는 이곳에서 좀더 자세히 볼수 있음
미니보드용은 이곳 에서...
<?
 function function_thumb($input, $output, $x, $y, $imgsharpen, $imgcrop)
 {
 $params['file']=$input;
 $_DST['file']=$output;
 $_DST['width']=$x;
 $_DST['height']=$y;
 if($imgcrop)$params['crop'] = 1;
 if($imgsharpen)$params['sharpen'] = 1;
 $temp = getimagesize($params['file']);
 $_SRC['file']  = $params['file'];
 $_SRC['width']  = $temp[0];
 $_SRC['height']  = $temp[1];
 $_SRC['type']  = $temp[2]; // 1=GIF, 2=JPG, 3=PNG, SWF=4
 $_SRC['string']  = $temp[3];
 $_SRC['filename']  = basename($params['file']);
 $_SRC['modified']  = filemtime($params['file']);

 if($params['crop'] and $x and $y)
  {       
  $width_ratio = $_SRC['width']/$_DST['width'];
  $height_ratio = $_SRC['height']/$_DST['height'];
 
  // Es muss an der Breite beschnitten werden
  if ($width_ratio > $height_ratio)
   {
   $_DST['offset_w'] = round(($_SRC['width']-$_DST['width']*$height_ratio)/2);
   $_SRC['width'] = round($_DST['width']*$height_ratio);
   }
  // es muss an der H?e beschnitten werden
  elseif ($width_ratio < $height_ratio)
   {
   $_DST['offset_h'] = round(($_SRC['height']-$_DST['height']*$width_ratio)/2);
   $_SRC['height'] = round($_DST['height']*$width_ratio);
   }
  }
  else {
  $params['longside'] = $_DST['width'];
  $params['shortside'] = $_DST['height'];
  $temp_large=$temp[0]>$temp[1] ? $temp[0] : $temp[1];
 
   //// 큰 쪽을 수정
   if($x and $y){
    if($temp_large>$x){
     $temp_sel = $temp_large==$temp[0] ? "width" : "height" ;
     if($temp_sel=="width"){
      $_DST['width']=$temp[0]>=$x ? $x : $temp[0];
      $_DST['height']=ceil($_DST['width'] * $temp[1] / $temp[0]);
     } else {
      $_DST['height']=$temp[1]>=$x ? $x : $temp[1];
      $_DST['width']=ceil($_DST['height'] * $temp[0] / $temp[1]);
     }
    }
   }
   //// 한쪽이 안정해졌을경우 ( 한쪽에만 맞춤 )
   elseif(!$x || !$y)
   {
    if($x){ // width 를 수치로 고정
     $_DST['width']=$x;
     $_DST['height']=ceil($_DST['width'] * $temp[1] / $temp[0]);
    }
    else{
     $_DST['height']=$y;
     $_DST['width']=ceil($_DST['height'] * $temp[0] / $temp[1]);
    }
   }
   
   //// 양쪽 다 정해졌을 경우
   else{ $_DST['width']=$x; $_DST['height']=$y; }
  }
 if ($_SRC['type'] == 1) $_SRC['image'] = imagecreatefromgif($_SRC['file']);
 if ($_SRC['type'] == 2) $_SRC['image'] = imagecreatefromjpeg($_SRC['file']);
 if ($_SRC['type'] == 3) $_SRC['image'] = imagecreatefrompng($_SRC['file']);
 if (!empty($params['type'])) $_DST['type'] = $params['type'];
 else $_DST['type'] = $_SRC['type'];
 $_DST['image'] = imagecreatetruecolor($_DST['width'], $_DST['height']);
 imagecopyresampled($_DST['image'], $_SRC['image'], 0, 0, $_DST['offset_w'], $_DST['offset_h'], $_DST['width'], $_DST['height'], $_SRC['width'], $_SRC['height']);
 if ($params['sharpen']) $_DST['image'] = UnsharpMask($_DST['image'],60,0.5,3);

 if(@imagetypes() & IMG_PNG) @ImagePNG($_DST['image'],$output);
      else @ImageJPEG($_DST['image'],$output);
      @chmod($output,0606);
 imagedestroy($_DST['image']);
 imagedestroy($_SRC['image']);
 return file_exists($output);
}

function UnsharpMask($img, $amount, $radius, $threshold)    { 
////////////////////////////////////////////////////////////////////////////////////////////////  
////  
////                  Unsharp Mask for PHP - version 2.1  
////  
////    Unsharp mask algorithm by Torstein Hønsi 2003-06.  
////             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); 
    $imgBlur = imagecreatetruecolor($w, $h); 
     
    // Gaussian blur matrix: 
    //                         
    //    1    2    1         
    //    2    4    2         
    //    1    2    1         
    //                         
    ////////////////////////////////////////////////// 
         
    if (function_exists('imageconvolution')) { // PHP >= 5.1  
            $matrix = array(  
            array( 1, 2, 1 ),  
            array( 2, 4, 2 ),  
            array( 1, 2, 1 )  
        );  
        imagecopy ($imgBlur, $img, 0, 0, 0, 0, $w, $h); 
        imageconvolution($imgBlur, $matrix, 16, 0);  
    }  
    else {  
    // 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, $img, 0, 0, 1, 0, $w - 1, $h); // left 
            imagecopymerge ($imgBlur, $img, 1, 0, 0, 0, $w, $h, 50); // right 
            imagecopymerge ($imgBlur, $img, 0, 0, 0, 0, $w, $h, 50); // center 
            imagecopy ($imgCanvas, $imgBlur, 0, 0, 0, 0, $w, $h); 
            imagecopymerge ($imgBlur, $imgCanvas, 0, 0, 0, 1, $w, $h - 1, 33.33333 ); // up 
            imagecopymerge ($imgBlur, $imgCanvas, 0, 1, 0, 0, $w, $h, 25); // down 
        } 
    } 
    if($threshold>0){ 
        // 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($img, $x, $y); 
                $rOrig = (($rgbOrig >> 16) & 0xFF); 
                $gOrig = (($rgbOrig >> 8) & 0xFF); 
                $bOrig = ($rgbOrig & 0xFF); 
                 
                $rgbBlur = ImageColorAt($imgBlur, $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); 
                    } 
            } 
        } 
    } 
    else{ 
        for ($x = 0; $x < $w; $x++)    { // each row 
            for ($y = 0; $y < $h; $y++)    { // each pixel 
                $rgbOrig = ImageColorAt($img, $x, $y); 
                $rOrig = (($rgbOrig >> 16) & 0xFF); 
                $gOrig = (($rgbOrig >> 8) & 0xFF); 
                $bOrig = ($rgbOrig & 0xFF); 
                 
                $rgbBlur = ImageColorAt($imgBlur, $x, $y); 
                 
                $rBlur = (($rgbBlur >> 16) & 0xFF); 
                $gBlur = (($rgbBlur >> 8) & 0xFF); 
                $bBlur = ($rgbBlur & 0xFF); 
                 
                $rNew = ($amount * ($rOrig - $rBlur)) + $rOrig; 
                    if($rNew>255){$rNew=255;} 
                    elseif($rNew<0){$rNew=0;} 
                $gNew = ($amount * ($gOrig - $gBlur)) + $gOrig; 
                    if($gNew>255){$gNew=255;} 
                    elseif($gNew<0){$gNew=0;} 
                $bNew = ($amount * ($bOrig - $bBlur)) + $bOrig; 
                    if($bNew>255){$bNew=255;} 
                    elseif($bNew<0){$bNew=0;} 
                $rgbNew = ($rNew << 16) + ($gNew <<8) + $bNew; 
                    ImageSetPixel($img, $x, $y, $rgbNew); 
            } 
        } 
    } 
    imagedestroy($imgCanvas); 
    imagedestroy($imgBlur); 
     
    return $img; 
}
?>

+ Recent posts