이전에 강좌로 하던 함수를 모닝님의 요청으로 조금 수정햇습니다.
원격이미지의 썸네일 만드는 기능도 포함하였습니다.
해당 라이브러리를 필요한 곳에 인클루드 하시고.
create_thumbnail('http://apmusers.com/tt/attach/1/1267047665.jpg', 'a.png', 50); 나
create_thumbnail('./attach/1/1267047665.jpg', 'a.png', 50); 등로 사용하면 됩니다.
자세한 옵션이나 설명은 라이브러리 파일내에 포함되어있습니다.
댓글 30개
감사합니다 창화님^^
저도 작은 팁 하나 드립니다.
창화님의 썸네일 함수에 언샵마스크를 적용하는 팁하나 올립니다.
언샵마스크의 효과는 아래 링크에서 보실 수 있습니다.
샘플 페이지 : http://carisma.co.kr/v2/sub/thumb.php
언샵마스크는 썸네일 생성시에 이미지가 뭉개지면서 흐릿해지는데
이걸 깔끔하게 샤픈이미지로 만들어 줍니다.
위 샘플링크에서 볼 수 있듯이 400 픽셀의 이미지에선 잘 차이가 나지 않지만
200픽셀이미지에서는 차이가 나기 사작하며 100 픽셀에서는 확연한 차이가 납니다.
창화님의 썸네일 함수에 아래의 내용을 추가하면 됩니다.
1. 905번 째줄 function create_thumbnail(.....){ 의 위쪽에 아래의 내용을 추가해 주세요.
function UnsharpMask_100_1_2($img, $amount, $radius, $threshold)
{
// $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 = $img;
$imgCanvas2 = $img;
$imgBlur = imagecreatetruecolor($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
}
$imgCanvas = $imgBlur;
// 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);
}
}
}
return $img;
}
2. 918번째 줄 $watermark_padding = 10;//원본과 워터마크 사이의 여백 : 10px 밑으로 아래 내용추가
$filter[arg1] = 100;
$filter[arg2] = 1;
$filter[arg3] = 2;
3. 978번째줄 $result_save = save_image_from_resource (...); 바로 위에 아래 한줄 추가
UnsharpMask_100_1_2($dst, $filter[arg1], $filter[arg2], $filter[arg3]);
위처럼 적용하시면 창화님의 썸네일 함수에서 언샵 마스크를 적용하여 사용할 수 있습니다.
ps.쓸모없다고 말하진 말아주세요 ^^;;
저도 작은 팁 하나 드립니다.
창화님의 썸네일 함수에 언샵마스크를 적용하는 팁하나 올립니다.
언샵마스크의 효과는 아래 링크에서 보실 수 있습니다.
샘플 페이지 : http://carisma.co.kr/v2/sub/thumb.php
언샵마스크는 썸네일 생성시에 이미지가 뭉개지면서 흐릿해지는데
이걸 깔끔하게 샤픈이미지로 만들어 줍니다.
위 샘플링크에서 볼 수 있듯이 400 픽셀의 이미지에선 잘 차이가 나지 않지만
200픽셀이미지에서는 차이가 나기 사작하며 100 픽셀에서는 확연한 차이가 납니다.
창화님의 썸네일 함수에 아래의 내용을 추가하면 됩니다.
1. 905번 째줄 function create_thumbnail(.....){ 의 위쪽에 아래의 내용을 추가해 주세요.
function UnsharpMask_100_1_2($img, $amount, $radius, $threshold)
{
// $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 = $img;
$imgCanvas2 = $img;
$imgBlur = imagecreatetruecolor($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
}
$imgCanvas = $imgBlur;
// 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);
}
}
}
return $img;
}
2. 918번째 줄 $watermark_padding = 10;//원본과 워터마크 사이의 여백 : 10px 밑으로 아래 내용추가
$filter[arg1] = 100;
$filter[arg2] = 1;
$filter[arg3] = 2;
3. 978번째줄 $result_save = save_image_from_resource (...); 바로 위에 아래 한줄 추가
UnsharpMask_100_1_2($dst, $filter[arg1], $filter[arg2], $filter[arg3]);
위처럼 적용하시면 창화님의 썸네일 함수에서 언샵 마스크를 적용하여 사용할 수 있습니다.
ps.쓸모없다고 말하진 말아주세요 ^^;;
게시글 목록
| 번호 | 제목 |
|---|---|
| 384 | |
| 12508 |
JavaScript
서버시간 알아내기
|
| 383 | |
| 381 | |
| 20395 | |
| 12507 | |
| 12506 | |
| 12505 | |
| 12504 |
웹서버
서버 동시접속자 설정 변경하기
|
| 12503 | |
| 12502 | |
| 12500 | |
| 12499 | |
| 12498 |
MySQL
테이블 복사 쿼리
|
| 20392 | |
| 12497 |
PHP
현재 접속중인 사용자 나타내기
|
| 12496 |
MySQL
mysql select 후 update 하기
|
| 12495 | |
| 12494 |
PHP
한글문자열 자르는 법 입니다.
|
| 12493 | |
| 12492 | |
| 12491 |
PHP
이메일주소 검사하기 입니다.
|
| 12490 | |
| 12489 | |
| 12488 |
node.js
Node js 게시판 프로젝트 소개합니다.
|
댓글 작성
댓글을 작성하시려면 로그인이 필요합니다.
로그인하기