스마티용 플러그인을 손봐서 만들것임.
언샤픈마트크는 이곳에서 좀더 자세히 볼수 있음
미니보드용은 이곳 에서...
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);
}
}
if(@imagetypes() & IMG_PNG) @ImagePNG($_DST['image'],$output);
else @ImageJPEG($_DST['image'],$output);
@chmod($output,0606);
언샤픈마트크는 이곳에서 좀더 자세히 볼수 있음
미니보드용은 이곳 에서...
<?
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;
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']);
$_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'];
$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]);
}
}
}
//// 큰 쪽을 수정
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; }
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 ($_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'];
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);
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']);
imagedestroy($_SRC['image']);
return file_exists($output);
}
function UnsharpMask($img, $amount, $radius, $threshold) {
}
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.
////
///////////////////////////////////////////////////////////////////////////////////////////////
////
//// 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.
// 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);
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
//
//////////////////////////////////////////////////
//
// 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 {
$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);
// 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
}
}
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;
// 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;
}
?>
?>